= view('themes/_commonPartialsBs/_alertBoxes'); ?>
@@ -27,7 +27,7 @@
= lang('Presupuestos.incRei') ?> |
= lang('Presupuestos.paginas') ?> |
= lang('Presupuestos.tirada') ?> |
-
= lang('Presupuestos.totalPedido') ?> |
+
= lang('Presupuestos.totalPresupuesto') ?> |
= lang('Presupuestos.presupuestoEstado') ?> |
= lang('Basic.global.Action') ?> |
@@ -104,8 +104,15 @@
{ 'data': 'inc_rei' },
{ 'data': 'paginas' },
{ 'data': 'tirada' },
- { 'data': 'total_pedido' },
- { 'data': 'estado' },
+ { 'data': 'total_presupuesto' },
+ { 'data': 'estado' ,
+ 'render': function ( data, type, row, meta ) {
+ if(data=='borrador')
+ return '= lang('Presupuestos.presupuestoEstadoBorrador') ?>';
+ else if(data=='aceptado')
+ return '= lang('Presupuestos.presupuestoEstadoAceptado') ?>';
+ }
+ },
{ 'data': actionBtns }
]
});
diff --git a/ci4/app/Views/themes/backend/vuexy/form/tarifas/encuadernacion/viewTarifaEncuadernacionForm.php b/ci4/app/Views/themes/backend/vuexy/form/tarifas/encuadernacion/viewTarifaEncuadernacionForm.php
index 80aba7f1..b96bbef6 100644
--- a/ci4/app/Views/themes/backend/vuexy/form/tarifas/encuadernacion/viewTarifaEncuadernacionForm.php
+++ b/ci4/app/Views/themes/backend/vuexy/form/tarifas/encuadernacion/viewTarifaEncuadernacionForm.php
@@ -172,11 +172,11 @@
table : "#tableOfTarifaencuadernacionlineas",
idSrc: 'id',
fields: [ {
- name: "paginas_min"
+ name: "paginas_libro_min"
}, {
name: "precio_max"
}, {
- name: "paginas_max"
+ name: "paginas_libro_max"
}, {
name: "precio_min"
}, {
@@ -243,9 +243,9 @@
async: true,
}),
columns: [
- { 'data': 'paginas_min' },
+ { 'data': 'paginas_libro_min' },
{ 'data': 'precio_max' },
- { 'data': 'paginas_max' },
+ { 'data': 'paginas_libro_max' },
{ 'data': 'precio_min' },
{ 'data': 'margen' },
{
diff --git a/ci4/app/Views/themes/backend/vuexy/form/test_js/test_js.js b/ci4/app/Views/themes/backend/vuexy/form/test_js/test_js.js
new file mode 100644
index 00000000..282ca8ac
--- /dev/null
+++ b/ci4/app/Views/themes/backend/vuexy/form/test_js/test_js.js
@@ -0,0 +1,17 @@
+
+
+
+
+/*
+fetch("/presupuestos/cosidotapablanda/datatable", {
+
+ method: 'POST',
+ body: JSON.stringify(data),
+ headers: { 'X-Requested-With': 'XMLHttpRequest' },
+
+})
+.then(response => console.log(response))
+//.then(json => console.log(json))
+.catch(err => console.log(err));
+
+*/
diff --git a/ci4/app/Views/themes/backend/vuexy/form/test_js/viewTest.php b/ci4/app/Views/themes/backend/vuexy/form/test_js/viewTest.php
new file mode 100644
index 00000000..756a2230
--- /dev/null
+++ b/ci4/app/Views/themes/backend/vuexy/form/test_js/viewTest.php
@@ -0,0 +1,36 @@
+= $this->extend('themes/backend/vuexy/main/defaultlayout') ?>
+
+
+= $this->section("additionalInlineJs") ?>
+
+ console.log("Hola")
+
+ let datos = {
+ table_type: 'comp_int_bn',
+ paginas: 200,
+ tirada: 100,
+ merma: 10,
+ ancho: 98 ,
+ alto: 148,
+ papel_generico_id: 4,
+ papel_generico: 'AHUESADO OFFSET',
+ gramaje: 80,
+ = csrf_token() ?? "token" ?> : = csrf_token() ?>v
+ }
+
+
+ $.ajax({
+ type:"POST",
+ url:"cosidotapablanda/datatable",
+ data:datos, // data recive un objeto con la informacion que se enviara al servidor
+ success:function(data){ //success es una funcion que se utiliza si el servidor retorna informacion
+ console.log(data)
+ yeniden(data.= csrf_token() ?>);
+ },
+ //dataType: dataType // El tipo de datos esperados del servidor. Valor predeterminado: Intelligent Guess (xml, json, script, text, html).
+ })
+
+
+=$this->endSection() ?>
+
+
diff --git a/ci4/app/Views/themes/backend/vuexy/main/menu_digitalizacion.php b/ci4/app/Views/themes/backend/vuexy/main/menu_digitalizacion.php
index 29b8a349..6863729e 100644
--- a/ci4/app/Views/themes/backend/vuexy/main/menu_digitalizacion.php
+++ b/ci4/app/Views/themes/backend/vuexy/main/menu_digitalizacion.php
@@ -29,7 +29,7 @@
/**
* MENU CLIENTES
*/
- if (allowMenuSection($menus, ['Cliente', 'Tarifacliente'], 'index')):
+ if (allowMenuSection($menus, ['Cliente'], 'index')):
?>
- 0): ?>
- 0): ?>
-
-
-
diff --git a/ci4/app/Views/themes/backend/vuexy/main/menu_impresion.php b/ci4/app/Views/themes/backend/vuexy/main/menu_impresion.php
index 4a7622a4..97522ace 100644
--- a/ci4/app/Views/themes/backend/vuexy/main/menu_impresion.php
+++ b/ci4/app/Views/themes/backend/vuexy/main/menu_impresion.php
@@ -29,7 +29,7 @@
/**
* MENU CLIENTES
*/
- if (allowMenuSection($menus, ['Cliente', 'Tarifacliente'], 'index')):
+ if (allowMenuSection($menus, ['Cliente'], 'index')):
?>
- 0): ?>
- 0): ?>
-
-
-
@@ -76,7 +67,7 @@
@@ -125,16 +116,6 @@
- 0): ?>
- 0): ?>
-
-
-
-
0): ?>
0): ?>
- 0): ?>
- 0): ?>
-
-
-
diff --git a/ci4/app/Views/themes/backend/vuexy/pdfs/presupuesto.php b/ci4/app/Views/themes/backend/vuexy/pdfs/presupuesto.php
new file mode 100644
index 00000000..00241c88
--- /dev/null
+++ b/ci4/app/Views/themes/backend/vuexy/pdfs/presupuesto.php
@@ -0,0 +1,294 @@
+
+
+
+
+
+
+
= "Presupuesto " . "TBC" ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+ |
+ PRESUPUESTO Nº:
+ |
+
+ = "obj->id" ?>
+ |
+
+ CLIENTE:
+ |
+
+ = "obj->customer->name" ?>
+ |
+
+ FECHA:
+ |
+
+ = date("d/m/Y") ?>
+ |
+
+
+
+
+ |
+ Título: = "obj->titulo" ?>
+ |
+
+
+ |
+ Colección: = "obj->coleccion" ?>
+ |
+
+ Autor: = "obj->autor" ?>
+ |
+
+
+
+
+
+
+
+ | INTERIOR |
+
+
+
+
+ | Tipo de Impresión |
+ Blanco Y Negro |
+
+
+ | Ferro |
+ TBD |
+ Prototipo |
+ SI |
+ Ferro Digital |
+ SI |
+
+
+ | Formato |
+
+ = "obj->papel_formato->format()" ?> mm.
+ |
+
+
+ | Nº de páginas totales |
+ = "obj->paginas" ?> |
+
+
+ | Nº de páginas ByN |
+ = "paginas_negro" ?> |
+ Papel |
+ = "papel_negro" ?> |
+ Gramaje |
+ = "gramaje_negro" ?> |
+
+
+ | Nº de páginas Color |
+ = "paginas_color" ?> |
+ Papel |
+ = "papel_color" ?> |
+ Gramaje |
+ = "gramaje_color" ?> |
+
+
+
+
+
+
+
+ | CUBIERTA |
+
+
+
+
+ | Formato cubierta* |
+ = "obj->papel_formato->alto" ?> mm.
+ | Lomo |
+ = "TBD mm." ?> |
+
+
+ | Impresión |
+ = "cubierta_impresa_caras" ?> |
+ Papel |
+ = "papel_portada" ?> |
+ Gramaje |
+ = "gramaje_portada" ?> |
+ Plastificado |
+ = "plastificado_portada" ?> |
+
+
+ | Reserva UVI |
+ SI |
+
+
+ | Sobrecubierta |
+ = "resumen_cubierta" ?> |
+ Papel |
+ = "papel_cubierta" ?> |
+ Gramaje |
+ = "gramaje_cubierta" ?> |
+ Plastificado |
+ = "plastificado_cubierta" ?> |
+
+
+
+
+
+
+
+ | ENCUADERNACIÓN |
+
+
+
+
+ | Tipo |
+ = "encuardernado" ?> |
+ Solapas |
+ = "solapas_portada" ?> |
+ Ancho |
+ TBD cm |
+
+
+
+
+
+
+
+
+
+ | ENVÍO |
+
+
+
+
+
+ | El pedido será recogido por el cliente |
+
+
+
+
+
+
+ | Ejemplares |
+ = "TBD" ?> |
+ Dirección |
+ = "TBC" ?> |
+
+
+ | País |
+ = "TBC" ?> |
+ Provincia |
+ = "TBC" ?> |
+ C.P. |
+ = "TBC" ?> |
+ Ciudad |
+ = "TBC" ?> |
+ Telf. |
+ = "TBC" ?> |
+
+
+
+
+
+
+
+
+ |
+ |
+ Tirada |
+ U.Impresión 4% |
+ U.Envío 21% |
+ Precio** |
+ Precio UD. |
+ TOTAL CON IVA |
+
+
+
+
+ |
+ |
+ TBD uds. |
+ TBD € |
+ TBD € |
+ TBD € |
+ TBD € |
+ TBD € |
+
+
+
+
+ | Estos precios no incluyen I.V.A. |
+
+
+
+
+ comentarios_pdf)) { ?>
+ OBSERVACIONES
+ {!! nl2br($obj->comentarios_pdf) !!}
+
+
+
+
+
+
+
diff --git a/ci4/composer.json b/ci4/composer.json
index 687cdb91..c2b4eef4 100644
--- a/ci4/composer.json
+++ b/ci4/composer.json
@@ -11,7 +11,8 @@
"google/apiclient": "^2.11.0",
"firebase/php-jwt": "^5.4",
"aws/aws-sdk-php": "^3.206",
- "spatie/db-dumper": "^2.21"
+ "spatie/db-dumper": "^2.21",
+ "dompdf/dompdf": "^2.0"
},
"require-dev": {
"fakerphp/faker": "^1.9",
diff --git a/ci4/composer.lock b/ci4/composer.lock
index a2a4334c..5252d9b1 100644
--- a/ci4/composer.lock
+++ b/ci4/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "ea2c5914ab3f8f7779effd58bed12864",
+ "content-hash": "9478d2ca5dbbd157209c335eca83612f",
"packages": [
{
"name": "aws/aws-crt-php",
@@ -229,6 +229,68 @@
},
"time": "2023-05-21T13:41:12+00:00"
},
+ {
+ "name": "dompdf/dompdf",
+ "version": "v2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dompdf/dompdf.git",
+ "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dompdf/dompdf/zipball/e8d2d5e37e8b0b30f0732a011295ab80680d7e85",
+ "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "masterminds/html5": "^2.0",
+ "phenx/php-font-lib": ">=0.5.4 <1.0.0",
+ "phenx/php-svg-lib": ">=0.3.3 <1.0.0",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "ext-json": "*",
+ "ext-zip": "*",
+ "mockery/mockery": "^1.3",
+ "phpunit/phpunit": "^7.5 || ^8 || ^9",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "suggest": {
+ "ext-gd": "Needed to process images",
+ "ext-gmagick": "Improves image processing performance",
+ "ext-imagick": "Improves image processing performance",
+ "ext-zlib": "Needed for pdf stream compression"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Dompdf\\": "src/"
+ },
+ "classmap": [
+ "lib/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1"
+ ],
+ "authors": [
+ {
+ "name": "The Dompdf Community",
+ "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md"
+ }
+ ],
+ "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
+ "homepage": "https://github.com/dompdf/dompdf",
+ "support": {
+ "issues": "https://github.com/dompdf/dompdf/issues",
+ "source": "https://github.com/dompdf/dompdf/tree/v2.0.3"
+ },
+ "time": "2023-02-07T12:51:48+00:00"
+ },
{
"name": "ezyang/htmlpurifier",
"version": "v4.16.0",
@@ -1087,6 +1149,73 @@
},
"time": "2022-12-02T22:17:43+00:00"
},
+ {
+ "name": "masterminds/html5",
+ "version": "2.8.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Masterminds/html5-php.git",
+ "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf",
+ "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Masterminds\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matt Butcher",
+ "email": "technosophos@gmail.com"
+ },
+ {
+ "name": "Matt Farina",
+ "email": "matt@mattfarina.com"
+ },
+ {
+ "name": "Asmir Mustafic",
+ "email": "goetas@gmail.com"
+ }
+ ],
+ "description": "An HTML5 parser and serializer.",
+ "homepage": "http://masterminds.github.io/html5-php",
+ "keywords": [
+ "HTML5",
+ "dom",
+ "html",
+ "parser",
+ "querypath",
+ "serializer",
+ "xml"
+ ],
+ "support": {
+ "issues": "https://github.com/Masterminds/html5-php/issues",
+ "source": "https://github.com/Masterminds/html5-php/tree/2.8.1"
+ },
+ "time": "2023-05-10T11:58:31+00:00"
+ },
{
"name": "monolog/monolog",
"version": "2.9.1",
@@ -1430,6 +1559,96 @@
},
"time": "2020-10-15T08:29:30+00:00"
},
+ {
+ "name": "phenx/php-font-lib",
+ "version": "0.5.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dompdf/php-font-lib.git",
+ "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/dd448ad1ce34c63d09baccd05415e361300c35b4",
+ "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "^3 || ^4 || ^5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "FontLib\\": "src/FontLib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Ménager",
+ "email": "fabien.menager@gmail.com"
+ }
+ ],
+ "description": "A library to read, parse, export and make subsets of different types of font files.",
+ "homepage": "https://github.com/PhenX/php-font-lib",
+ "support": {
+ "issues": "https://github.com/dompdf/php-font-lib/issues",
+ "source": "https://github.com/dompdf/php-font-lib/tree/0.5.4"
+ },
+ "time": "2021-12-17T19:44:54+00:00"
+ },
+ {
+ "name": "phenx/php-svg-lib",
+ "version": "0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dompdf/php-svg-lib.git",
+ "reference": "76876c6cf3080bcb6f249d7d59705108166a6685"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/76876c6cf3080bcb6f249d7d59705108166a6685",
+ "reference": "76876c6cf3080bcb6f249d7d59705108166a6685",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": "^7.1 || ^8.0",
+ "sabberworm/php-css-parser": "^8.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Svg\\": "src/Svg"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Ménager",
+ "email": "fabien.menager@gmail.com"
+ }
+ ],
+ "description": "A library to read, parse and export to PDF SVG files.",
+ "homepage": "https://github.com/PhenX/php-svg-lib",
+ "support": {
+ "issues": "https://github.com/dompdf/php-svg-lib/issues",
+ "source": "https://github.com/dompdf/php-svg-lib/tree/0.5.0"
+ },
+ "time": "2022-09-06T12:16:56+00:00"
+ },
{
"name": "phpoffice/phpspreadsheet",
"version": "1.28.0",
@@ -1999,6 +2218,59 @@
},
"time": "2019-03-08T08:55:37+00:00"
},
+ {
+ "name": "sabberworm/php-css-parser",
+ "version": "8.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sabberworm/PHP-CSS-Parser.git",
+ "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/e41d2140031d533348b2192a83f02d8dd8a71d30",
+ "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30",
+ "shasum": ""
+ },
+ "require": {
+ "ext-iconv": "*",
+ "php": ">=5.6.20"
+ },
+ "require-dev": {
+ "codacy/coverage": "^1.4",
+ "phpunit/phpunit": "^4.8.36"
+ },
+ "suggest": {
+ "ext-mbstring": "for parsing UTF-8 CSS"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Sabberworm\\CSS\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Raphael Schweikert"
+ }
+ ],
+ "description": "Parser for CSS Files written in PHP",
+ "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser",
+ "keywords": [
+ "css",
+ "parser",
+ "stylesheet"
+ ],
+ "support": {
+ "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues",
+ "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.4.0"
+ },
+ "time": "2021-12-11T13:40:54+00:00"
+ },
{
"name": "spatie/db-dumper",
"version": "2.21.1",
@@ -4269,5 +4541,5 @@
"php": "^7.3 || ^8.0"
},
"platform-dev": [],
- "plugin-api-version": "2.3.0"
+ "plugin-api-version": "2.6.0"
}
diff --git a/httpdocs/themes/vuexy/css/all.css b/httpdocs/themes/vuexy/css/all.css
new file mode 100644
index 00000000..3b8fd0d2
--- /dev/null
+++ b/httpdocs/themes/vuexy/css/all.css
@@ -0,0 +1,15039 @@
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+
+@font-face {
+ font-family: 'FontAwesome';
+ src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
+ src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+
+.fa {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.fa-lg {
+ font-size: 1.33333333em;
+ line-height: .75em;
+ vertical-align: -15%;
+}
+
+.fa-2x {
+ font-size: 2em;
+}
+
+.fa-3x {
+ font-size: 3em;
+}
+
+.fa-4x {
+ font-size: 4em;
+}
+
+.fa-5x {
+ font-size: 5em;
+}
+
+.fa-fw {
+ width: 1.28571429em;
+ text-align: center;
+}
+
+.fa-ul {
+ padding-left: 0;
+ margin-left: 2.14285714em;
+ list-style-type: none;
+}
+
+.fa-ul>li {
+ position: relative;
+}
+
+.fa-li {
+ position: absolute;
+ left: -2.14285714em;
+ width: 2.14285714em;
+ top: .14285714em;
+ text-align: center;
+}
+
+.fa-li.fa-lg {
+ left: -1.85714286em;
+}
+
+.fa-border {
+ padding: .2em .25em .15em;
+ border: solid .08em #eee;
+ border-radius: .1em;
+}
+
+.fa-pull-left {
+ float: left;
+}
+
+.fa-pull-right {
+ float: right;
+}
+
+.fa.fa-pull-left {
+ margin-right: .3em;
+}
+
+.fa.fa-pull-right {
+ margin-left: .3em;
+}
+
+.pull-right {
+ float: right;
+}
+
+.pull-left {
+ float: left;
+}
+
+.fa.pull-left {
+ margin-right: .3em;
+}
+
+.fa.pull-right {
+ margin-left: .3em;
+}
+
+.fa-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+}
+
+.fa-pulse {
+ -webkit-animation: fa-spin 1s infinite steps(8);
+ animation: fa-spin 1s infinite steps(8);
+}
+
+@-webkit-keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+
+@keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+
+.fa-rotate-90 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+
+.fa-rotate-180 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+
+.fa-rotate-270 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+ -webkit-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ transform: rotate(270deg);
+}
+
+.fa-flip-horizontal {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+ -webkit-transform: scale(-1, 1);
+ -ms-transform: scale(-1, 1);
+ transform: scale(-1, 1);
+}
+
+.fa-flip-vertical {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+ -webkit-transform: scale(1, -1);
+ -ms-transform: scale(1, -1);
+ transform: scale(1, -1);
+}
+
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270,
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical {
+ filter: none;
+}
+
+.fa-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle;
+}
+
+.fa-stack-1x,
+.fa-stack-2x {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+
+.fa-stack-1x {
+ line-height: inherit;
+}
+
+.fa-stack-2x {
+ font-size: 2em;
+}
+
+.fa-inverse {
+ color: #fff;
+}
+
+.fa-glass:before {
+ content: "\f000";
+}
+
+.fa-music:before {
+ content: "\f001";
+}
+
+.fa-search:before {
+ content: "\f002";
+}
+
+.fa-envelope-o:before {
+ content: "\f003";
+}
+
+.fa-heart:before {
+ content: "\f004";
+}
+
+.fa-star:before {
+ content: "\f005";
+}
+
+.fa-star-o:before {
+ content: "\f006";
+}
+
+.fa-user:before {
+ content: "\f007";
+}
+
+.fa-film:before {
+ content: "\f008";
+}
+
+.fa-th-large:before {
+ content: "\f009";
+}
+
+.fa-th:before {
+ content: "\f00a";
+}
+
+.fa-th-list:before {
+ content: "\f00b";
+}
+
+.fa-check:before {
+ content: "\f00c";
+}
+
+.fa-remove:before,
+.fa-close:before,
+.fa-times:before {
+ content: "\f00d";
+}
+
+.fa-search-plus:before {
+ content: "\f00e";
+}
+
+.fa-search-minus:before {
+ content: "\f010";
+}
+
+.fa-power-off:before {
+ content: "\f011";
+}
+
+.fa-signal:before {
+ content: "\f012";
+}
+
+.fa-gear:before,
+.fa-cog:before {
+ content: "\f013";
+}
+
+.fa-trash-o:before {
+ content: "\f014";
+}
+
+.fa-home:before {
+ content: "\f015";
+}
+
+.fa-file-o:before {
+ content: "\f016";
+}
+
+.fa-clock-o:before {
+ content: "\f017";
+}
+
+.fa-road:before {
+ content: "\f018";
+}
+
+.fa-download:before {
+ content: "\f019";
+}
+
+.fa-arrow-circle-o-down:before {
+ content: "\f01a";
+}
+
+.fa-arrow-circle-o-up:before {
+ content: "\f01b";
+}
+
+.fa-inbox:before {
+ content: "\f01c";
+}
+
+.fa-play-circle-o:before {
+ content: "\f01d";
+}
+
+.fa-rotate-right:before,
+.fa-repeat:before {
+ content: "\f01e";
+}
+
+.fa-refresh:before {
+ content: "\f021";
+}
+
+.fa-list-alt:before {
+ content: "\f022";
+}
+
+.fa-lock:before {
+ content: "\f023";
+}
+
+.fa-flag:before {
+ content: "\f024";
+}
+
+.fa-headphones:before {
+ content: "\f025";
+}
+
+.fa-volume-off:before {
+ content: "\f026";
+}
+
+.fa-volume-down:before {
+ content: "\f027";
+}
+
+.fa-volume-up:before {
+ content: "\f028";
+}
+
+.fa-qrcode:before {
+ content: "\f029";
+}
+
+.fa-barcode:before {
+ content: "\f02a";
+}
+
+.fa-tag:before {
+ content: "\f02b";
+}
+
+.fa-tags:before {
+ content: "\f02c";
+}
+
+.fa-book:before {
+ content: "\f02d";
+}
+
+.fa-bookmark:before {
+ content: "\f02e";
+}
+
+.fa-print:before {
+ content: "\f02f";
+}
+
+.fa-camera:before {
+ content: "\f030";
+}
+
+.fa-font:before {
+ content: "\f031";
+}
+
+.fa-bold:before {
+ content: "\f032";
+}
+
+.fa-italic:before {
+ content: "\f033";
+}
+
+.fa-text-height:before {
+ content: "\f034";
+}
+
+.fa-text-width:before {
+ content: "\f035";
+}
+
+.fa-align-left:before {
+ content: "\f036";
+}
+
+.fa-align-center:before {
+ content: "\f037";
+}
+
+.fa-align-right:before {
+ content: "\f038";
+}
+
+.fa-align-justify:before {
+ content: "\f039";
+}
+
+.fa-list:before {
+ content: "\f03a";
+}
+
+.fa-dedent:before,
+.fa-outdent:before {
+ content: "\f03b";
+}
+
+.fa-indent:before {
+ content: "\f03c";
+}
+
+.fa-video-camera:before {
+ content: "\f03d";
+}
+
+.fa-photo:before,
+.fa-image:before,
+.fa-picture-o:before {
+ content: "\f03e";
+}
+
+.fa-pencil:before {
+ content: "\f040";
+}
+
+.fa-map-marker:before {
+ content: "\f041";
+}
+
+.fa-adjust:before {
+ content: "\f042";
+}
+
+.fa-tint:before {
+ content: "\f043";
+}
+
+.fa-edit:before,
+.fa-pencil-square-o:before {
+ content: "\f044";
+}
+
+.fa-share-square-o:before {
+ content: "\f045";
+}
+
+.fa-check-square-o:before {
+ content: "\f046";
+}
+
+.fa-arrows:before {
+ content: "\f047";
+}
+
+.fa-step-backward:before {
+ content: "\f048";
+}
+
+.fa-fast-backward:before {
+ content: "\f049";
+}
+
+.fa-backward:before {
+ content: "\f04a";
+}
+
+.fa-play:before {
+ content: "\f04b";
+}
+
+.fa-pause:before {
+ content: "\f04c";
+}
+
+.fa-stop:before {
+ content: "\f04d";
+}
+
+.fa-forward:before {
+ content: "\f04e";
+}
+
+.fa-fast-forward:before {
+ content: "\f050";
+}
+
+.fa-step-forward:before {
+ content: "\f051";
+}
+
+.fa-eject:before {
+ content: "\f052";
+}
+
+.fa-chevron-left:before {
+ content: "\f053";
+}
+
+.fa-chevron-right:before {
+ content: "\f054";
+}
+
+.fa-plus-circle:before {
+ content: "\f055";
+}
+
+.fa-minus-circle:before {
+ content: "\f056";
+}
+
+.fa-times-circle:before {
+ content: "\f057";
+}
+
+.fa-check-circle:before {
+ content: "\f058";
+}
+
+.fa-question-circle:before {
+ content: "\f059";
+}
+
+.fa-info-circle:before {
+ content: "\f05a";
+}
+
+.fa-crosshairs:before {
+ content: "\f05b";
+}
+
+.fa-times-circle-o:before {
+ content: "\f05c";
+}
+
+.fa-check-circle-o:before {
+ content: "\f05d";
+}
+
+.fa-ban:before {
+ content: "\f05e";
+}
+
+.fa-arrow-left:before {
+ content: "\f060";
+}
+
+.fa-arrow-right:before {
+ content: "\f061";
+}
+
+.fa-arrow-up:before {
+ content: "\f062";
+}
+
+.fa-arrow-down:before {
+ content: "\f063";
+}
+
+.fa-mail-forward:before,
+.fa-share:before {
+ content: "\f064";
+}
+
+.fa-expand:before {
+ content: "\f065";
+}
+
+.fa-compress:before {
+ content: "\f066";
+}
+
+.fa-plus:before {
+ content: "\f067";
+}
+
+.fa-minus:before {
+ content: "\f068";
+}
+
+.fa-asterisk:before {
+ content: "\f069";
+}
+
+.fa-exclamation-circle:before {
+ content: "\f06a";
+}
+
+.fa-gift:before {
+ content: "\f06b";
+}
+
+.fa-leaf:before {
+ content: "\f06c";
+}
+
+.fa-fire:before {
+ content: "\f06d";
+}
+
+.fa-eye:before {
+ content: "\f06e";
+}
+
+.fa-eye-slash:before {
+ content: "\f070";
+}
+
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+ content: "\f071";
+}
+
+.fa-plane:before {
+ content: "\f072";
+}
+
+.fa-calendar:before {
+ content: "\f073";
+}
+
+.fa-random:before {
+ content: "\f074";
+}
+
+.fa-comment:before {
+ content: "\f075";
+}
+
+.fa-magnet:before {
+ content: "\f076";
+}
+
+.fa-chevron-up:before {
+ content: "\f077";
+}
+
+.fa-chevron-down:before {
+ content: "\f078";
+}
+
+.fa-retweet:before {
+ content: "\f079";
+}
+
+.fa-shopping-cart:before {
+ content: "\f07a";
+}
+
+.fa-folder:before {
+ content: "\f07b";
+}
+
+.fa-folder-open:before {
+ content: "\f07c";
+}
+
+.fa-arrows-v:before {
+ content: "\f07d";
+}
+
+.fa-arrows-h:before {
+ content: "\f07e";
+}
+
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+ content: "\f080";
+}
+
+.fa-twitter-square:before {
+ content: "\f081";
+}
+
+.fa-facebook-square:before {
+ content: "\f082";
+}
+
+.fa-camera-retro:before {
+ content: "\f083";
+}
+
+.fa-key:before {
+ content: "\f084";
+}
+
+.fa-gears:before,
+.fa-cogs:before {
+ content: "\f085";
+}
+
+.fa-comments:before {
+ content: "\f086";
+}
+
+.fa-thumbs-o-up:before {
+ content: "\f087";
+}
+
+.fa-thumbs-o-down:before {
+ content: "\f088";
+}
+
+.fa-star-half:before {
+ content: "\f089";
+}
+
+.fa-heart-o:before {
+ content: "\f08a";
+}
+
+.fa-sign-out:before {
+ content: "\f08b";
+}
+
+.fa-linkedin-square:before {
+ content: "\f08c";
+}
+
+.fa-thumb-tack:before {
+ content: "\f08d";
+}
+
+.fa-external-link:before {
+ content: "\f08e";
+}
+
+.fa-sign-in:before {
+ content: "\f090";
+}
+
+.fa-trophy:before {
+ content: "\f091";
+}
+
+.fa-github-square:before {
+ content: "\f092";
+}
+
+.fa-upload:before {
+ content: "\f093";
+}
+
+.fa-lemon-o:before {
+ content: "\f094";
+}
+
+.fa-phone:before {
+ content: "\f095";
+}
+
+.fa-square-o:before {
+ content: "\f096";
+}
+
+.fa-bookmark-o:before {
+ content: "\f097";
+}
+
+.fa-phone-square:before {
+ content: "\f098";
+}
+
+.fa-twitter:before {
+ content: "\f099";
+}
+
+.fa-facebook-f:before,
+.fa-facebook:before {
+ content: "\f09a";
+}
+
+.fa-github:before {
+ content: "\f09b";
+}
+
+.fa-unlock:before {
+ content: "\f09c";
+}
+
+.fa-credit-card:before {
+ content: "\f09d";
+}
+
+.fa-feed:before,
+.fa-rss:before {
+ content: "\f09e";
+}
+
+.fa-hdd-o:before {
+ content: "\f0a0";
+}
+
+.fa-bullhorn:before {
+ content: "\f0a1";
+}
+
+.fa-bell:before {
+ content: "\f0f3";
+}
+
+.fa-certificate:before {
+ content: "\f0a3";
+}
+
+.fa-hand-o-right:before {
+ content: "\f0a4";
+}
+
+.fa-hand-o-left:before {
+ content: "\f0a5";
+}
+
+.fa-hand-o-up:before {
+ content: "\f0a6";
+}
+
+.fa-hand-o-down:before {
+ content: "\f0a7";
+}
+
+.fa-arrow-circle-left:before {
+ content: "\f0a8";
+}
+
+.fa-arrow-circle-right:before {
+ content: "\f0a9";
+}
+
+.fa-arrow-circle-up:before {
+ content: "\f0aa";
+}
+
+.fa-arrow-circle-down:before {
+ content: "\f0ab";
+}
+
+.fa-globe:before {
+ content: "\f0ac";
+}
+
+.fa-wrench:before {
+ content: "\f0ad";
+}
+
+.fa-tasks:before {
+ content: "\f0ae";
+}
+
+.fa-filter:before {
+ content: "\f0b0";
+}
+
+.fa-briefcase:before {
+ content: "\f0b1";
+}
+
+.fa-arrows-alt:before {
+ content: "\f0b2";
+}
+
+.fa-group:before,
+.fa-users:before {
+ content: "\f0c0";
+}
+
+.fa-chain:before,
+.fa-link:before {
+ content: "\f0c1";
+}
+
+.fa-cloud:before {
+ content: "\f0c2";
+}
+
+.fa-flask:before {
+ content: "\f0c3";
+}
+
+.fa-cut:before,
+.fa-scissors:before {
+ content: "\f0c4";
+}
+
+.fa-copy:before,
+.fa-files-o:before {
+ content: "\f0c5";
+}
+
+.fa-paperclip:before {
+ content: "\f0c6";
+}
+
+.fa-save:before,
+.fa-floppy-o:before {
+ content: "\f0c7";
+}
+
+.fa-square:before {
+ content: "\f0c8";
+}
+
+.fa-navicon:before,
+.fa-reorder:before,
+.fa-bars:before {
+ content: "\f0c9";
+}
+
+.fa-list-ul:before {
+ content: "\f0ca";
+}
+
+.fa-list-ol:before {
+ content: "\f0cb";
+}
+
+.fa-strikethrough:before {
+ content: "\f0cc";
+}
+
+.fa-underline:before {
+ content: "\f0cd";
+}
+
+.fa-table:before {
+ content: "\f0ce";
+}
+
+.fa-magic:before {
+ content: "\f0d0";
+}
+
+.fa-truck:before {
+ content: "\f0d1";
+}
+
+.fa-pinterest:before {
+ content: "\f0d2";
+}
+
+.fa-pinterest-square:before {
+ content: "\f0d3";
+}
+
+.fa-google-plus-square:before {
+ content: "\f0d4";
+}
+
+.fa-google-plus:before {
+ content: "\f0d5";
+}
+
+.fa-money:before {
+ content: "\f0d6";
+}
+
+.fa-caret-down:before {
+ content: "\f0d7";
+}
+
+.fa-caret-up:before {
+ content: "\f0d8";
+}
+
+.fa-caret-left:before {
+ content: "\f0d9";
+}
+
+.fa-caret-right:before {
+ content: "\f0da";
+}
+
+.fa-columns:before {
+ content: "\f0db";
+}
+
+.fa-unsorted:before,
+.fa-sort:before {
+ content: "\f0dc";
+}
+
+.fa-sort-down:before,
+.fa-sort-desc:before {
+ content: "\f0dd";
+}
+
+.fa-sort-up:before,
+.fa-sort-asc:before {
+ content: "\f0de";
+}
+
+.fa-envelope:before {
+ content: "\f0e0";
+}
+
+.fa-linkedin:before {
+ content: "\f0e1";
+}
+
+.fa-rotate-left:before,
+.fa-undo:before {
+ content: "\f0e2";
+}
+
+.fa-legal:before,
+.fa-gavel:before {
+ content: "\f0e3";
+}
+
+.fa-dashboard:before,
+.fa-tachometer:before {
+ content: "\f0e4";
+}
+
+.fa-comment-o:before {
+ content: "\f0e5";
+}
+
+.fa-comments-o:before {
+ content: "\f0e6";
+}
+
+.fa-flash:before,
+.fa-bolt:before {
+ content: "\f0e7";
+}
+
+.fa-sitemap:before {
+ content: "\f0e8";
+}
+
+.fa-umbrella:before {
+ content: "\f0e9";
+}
+
+.fa-paste:before,
+.fa-clipboard:before {
+ content: "\f0ea";
+}
+
+.fa-lightbulb-o:before {
+ content: "\f0eb";
+}
+
+.fa-exchange:before {
+ content: "\f0ec";
+}
+
+.fa-cloud-download:before {
+ content: "\f0ed";
+}
+
+.fa-cloud-upload:before {
+ content: "\f0ee";
+}
+
+.fa-user-md:before {
+ content: "\f0f0";
+}
+
+.fa-stethoscope:before {
+ content: "\f0f1";
+}
+
+.fa-suitcase:before {
+ content: "\f0f2";
+}
+
+.fa-bell-o:before {
+ content: "\f0a2";
+}
+
+.fa-coffee:before {
+ content: "\f0f4";
+}
+
+.fa-cutlery:before {
+ content: "\f0f5";
+}
+
+.fa-file-text-o:before {
+ content: "\f0f6";
+}
+
+.fa-building-o:before {
+ content: "\f0f7";
+}
+
+.fa-hospital-o:before {
+ content: "\f0f8";
+}
+
+.fa-ambulance:before {
+ content: "\f0f9";
+}
+
+.fa-medkit:before {
+ content: "\f0fa";
+}
+
+.fa-fighter-jet:before {
+ content: "\f0fb";
+}
+
+.fa-beer:before {
+ content: "\f0fc";
+}
+
+.fa-h-square:before {
+ content: "\f0fd";
+}
+
+.fa-plus-square:before {
+ content: "\f0fe";
+}
+
+.fa-angle-double-left:before {
+ content: "\f100";
+}
+
+.fa-angle-double-right:before {
+ content: "\f101";
+}
+
+.fa-angle-double-up:before {
+ content: "\f102";
+}
+
+.fa-angle-double-down:before {
+ content: "\f103";
+}
+
+.fa-angle-left:before {
+ content: "\f104";
+}
+
+.fa-angle-right:before {
+ content: "\f105";
+}
+
+.fa-angle-up:before {
+ content: "\f106";
+}
+
+.fa-angle-down:before {
+ content: "\f107";
+}
+
+.fa-desktop:before {
+ content: "\f108";
+}
+
+.fa-laptop:before {
+ content: "\f109";
+}
+
+.fa-tablet:before {
+ content: "\f10a";
+}
+
+.fa-mobile-phone:before,
+.fa-mobile:before {
+ content: "\f10b";
+}
+
+.fa-circle-o:before {
+ content: "\f10c";
+}
+
+.fa-quote-left:before {
+ content: "\f10d";
+}
+
+.fa-quote-right:before {
+ content: "\f10e";
+}
+
+.fa-spinner:before {
+ content: "\f110";
+}
+
+.fa-circle:before {
+ content: "\f111";
+}
+
+.fa-mail-reply:before,
+.fa-reply:before {
+ content: "\f112";
+}
+
+.fa-github-alt:before {
+ content: "\f113";
+}
+
+.fa-folder-o:before {
+ content: "\f114";
+}
+
+.fa-folder-open-o:before {
+ content: "\f115";
+}
+
+.fa-smile-o:before {
+ content: "\f118";
+}
+
+.fa-frown-o:before {
+ content: "\f119";
+}
+
+.fa-meh-o:before {
+ content: "\f11a";
+}
+
+.fa-gamepad:before {
+ content: "\f11b";
+}
+
+.fa-keyboard-o:before {
+ content: "\f11c";
+}
+
+.fa-flag-o:before {
+ content: "\f11d";
+}
+
+.fa-flag-checkered:before {
+ content: "\f11e";
+}
+
+.fa-terminal:before {
+ content: "\f120";
+}
+
+.fa-code:before {
+ content: "\f121";
+}
+
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+ content: "\f122";
+}
+
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+ content: "\f123";
+}
+
+.fa-location-arrow:before {
+ content: "\f124";
+}
+
+.fa-crop:before {
+ content: "\f125";
+}
+
+.fa-code-fork:before {
+ content: "\f126";
+}
+
+.fa-unlink:before,
+.fa-chain-broken:before {
+ content: "\f127";
+}
+
+.fa-question:before {
+ content: "\f128";
+}
+
+.fa-info:before {
+ content: "\f129";
+}
+
+.fa-exclamation:before {
+ content: "\f12a";
+}
+
+.fa-superscript:before {
+ content: "\f12b";
+}
+
+.fa-subscript:before {
+ content: "\f12c";
+}
+
+.fa-eraser:before {
+ content: "\f12d";
+}
+
+.fa-puzzle-piece:before {
+ content: "\f12e";
+}
+
+.fa-microphone:before {
+ content: "\f130";
+}
+
+.fa-microphone-slash:before {
+ content: "\f131";
+}
+
+.fa-shield:before {
+ content: "\f132";
+}
+
+.fa-calendar-o:before {
+ content: "\f133";
+}
+
+.fa-fire-extinguisher:before {
+ content: "\f134";
+}
+
+.fa-rocket:before {
+ content: "\f135";
+}
+
+.fa-maxcdn:before {
+ content: "\f136";
+}
+
+.fa-chevron-circle-left:before {
+ content: "\f137";
+}
+
+.fa-chevron-circle-right:before {
+ content: "\f138";
+}
+
+.fa-chevron-circle-up:before {
+ content: "\f139";
+}
+
+.fa-chevron-circle-down:before {
+ content: "\f13a";
+}
+
+.fa-html5:before {
+ content: "\f13b";
+}
+
+.fa-css3:before {
+ content: "\f13c";
+}
+
+.fa-anchor:before {
+ content: "\f13d";
+}
+
+.fa-unlock-alt:before {
+ content: "\f13e";
+}
+
+.fa-bullseye:before {
+ content: "\f140";
+}
+
+.fa-ellipsis-h:before {
+ content: "\f141";
+}
+
+.fa-ellipsis-v:before {
+ content: "\f142";
+}
+
+.fa-rss-square:before {
+ content: "\f143";
+}
+
+.fa-play-circle:before {
+ content: "\f144";
+}
+
+.fa-ticket:before {
+ content: "\f145";
+}
+
+.fa-minus-square:before {
+ content: "\f146";
+}
+
+.fa-minus-square-o:before {
+ content: "\f147";
+}
+
+.fa-level-up:before {
+ content: "\f148";
+}
+
+.fa-level-down:before {
+ content: "\f149";
+}
+
+.fa-check-square:before {
+ content: "\f14a";
+}
+
+.fa-pencil-square:before {
+ content: "\f14b";
+}
+
+.fa-external-link-square:before {
+ content: "\f14c";
+}
+
+.fa-share-square:before {
+ content: "\f14d";
+}
+
+.fa-compass:before {
+ content: "\f14e";
+}
+
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+ content: "\f150";
+}
+
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+ content: "\f151";
+}
+
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+ content: "\f152";
+}
+
+.fa-euro:before,
+.fa-eur:before {
+ content: "\f153";
+}
+
+.fa-gbp:before {
+ content: "\f154";
+}
+
+.fa-dollar:before,
+.fa-usd:before {
+ content: "\f155";
+}
+
+.fa-rupee:before,
+.fa-inr:before {
+ content: "\f156";
+}
+
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+ content: "\f157";
+}
+
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+ content: "\f158";
+}
+
+.fa-won:before,
+.fa-krw:before {
+ content: "\f159";
+}
+
+.fa-bitcoin:before,
+.fa-btc:before {
+ content: "\f15a";
+}
+
+.fa-file:before {
+ content: "\f15b";
+}
+
+.fa-file-text:before {
+ content: "\f15c";
+}
+
+.fa-sort-alpha-asc:before {
+ content: "\f15d";
+}
+
+.fa-sort-alpha-desc:before {
+ content: "\f15e";
+}
+
+.fa-sort-amount-asc:before {
+ content: "\f160";
+}
+
+.fa-sort-amount-desc:before {
+ content: "\f161";
+}
+
+.fa-sort-numeric-asc:before {
+ content: "\f162";
+}
+
+.fa-sort-numeric-desc:before {
+ content: "\f163";
+}
+
+.fa-thumbs-up:before {
+ content: "\f164";
+}
+
+.fa-thumbs-down:before {
+ content: "\f165";
+}
+
+.fa-youtube-square:before {
+ content: "\f166";
+}
+
+.fa-youtube:before {
+ content: "\f167";
+}
+
+.fa-xing:before {
+ content: "\f168";
+}
+
+.fa-xing-square:before {
+ content: "\f169";
+}
+
+.fa-youtube-play:before {
+ content: "\f16a";
+}
+
+.fa-dropbox:before {
+ content: "\f16b";
+}
+
+.fa-stack-overflow:before {
+ content: "\f16c";
+}
+
+.fa-instagram:before {
+ content: "\f16d";
+}
+
+.fa-flickr:before {
+ content: "\f16e";
+}
+
+.fa-adn:before {
+ content: "\f170";
+}
+
+.fa-bitbucket:before {
+ content: "\f171";
+}
+
+.fa-bitbucket-square:before {
+ content: "\f172";
+}
+
+.fa-tumblr:before {
+ content: "\f173";
+}
+
+.fa-tumblr-square:before {
+ content: "\f174";
+}
+
+.fa-long-arrow-down:before {
+ content: "\f175";
+}
+
+.fa-long-arrow-up:before {
+ content: "\f176";
+}
+
+.fa-long-arrow-left:before {
+ content: "\f177";
+}
+
+.fa-long-arrow-right:before {
+ content: "\f178";
+}
+
+.fa-apple:before {
+ content: "\f179";
+}
+
+.fa-windows:before {
+ content: "\f17a";
+}
+
+.fa-android:before {
+ content: "\f17b";
+}
+
+.fa-linux:before {
+ content: "\f17c";
+}
+
+.fa-dribbble:before {
+ content: "\f17d";
+}
+
+.fa-skype:before {
+ content: "\f17e";
+}
+
+.fa-foursquare:before {
+ content: "\f180";
+}
+
+.fa-trello:before {
+ content: "\f181";
+}
+
+.fa-female:before {
+ content: "\f182";
+}
+
+.fa-male:before {
+ content: "\f183";
+}
+
+.fa-gittip:before,
+.fa-gratipay:before {
+ content: "\f184";
+}
+
+.fa-sun-o:before {
+ content: "\f185";
+}
+
+.fa-moon-o:before {
+ content: "\f186";
+}
+
+.fa-archive:before {
+ content: "\f187";
+}
+
+.fa-bug:before {
+ content: "\f188";
+}
+
+.fa-vk:before {
+ content: "\f189";
+}
+
+.fa-weibo:before {
+ content: "\f18a";
+}
+
+.fa-renren:before {
+ content: "\f18b";
+}
+
+.fa-pagelines:before {
+ content: "\f18c";
+}
+
+.fa-stack-exchange:before {
+ content: "\f18d";
+}
+
+.fa-arrow-circle-o-right:before {
+ content: "\f18e";
+}
+
+.fa-arrow-circle-o-left:before {
+ content: "\f190";
+}
+
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+ content: "\f191";
+}
+
+.fa-dot-circle-o:before {
+ content: "\f192";
+}
+
+.fa-wheelchair:before {
+ content: "\f193";
+}
+
+.fa-vimeo-square:before {
+ content: "\f194";
+}
+
+.fa-turkish-lira:before,
+.fa-try:before {
+ content: "\f195";
+}
+
+.fa-plus-square-o:before {
+ content: "\f196";
+}
+
+.fa-space-shuttle:before {
+ content: "\f197";
+}
+
+.fa-slack:before {
+ content: "\f198";
+}
+
+.fa-envelope-square:before {
+ content: "\f199";
+}
+
+.fa-wordpress:before {
+ content: "\f19a";
+}
+
+.fa-openid:before {
+ content: "\f19b";
+}
+
+.fa-institution:before,
+.fa-bank:before,
+.fa-university:before {
+ content: "\f19c";
+}
+
+.fa-mortar-board:before,
+.fa-graduation-cap:before {
+ content: "\f19d";
+}
+
+.fa-yahoo:before {
+ content: "\f19e";
+}
+
+.fa-google:before {
+ content: "\f1a0";
+}
+
+.fa-reddit:before {
+ content: "\f1a1";
+}
+
+.fa-reddit-square:before {
+ content: "\f1a2";
+}
+
+.fa-stumbleupon-circle:before {
+ content: "\f1a3";
+}
+
+.fa-stumbleupon:before {
+ content: "\f1a4";
+}
+
+.fa-delicious:before {
+ content: "\f1a5";
+}
+
+.fa-digg:before {
+ content: "\f1a6";
+}
+
+.fa-pied-piper-pp:before {
+ content: "\f1a7";
+}
+
+.fa-pied-piper-alt:before {
+ content: "\f1a8";
+}
+
+.fa-drupal:before {
+ content: "\f1a9";
+}
+
+.fa-joomla:before {
+ content: "\f1aa";
+}
+
+.fa-language:before {
+ content: "\f1ab";
+}
+
+.fa-fax:before {
+ content: "\f1ac";
+}
+
+.fa-building:before {
+ content: "\f1ad";
+}
+
+.fa-child:before {
+ content: "\f1ae";
+}
+
+.fa-paw:before {
+ content: "\f1b0";
+}
+
+.fa-spoon:before {
+ content: "\f1b1";
+}
+
+.fa-cube:before {
+ content: "\f1b2";
+}
+
+.fa-cubes:before {
+ content: "\f1b3";
+}
+
+.fa-behance:before {
+ content: "\f1b4";
+}
+
+.fa-behance-square:before {
+ content: "\f1b5";
+}
+
+.fa-steam:before {
+ content: "\f1b6";
+}
+
+.fa-steam-square:before {
+ content: "\f1b7";
+}
+
+.fa-recycle:before {
+ content: "\f1b8";
+}
+
+.fa-automobile:before,
+.fa-car:before {
+ content: "\f1b9";
+}
+
+.fa-cab:before,
+.fa-taxi:before {
+ content: "\f1ba";
+}
+
+.fa-tree:before {
+ content: "\f1bb";
+}
+
+.fa-spotify:before {
+ content: "\f1bc";
+}
+
+.fa-deviantart:before {
+ content: "\f1bd";
+}
+
+.fa-soundcloud:before {
+ content: "\f1be";
+}
+
+.fa-database:before {
+ content: "\f1c0";
+}
+
+.fa-file-pdf-o:before {
+ content: "\f1c1";
+}
+
+.fa-file-word-o:before {
+ content: "\f1c2";
+}
+
+.fa-file-excel-o:before {
+ content: "\f1c3";
+}
+
+.fa-file-powerpoint-o:before {
+ content: "\f1c4";
+}
+
+.fa-file-photo-o:before,
+.fa-file-picture-o:before,
+.fa-file-image-o:before {
+ content: "\f1c5";
+}
+
+.fa-file-zip-o:before,
+.fa-file-archive-o:before {
+ content: "\f1c6";
+}
+
+.fa-file-sound-o:before,
+.fa-file-audio-o:before {
+ content: "\f1c7";
+}
+
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+ content: "\f1c8";
+}
+
+.fa-file-code-o:before {
+ content: "\f1c9";
+}
+
+.fa-vine:before {
+ content: "\f1ca";
+}
+
+.fa-codepen:before {
+ content: "\f1cb";
+}
+
+.fa-jsfiddle:before {
+ content: "\f1cc";
+}
+
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-saver:before,
+.fa-support:before,
+.fa-life-ring:before {
+ content: "\f1cd";
+}
+
+.fa-circle-o-notch:before {
+ content: "\f1ce";
+}
+
+.fa-ra:before,
+.fa-resistance:before,
+.fa-rebel:before {
+ content: "\f1d0";
+}
+
+.fa-ge:before,
+.fa-empire:before {
+ content: "\f1d1";
+}
+
+.fa-git-square:before {
+ content: "\f1d2";
+}
+
+.fa-git:before {
+ content: "\f1d3";
+}
+
+.fa-y-combinator-square:before,
+.fa-yc-square:before,
+.fa-hacker-news:before {
+ content: "\f1d4";
+}
+
+.fa-tencent-weibo:before {
+ content: "\f1d5";
+}
+
+.fa-qq:before {
+ content: "\f1d6";
+}
+
+.fa-wechat:before,
+.fa-weixin:before {
+ content: "\f1d7";
+}
+
+.fa-send:before,
+.fa-paper-plane:before {
+ content: "\f1d8";
+}
+
+.fa-send-o:before,
+.fa-paper-plane-o:before {
+ content: "\f1d9";
+}
+
+.fa-history:before {
+ content: "\f1da";
+}
+
+.fa-circle-thin:before {
+ content: "\f1db";
+}
+
+.fa-header:before {
+ content: "\f1dc";
+}
+
+.fa-paragraph:before {
+ content: "\f1dd";
+}
+
+.fa-sliders:before {
+ content: "\f1de";
+}
+
+.fa-share-alt:before {
+ content: "\f1e0";
+}
+
+.fa-share-alt-square:before {
+ content: "\f1e1";
+}
+
+.fa-bomb:before {
+ content: "\f1e2";
+}
+
+.fa-soccer-ball-o:before,
+.fa-futbol-o:before {
+ content: "\f1e3";
+}
+
+.fa-tty:before {
+ content: "\f1e4";
+}
+
+.fa-binoculars:before {
+ content: "\f1e5";
+}
+
+.fa-plug:before {
+ content: "\f1e6";
+}
+
+.fa-slideshare:before {
+ content: "\f1e7";
+}
+
+.fa-twitch:before {
+ content: "\f1e8";
+}
+
+.fa-yelp:before {
+ content: "\f1e9";
+}
+
+.fa-newspaper-o:before {
+ content: "\f1ea";
+}
+
+.fa-wifi:before {
+ content: "\f1eb";
+}
+
+.fa-calculator:before {
+ content: "\f1ec";
+}
+
+.fa-paypal:before {
+ content: "\f1ed";
+}
+
+.fa-google-wallet:before {
+ content: "\f1ee";
+}
+
+.fa-cc-visa:before {
+ content: "\f1f0";
+}
+
+.fa-cc-mastercard:before {
+ content: "\f1f1";
+}
+
+.fa-cc-discover:before {
+ content: "\f1f2";
+}
+
+.fa-cc-amex:before {
+ content: "\f1f3";
+}
+
+.fa-cc-paypal:before {
+ content: "\f1f4";
+}
+
+.fa-cc-stripe:before {
+ content: "\f1f5";
+}
+
+.fa-bell-slash:before {
+ content: "\f1f6";
+}
+
+.fa-bell-slash-o:before {
+ content: "\f1f7";
+}
+
+.fa-trash:before {
+ content: "\f1f8";
+}
+
+.fa-copyright:before {
+ content: "\f1f9";
+}
+
+.fa-at:before {
+ content: "\f1fa";
+}
+
+.fa-eyedropper:before {
+ content: "\f1fb";
+}
+
+.fa-paint-brush:before {
+ content: "\f1fc";
+}
+
+.fa-birthday-cake:before {
+ content: "\f1fd";
+}
+
+.fa-area-chart:before {
+ content: "\f1fe";
+}
+
+.fa-pie-chart:before {
+ content: "\f200";
+}
+
+.fa-line-chart:before {
+ content: "\f201";
+}
+
+.fa-lastfm:before {
+ content: "\f202";
+}
+
+.fa-lastfm-square:before {
+ content: "\f203";
+}
+
+.fa-toggle-off:before {
+ content: "\f204";
+}
+
+.fa-toggle-on:before {
+ content: "\f205";
+}
+
+.fa-bicycle:before {
+ content: "\f206";
+}
+
+.fa-bus:before {
+ content: "\f207";
+}
+
+.fa-ioxhost:before {
+ content: "\f208";
+}
+
+.fa-angellist:before {
+ content: "\f209";
+}
+
+.fa-cc:before {
+ content: "\f20a";
+}
+
+.fa-shekel:before,
+.fa-sheqel:before,
+.fa-ils:before {
+ content: "\f20b";
+}
+
+.fa-meanpath:before {
+ content: "\f20c";
+}
+
+.fa-buysellads:before {
+ content: "\f20d";
+}
+
+.fa-connectdevelop:before {
+ content: "\f20e";
+}
+
+.fa-dashcube:before {
+ content: "\f210";
+}
+
+.fa-forumbee:before {
+ content: "\f211";
+}
+
+.fa-leanpub:before {
+ content: "\f212";
+}
+
+.fa-sellsy:before {
+ content: "\f213";
+}
+
+.fa-shirtsinbulk:before {
+ content: "\f214";
+}
+
+.fa-simplybuilt:before {
+ content: "\f215";
+}
+
+.fa-skyatlas:before {
+ content: "\f216";
+}
+
+.fa-cart-plus:before {
+ content: "\f217";
+}
+
+.fa-cart-arrow-down:before {
+ content: "\f218";
+}
+
+.fa-diamond:before {
+ content: "\f219";
+}
+
+.fa-ship:before {
+ content: "\f21a";
+}
+
+.fa-user-secret:before {
+ content: "\f21b";
+}
+
+.fa-motorcycle:before {
+ content: "\f21c";
+}
+
+.fa-street-view:before {
+ content: "\f21d";
+}
+
+.fa-heartbeat:before {
+ content: "\f21e";
+}
+
+.fa-venus:before {
+ content: "\f221";
+}
+
+.fa-mars:before {
+ content: "\f222";
+}
+
+.fa-mercury:before {
+ content: "\f223";
+}
+
+.fa-intersex:before,
+.fa-transgender:before {
+ content: "\f224";
+}
+
+.fa-transgender-alt:before {
+ content: "\f225";
+}
+
+.fa-venus-double:before {
+ content: "\f226";
+}
+
+.fa-mars-double:before {
+ content: "\f227";
+}
+
+.fa-venus-mars:before {
+ content: "\f228";
+}
+
+.fa-mars-stroke:before {
+ content: "\f229";
+}
+
+.fa-mars-stroke-v:before {
+ content: "\f22a";
+}
+
+.fa-mars-stroke-h:before {
+ content: "\f22b";
+}
+
+.fa-neuter:before {
+ content: "\f22c";
+}
+
+.fa-genderless:before {
+ content: "\f22d";
+}
+
+.fa-facebook-official:before {
+ content: "\f230";
+}
+
+.fa-pinterest-p:before {
+ content: "\f231";
+}
+
+.fa-whatsapp:before {
+ content: "\f232";
+}
+
+.fa-server:before {
+ content: "\f233";
+}
+
+.fa-user-plus:before {
+ content: "\f234";
+}
+
+.fa-user-times:before {
+ content: "\f235";
+}
+
+.fa-hotel:before,
+.fa-bed:before {
+ content: "\f236";
+}
+
+.fa-viacoin:before {
+ content: "\f237";
+}
+
+.fa-train:before {
+ content: "\f238";
+}
+
+.fa-subway:before {
+ content: "\f239";
+}
+
+.fa-medium:before {
+ content: "\f23a";
+}
+
+.fa-yc:before,
+.fa-y-combinator:before {
+ content: "\f23b";
+}
+
+.fa-optin-monster:before {
+ content: "\f23c";
+}
+
+.fa-opencart:before {
+ content: "\f23d";
+}
+
+.fa-expeditedssl:before {
+ content: "\f23e";
+}
+
+.fa-battery-4:before,
+.fa-battery:before,
+.fa-battery-full:before {
+ content: "\f240";
+}
+
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+ content: "\f241";
+}
+
+.fa-battery-2:before,
+.fa-battery-half:before {
+ content: "\f242";
+}
+
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+ content: "\f243";
+}
+
+.fa-battery-0:before,
+.fa-battery-empty:before {
+ content: "\f244";
+}
+
+.fa-mouse-pointer:before {
+ content: "\f245";
+}
+
+.fa-i-cursor:before {
+ content: "\f246";
+}
+
+.fa-object-group:before {
+ content: "\f247";
+}
+
+.fa-object-ungroup:before {
+ content: "\f248";
+}
+
+.fa-sticky-note:before {
+ content: "\f249";
+}
+
+.fa-sticky-note-o:before {
+ content: "\f24a";
+}
+
+.fa-cc-jcb:before {
+ content: "\f24b";
+}
+
+.fa-cc-diners-club:before {
+ content: "\f24c";
+}
+
+.fa-clone:before {
+ content: "\f24d";
+}
+
+.fa-balance-scale:before {
+ content: "\f24e";
+}
+
+.fa-hourglass-o:before {
+ content: "\f250";
+}
+
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+ content: "\f251";
+}
+
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+ content: "\f252";
+}
+
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+ content: "\f253";
+}
+
+.fa-hourglass:before {
+ content: "\f254";
+}
+
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+ content: "\f255";
+}
+
+.fa-hand-stop-o:before,
+.fa-hand-paper-o:before {
+ content: "\f256";
+}
+
+.fa-hand-scissors-o:before {
+ content: "\f257";
+}
+
+.fa-hand-lizard-o:before {
+ content: "\f258";
+}
+
+.fa-hand-spock-o:before {
+ content: "\f259";
+}
+
+.fa-hand-pointer-o:before {
+ content: "\f25a";
+}
+
+.fa-hand-peace-o:before {
+ content: "\f25b";
+}
+
+.fa-trademark:before {
+ content: "\f25c";
+}
+
+.fa-registered:before {
+ content: "\f25d";
+}
+
+.fa-creative-commons:before {
+ content: "\f25e";
+}
+
+.fa-gg:before {
+ content: "\f260";
+}
+
+.fa-gg-circle:before {
+ content: "\f261";
+}
+
+.fa-tripadvisor:before {
+ content: "\f262";
+}
+
+.fa-odnoklassniki:before {
+ content: "\f263";
+}
+
+.fa-odnoklassniki-square:before {
+ content: "\f264";
+}
+
+.fa-get-pocket:before {
+ content: "\f265";
+}
+
+.fa-wikipedia-w:before {
+ content: "\f266";
+}
+
+.fa-safari:before {
+ content: "\f267";
+}
+
+.fa-chrome:before {
+ content: "\f268";
+}
+
+.fa-firefox:before {
+ content: "\f269";
+}
+
+.fa-opera:before {
+ content: "\f26a";
+}
+
+.fa-internet-explorer:before {
+ content: "\f26b";
+}
+
+.fa-tv:before,
+.fa-television:before {
+ content: "\f26c";
+}
+
+.fa-contao:before {
+ content: "\f26d";
+}
+
+.fa-500px:before {
+ content: "\f26e";
+}
+
+.fa-amazon:before {
+ content: "\f270";
+}
+
+.fa-calendar-plus-o:before {
+ content: "\f271";
+}
+
+.fa-calendar-minus-o:before {
+ content: "\f272";
+}
+
+.fa-calendar-times-o:before {
+ content: "\f273";
+}
+
+.fa-calendar-check-o:before {
+ content: "\f274";
+}
+
+.fa-industry:before {
+ content: "\f275";
+}
+
+.fa-map-pin:before {
+ content: "\f276";
+}
+
+.fa-map-signs:before {
+ content: "\f277";
+}
+
+.fa-map-o:before {
+ content: "\f278";
+}
+
+.fa-map:before {
+ content: "\f279";
+}
+
+.fa-commenting:before {
+ content: "\f27a";
+}
+
+.fa-commenting-o:before {
+ content: "\f27b";
+}
+
+.fa-houzz:before {
+ content: "\f27c";
+}
+
+.fa-vimeo:before {
+ content: "\f27d";
+}
+
+.fa-black-tie:before {
+ content: "\f27e";
+}
+
+.fa-fonticons:before {
+ content: "\f280";
+}
+
+.fa-reddit-alien:before {
+ content: "\f281";
+}
+
+.fa-edge:before {
+ content: "\f282";
+}
+
+.fa-credit-card-alt:before {
+ content: "\f283";
+}
+
+.fa-codiepie:before {
+ content: "\f284";
+}
+
+.fa-modx:before {
+ content: "\f285";
+}
+
+.fa-fort-awesome:before {
+ content: "\f286";
+}
+
+.fa-usb:before {
+ content: "\f287";
+}
+
+.fa-product-hunt:before {
+ content: "\f288";
+}
+
+.fa-mixcloud:before {
+ content: "\f289";
+}
+
+.fa-scribd:before {
+ content: "\f28a";
+}
+
+.fa-pause-circle:before {
+ content: "\f28b";
+}
+
+.fa-pause-circle-o:before {
+ content: "\f28c";
+}
+
+.fa-stop-circle:before {
+ content: "\f28d";
+}
+
+.fa-stop-circle-o:before {
+ content: "\f28e";
+}
+
+.fa-shopping-bag:before {
+ content: "\f290";
+}
+
+.fa-shopping-basket:before {
+ content: "\f291";
+}
+
+.fa-hashtag:before {
+ content: "\f292";
+}
+
+.fa-bluetooth:before {
+ content: "\f293";
+}
+
+.fa-bluetooth-b:before {
+ content: "\f294";
+}
+
+.fa-percent:before {
+ content: "\f295";
+}
+
+.fa-gitlab:before {
+ content: "\f296";
+}
+
+.fa-wpbeginner:before {
+ content: "\f297";
+}
+
+.fa-wpforms:before {
+ content: "\f298";
+}
+
+.fa-envira:before {
+ content: "\f299";
+}
+
+.fa-universal-access:before {
+ content: "\f29a";
+}
+
+.fa-wheelchair-alt:before {
+ content: "\f29b";
+}
+
+.fa-question-circle-o:before {
+ content: "\f29c";
+}
+
+.fa-blind:before {
+ content: "\f29d";
+}
+
+.fa-audio-description:before {
+ content: "\f29e";
+}
+
+.fa-volume-control-phone:before {
+ content: "\f2a0";
+}
+
+.fa-braille:before {
+ content: "\f2a1";
+}
+
+.fa-assistive-listening-systems:before {
+ content: "\f2a2";
+}
+
+.fa-asl-interpreting:before,
+.fa-american-sign-language-interpreting:before {
+ content: "\f2a3";
+}
+
+.fa-deafness:before,
+.fa-hard-of-hearing:before,
+.fa-deaf:before {
+ content: "\f2a4";
+}
+
+.fa-glide:before {
+ content: "\f2a5";
+}
+
+.fa-glide-g:before {
+ content: "\f2a6";
+}
+
+.fa-signing:before,
+.fa-sign-language:before {
+ content: "\f2a7";
+}
+
+.fa-low-vision:before {
+ content: "\f2a8";
+}
+
+.fa-viadeo:before {
+ content: "\f2a9";
+}
+
+.fa-viadeo-square:before {
+ content: "\f2aa";
+}
+
+.fa-snapchat:before {
+ content: "\f2ab";
+}
+
+.fa-snapchat-ghost:before {
+ content: "\f2ac";
+}
+
+.fa-snapchat-square:before {
+ content: "\f2ad";
+}
+
+.fa-pied-piper:before {
+ content: "\f2ae";
+}
+
+.fa-first-order:before {
+ content: "\f2b0";
+}
+
+.fa-yoast:before {
+ content: "\f2b1";
+}
+
+.fa-themeisle:before {
+ content: "\f2b2";
+}
+
+.fa-google-plus-circle:before,
+.fa-google-plus-official:before {
+ content: "\f2b3";
+}
+
+.fa-fa:before,
+.fa-font-awesome:before {
+ content: "\f2b4";
+}
+
+.fa-handshake-o:before {
+ content: "\f2b5";
+}
+
+.fa-envelope-open:before {
+ content: "\f2b6";
+}
+
+.fa-envelope-open-o:before {
+ content: "\f2b7";
+}
+
+.fa-linode:before {
+ content: "\f2b8";
+}
+
+.fa-address-book:before {
+ content: "\f2b9";
+}
+
+.fa-address-book-o:before {
+ content: "\f2ba";
+}
+
+.fa-vcard:before,
+.fa-address-card:before {
+ content: "\f2bb";
+}
+
+.fa-vcard-o:before,
+.fa-address-card-o:before {
+ content: "\f2bc";
+}
+
+.fa-user-circle:before {
+ content: "\f2bd";
+}
+
+.fa-user-circle-o:before {
+ content: "\f2be";
+}
+
+.fa-user-o:before {
+ content: "\f2c0";
+}
+
+.fa-id-badge:before {
+ content: "\f2c1";
+}
+
+.fa-drivers-license:before,
+.fa-id-card:before {
+ content: "\f2c2";
+}
+
+.fa-drivers-license-o:before,
+.fa-id-card-o:before {
+ content: "\f2c3";
+}
+
+.fa-quora:before {
+ content: "\f2c4";
+}
+
+.fa-free-code-camp:before {
+ content: "\f2c5";
+}
+
+.fa-telegram:before {
+ content: "\f2c6";
+}
+
+.fa-thermometer-4:before,
+.fa-thermometer:before,
+.fa-thermometer-full:before {
+ content: "\f2c7";
+}
+
+.fa-thermometer-3:before,
+.fa-thermometer-three-quarters:before {
+ content: "\f2c8";
+}
+
+.fa-thermometer-2:before,
+.fa-thermometer-half:before {
+ content: "\f2c9";
+}
+
+.fa-thermometer-1:before,
+.fa-thermometer-quarter:before {
+ content: "\f2ca";
+}
+
+.fa-thermometer-0:before,
+.fa-thermometer-empty:before {
+ content: "\f2cb";
+}
+
+.fa-shower:before {
+ content: "\f2cc";
+}
+
+.fa-bathtub:before,
+.fa-s15:before,
+.fa-bath:before {
+ content: "\f2cd";
+}
+
+.fa-podcast:before {
+ content: "\f2ce";
+}
+
+.fa-window-maximize:before {
+ content: "\f2d0";
+}
+
+.fa-window-minimize:before {
+ content: "\f2d1";
+}
+
+.fa-window-restore:before {
+ content: "\f2d2";
+}
+
+.fa-times-rectangle:before,
+.fa-window-close:before {
+ content: "\f2d3";
+}
+
+.fa-times-rectangle-o:before,
+.fa-window-close-o:before {
+ content: "\f2d4";
+}
+
+.fa-bandcamp:before {
+ content: "\f2d5";
+}
+
+.fa-grav:before {
+ content: "\f2d6";
+}
+
+.fa-etsy:before {
+ content: "\f2d7";
+}
+
+.fa-imdb:before {
+ content: "\f2d8";
+}
+
+.fa-ravelry:before {
+ content: "\f2d9";
+}
+
+.fa-eercast:before {
+ content: "\f2da";
+}
+
+.fa-microchip:before {
+ content: "\f2db";
+}
+
+.fa-snowflake-o:before {
+ content: "\f2dc";
+}
+
+.fa-superpowers:before {
+ content: "\f2dd";
+}
+
+.fa-wpexplorer:before {
+ content: "\f2de";
+}
+
+.fa-meetup:before {
+ content: "\f2e0";
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+body {
+ margin: 0;
+}
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ vertical-align: baseline;
+}
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+[hidden],
+template {
+ display: none;
+}
+
+a {
+ background-color: transparent;
+}
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+b,
+strong {
+ font-weight: 700;
+}
+
+dfn {
+ font-style: italic;
+}
+
+h1 {
+ margin: .67em 0;
+ font-size: 2em;
+}
+
+mark {
+ color: #000;
+ background: #ff0;
+}
+
+small {
+ font-size: 80%;
+}
+
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -.5em;
+}
+
+sub {
+ bottom: -.25em;
+}
+
+img {
+ border: 0;
+}
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+figure {
+ margin: 1em 40px;
+}
+
+hr {
+ height: 0;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+pre {
+ overflow: auto;
+}
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace,monospace;
+ font-size: 1em;
+}
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ margin: 0;
+ font: inherit;
+ color: inherit;
+}
+
+button {
+ overflow: visible;
+}
+
+button,
+select {
+ text-transform: none;
+}
+
+button,
+html input[type=button],
+input[type=reset],
+input[type=submit] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+
+input {
+ line-height: normal;
+}
+
+input[type=checkbox],
+input[type=radio] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0;
+}
+
+input[type=number]::-webkit-inner-spin-button,
+input[type=number]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+input[type=search] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+
+input[type=search]::-webkit-search-cancel-button,
+input[type=search]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+fieldset {
+ padding: .35em .625em .75em;
+ margin: 0 2px;
+ border: 1px solid silver;
+}
+
+legend {
+ padding: 0;
+ border: 0;
+}
+
+textarea {
+ overflow: auto;
+}
+
+optgroup {
+ font-weight: 700;
+}
+
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+
+td,
+th {
+ padding: 0;
+}
+
+/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
+
+@media print {
+ *,
+ :after,
+ :before {
+ color: #000!important;
+ text-shadow: none!important;
+ background: 0 0!important;
+ -webkit-box-shadow: none!important;
+ box-shadow: none!important;
+ }
+
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+
+ a[href^="javascript:"]:after,
+ a[href^="#"]:after {
+ content: "";
+ }
+
+ 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;
+ }
+
+ h2,
+ h3,
+ p {
+ orphans: 3;
+ widows: 3;
+ }
+
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+
+ .navbar {
+ display: none;
+ }
+
+ .btn>.caret,
+ .dropup>.btn>.caret {
+ border-top-color: #000!important;
+ }
+
+ .label {
+ border: 1px solid #000;
+ }
+
+ .table {
+ border-collapse: collapse!important;
+ }
+
+ .table td,
+ .table th {
+ background-color: #fff!important;
+ }
+
+ .table-bordered td,
+ .table-bordered th {
+ border: 1px solid #ddd!important;
+ }
+}
+
+@font-face {
+ font-family: 'Glyphicons Halflings';
+ src: url(../fonts/glyphicons-halflings-regular.eot);
+ src: url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg');
+}
+
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.glyphicon-asterisk:before {
+ content: "\002a";
+}
+
+.glyphicon-plus:before {
+ content: "\002b";
+}
+
+.glyphicon-eur:before,
+.glyphicon-euro:before {
+ content: "\20ac";
+}
+
+.glyphicon-minus:before {
+ content: "\2212";
+}
+
+.glyphicon-cloud:before {
+ content: "\2601";
+}
+
+.glyphicon-envelope:before {
+ content: "\2709";
+}
+
+.glyphicon-pencil:before {
+ content: "\270f";
+}
+
+.glyphicon-glass:before {
+ content: "\e001";
+}
+
+.glyphicon-music:before {
+ content: "\e002";
+}
+
+.glyphicon-search:before {
+ content: "\e003";
+}
+
+.glyphicon-heart:before {
+ content: "\e005";
+}
+
+.glyphicon-star:before {
+ content: "\e006";
+}
+
+.glyphicon-star-empty:before {
+ content: "\e007";
+}
+
+.glyphicon-user:before {
+ content: "\e008";
+}
+
+.glyphicon-film:before {
+ content: "\e009";
+}
+
+.glyphicon-th-large:before {
+ content: "\e010";
+}
+
+.glyphicon-th:before {
+ content: "\e011";
+}
+
+.glyphicon-th-list:before {
+ content: "\e012";
+}
+
+.glyphicon-ok:before {
+ content: "\e013";
+}
+
+.glyphicon-remove:before {
+ content: "\e014";
+}
+
+.glyphicon-zoom-in:before {
+ content: "\e015";
+}
+
+.glyphicon-zoom-out:before {
+ content: "\e016";
+}
+
+.glyphicon-off:before {
+ content: "\e017";
+}
+
+.glyphicon-signal:before {
+ content: "\e018";
+}
+
+.glyphicon-cog:before {
+ content: "\e019";
+}
+
+.glyphicon-trash:before {
+ content: "\e020";
+}
+
+.glyphicon-home:before {
+ content: "\e021";
+}
+
+.glyphicon-file:before {
+ content: "\e022";
+}
+
+.glyphicon-time:before {
+ content: "\e023";
+}
+
+.glyphicon-road:before {
+ content: "\e024";
+}
+
+.glyphicon-download-alt:before {
+ content: "\e025";
+}
+
+.glyphicon-download:before {
+ content: "\e026";
+}
+
+.glyphicon-upload:before {
+ content: "\e027";
+}
+
+.glyphicon-inbox:before {
+ content: "\e028";
+}
+
+.glyphicon-play-circle:before {
+ content: "\e029";
+}
+
+.glyphicon-repeat:before {
+ content: "\e030";
+}
+
+.glyphicon-refresh:before {
+ content: "\e031";
+}
+
+.glyphicon-list-alt:before {
+ content: "\e032";
+}
+
+.glyphicon-lock:before {
+ content: "\e033";
+}
+
+.glyphicon-flag:before {
+ content: "\e034";
+}
+
+.glyphicon-headphones:before {
+ content: "\e035";
+}
+
+.glyphicon-volume-off:before {
+ content: "\e036";
+}
+
+.glyphicon-volume-down:before {
+ content: "\e037";
+}
+
+.glyphicon-volume-up:before {
+ content: "\e038";
+}
+
+.glyphicon-qrcode:before {
+ content: "\e039";
+}
+
+.glyphicon-barcode:before {
+ content: "\e040";
+}
+
+.glyphicon-tag:before {
+ content: "\e041";
+}
+
+.glyphicon-tags:before {
+ content: "\e042";
+}
+
+.glyphicon-book:before {
+ content: "\e043";
+}
+
+.glyphicon-bookmark:before {
+ content: "\e044";
+}
+
+.glyphicon-print:before {
+ content: "\e045";
+}
+
+.glyphicon-camera:before {
+ content: "\e046";
+}
+
+.glyphicon-font:before {
+ content: "\e047";
+}
+
+.glyphicon-bold:before {
+ content: "\e048";
+}
+
+.glyphicon-italic:before {
+ content: "\e049";
+}
+
+.glyphicon-text-height:before {
+ content: "\e050";
+}
+
+.glyphicon-text-width:before {
+ content: "\e051";
+}
+
+.glyphicon-align-left:before {
+ content: "\e052";
+}
+
+.glyphicon-align-center:before {
+ content: "\e053";
+}
+
+.glyphicon-align-right:before {
+ content: "\e054";
+}
+
+.glyphicon-align-justify:before {
+ content: "\e055";
+}
+
+.glyphicon-list:before {
+ content: "\e056";
+}
+
+.glyphicon-indent-left:before {
+ content: "\e057";
+}
+
+.glyphicon-indent-right:before {
+ content: "\e058";
+}
+
+.glyphicon-facetime-video:before {
+ content: "\e059";
+}
+
+.glyphicon-picture:before {
+ content: "\e060";
+}
+
+.glyphicon-map-marker:before {
+ content: "\e062";
+}
+
+.glyphicon-adjust:before {
+ content: "\e063";
+}
+
+.glyphicon-tint:before {
+ content: "\e064";
+}
+
+.glyphicon-edit:before {
+ content: "\e065";
+}
+
+.glyphicon-share:before {
+ content: "\e066";
+}
+
+.glyphicon-check:before {
+ content: "\e067";
+}
+
+.glyphicon-move:before {
+ content: "\e068";
+}
+
+.glyphicon-step-backward:before {
+ content: "\e069";
+}
+
+.glyphicon-fast-backward:before {
+ content: "\e070";
+}
+
+.glyphicon-backward:before {
+ content: "\e071";
+}
+
+.glyphicon-play:before {
+ content: "\e072";
+}
+
+.glyphicon-pause:before {
+ content: "\e073";
+}
+
+.glyphicon-stop:before {
+ content: "\e074";
+}
+
+.glyphicon-forward:before {
+ content: "\e075";
+}
+
+.glyphicon-fast-forward:before {
+ content: "\e076";
+}
+
+.glyphicon-step-forward:before {
+ content: "\e077";
+}
+
+.glyphicon-eject:before {
+ content: "\e078";
+}
+
+.glyphicon-chevron-left:before {
+ content: "\e079";
+}
+
+.glyphicon-chevron-right:before {
+ content: "\e080";
+}
+
+.glyphicon-plus-sign:before {
+ content: "\e081";
+}
+
+.glyphicon-minus-sign:before {
+ content: "\e082";
+}
+
+.glyphicon-remove-sign:before {
+ content: "\e083";
+}
+
+.glyphicon-ok-sign:before {
+ content: "\e084";
+}
+
+.glyphicon-question-sign:before {
+ content: "\e085";
+}
+
+.glyphicon-info-sign:before {
+ content: "\e086";
+}
+
+.glyphicon-screenshot:before {
+ content: "\e087";
+}
+
+.glyphicon-remove-circle:before {
+ content: "\e088";
+}
+
+.glyphicon-ok-circle:before {
+ content: "\e089";
+}
+
+.glyphicon-ban-circle:before {
+ content: "\e090";
+}
+
+.glyphicon-arrow-left:before {
+ content: "\e091";
+}
+
+.glyphicon-arrow-right:before {
+ content: "\e092";
+}
+
+.glyphicon-arrow-up:before {
+ content: "\e093";
+}
+
+.glyphicon-arrow-down:before {
+ content: "\e094";
+}
+
+.glyphicon-share-alt:before {
+ content: "\e095";
+}
+
+.glyphicon-resize-full:before {
+ content: "\e096";
+}
+
+.glyphicon-resize-small:before {
+ content: "\e097";
+}
+
+.glyphicon-exclamation-sign:before {
+ content: "\e101";
+}
+
+.glyphicon-gift:before {
+ content: "\e102";
+}
+
+.glyphicon-leaf:before {
+ content: "\e103";
+}
+
+.glyphicon-fire:before {
+ content: "\e104";
+}
+
+.glyphicon-eye-open:before {
+ content: "\e105";
+}
+
+.glyphicon-eye-close:before {
+ content: "\e106";
+}
+
+.glyphicon-warning-sign:before {
+ content: "\e107";
+}
+
+.glyphicon-plane:before {
+ content: "\e108";
+}
+
+.glyphicon-calendar:before {
+ content: "\e109";
+}
+
+.glyphicon-random:before {
+ content: "\e110";
+}
+
+.glyphicon-comment:before {
+ content: "\e111";
+}
+
+.glyphicon-magnet:before {
+ content: "\e112";
+}
+
+.glyphicon-chevron-up:before {
+ content: "\e113";
+}
+
+.glyphicon-chevron-down:before {
+ content: "\e114";
+}
+
+.glyphicon-retweet:before {
+ content: "\e115";
+}
+
+.glyphicon-shopping-cart:before {
+ content: "\e116";
+}
+
+.glyphicon-folder-close:before {
+ content: "\e117";
+}
+
+.glyphicon-folder-open:before {
+ content: "\e118";
+}
+
+.glyphicon-resize-vertical:before {
+ content: "\e119";
+}
+
+.glyphicon-resize-horizontal:before {
+ content: "\e120";
+}
+
+.glyphicon-hdd:before {
+ content: "\e121";
+}
+
+.glyphicon-bullhorn:before {
+ content: "\e122";
+}
+
+.glyphicon-bell:before {
+ content: "\e123";
+}
+
+.glyphicon-certificate:before {
+ content: "\e124";
+}
+
+.glyphicon-thumbs-up:before {
+ content: "\e125";
+}
+
+.glyphicon-thumbs-down:before {
+ content: "\e126";
+}
+
+.glyphicon-hand-right:before {
+ content: "\e127";
+}
+
+.glyphicon-hand-left:before {
+ content: "\e128";
+}
+
+.glyphicon-hand-up:before {
+ content: "\e129";
+}
+
+.glyphicon-hand-down:before {
+ content: "\e130";
+}
+
+.glyphicon-circle-arrow-right:before {
+ content: "\e131";
+}
+
+.glyphicon-circle-arrow-left:before {
+ content: "\e132";
+}
+
+.glyphicon-circle-arrow-up:before {
+ content: "\e133";
+}
+
+.glyphicon-circle-arrow-down:before {
+ content: "\e134";
+}
+
+.glyphicon-globe:before {
+ content: "\e135";
+}
+
+.glyphicon-wrench:before {
+ content: "\e136";
+}
+
+.glyphicon-tasks:before {
+ content: "\e137";
+}
+
+.glyphicon-filter:before {
+ content: "\e138";
+}
+
+.glyphicon-briefcase:before {
+ content: "\e139";
+}
+
+.glyphicon-fullscreen:before {
+ content: "\e140";
+}
+
+.glyphicon-dashboard:before {
+ content: "\e141";
+}
+
+.glyphicon-paperclip:before {
+ content: "\e142";
+}
+
+.glyphicon-heart-empty:before {
+ content: "\e143";
+}
+
+.glyphicon-link:before {
+ content: "\e144";
+}
+
+.glyphicon-phone:before {
+ content: "\e145";
+}
+
+.glyphicon-pushpin:before {
+ content: "\e146";
+}
+
+.glyphicon-usd:before {
+ content: "\e148";
+}
+
+.glyphicon-gbp:before {
+ content: "\e149";
+}
+
+.glyphicon-sort:before {
+ content: "\e150";
+}
+
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151";
+}
+
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152";
+}
+
+.glyphicon-sort-by-order:before {
+ content: "\e153";
+}
+
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154";
+}
+
+.glyphicon-sort-by-attributes:before {
+ content: "\e155";
+}
+
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156";
+}
+
+.glyphicon-unchecked:before {
+ content: "\e157";
+}
+
+.glyphicon-expand:before {
+ content: "\e158";
+}
+
+.glyphicon-collapse-down:before {
+ content: "\e159";
+}
+
+.glyphicon-collapse-up:before {
+ content: "\e160";
+}
+
+.glyphicon-log-in:before {
+ content: "\e161";
+}
+
+.glyphicon-flash:before {
+ content: "\e162";
+}
+
+.glyphicon-log-out:before {
+ content: "\e163";
+}
+
+.glyphicon-new-window:before {
+ content: "\e164";
+}
+
+.glyphicon-record:before {
+ content: "\e165";
+}
+
+.glyphicon-save:before {
+ content: "\e166";
+}
+
+.glyphicon-open:before {
+ content: "\e167";
+}
+
+.glyphicon-saved:before {
+ content: "\e168";
+}
+
+.glyphicon-import:before {
+ content: "\e169";
+}
+
+.glyphicon-export:before {
+ content: "\e170";
+}
+
+.glyphicon-send:before {
+ content: "\e171";
+}
+
+.glyphicon-floppy-disk:before {
+ content: "\e172";
+}
+
+.glyphicon-floppy-saved:before {
+ content: "\e173";
+}
+
+.glyphicon-floppy-remove:before {
+ content: "\e174";
+}
+
+.glyphicon-floppy-save:before {
+ content: "\e175";
+}
+
+.glyphicon-floppy-open:before {
+ content: "\e176";
+}
+
+.glyphicon-credit-card:before {
+ content: "\e177";
+}
+
+.glyphicon-transfer:before {
+ content: "\e178";
+}
+
+.glyphicon-cutlery:before {
+ content: "\e179";
+}
+
+.glyphicon-header:before {
+ content: "\e180";
+}
+
+.glyphicon-compressed:before {
+ content: "\e181";
+}
+
+.glyphicon-earphone:before {
+ content: "\e182";
+}
+
+.glyphicon-phone-alt:before {
+ content: "\e183";
+}
+
+.glyphicon-tower:before {
+ content: "\e184";
+}
+
+.glyphicon-stats:before {
+ content: "\e185";
+}
+
+.glyphicon-sd-video:before {
+ content: "\e186";
+}
+
+.glyphicon-hd-video:before {
+ content: "\e187";
+}
+
+.glyphicon-subtitles:before {
+ content: "\e188";
+}
+
+.glyphicon-sound-stereo:before {
+ content: "\e189";
+}
+
+.glyphicon-sound-dolby:before {
+ content: "\e190";
+}
+
+.glyphicon-sound-5-1:before {
+ content: "\e191";
+}
+
+.glyphicon-sound-6-1:before {
+ content: "\e192";
+}
+
+.glyphicon-sound-7-1:before {
+ content: "\e193";
+}
+
+.glyphicon-copyright-mark:before {
+ content: "\e194";
+}
+
+.glyphicon-registration-mark:before {
+ content: "\e195";
+}
+
+.glyphicon-cloud-download:before {
+ content: "\e197";
+}
+
+.glyphicon-cloud-upload:before {
+ content: "\e198";
+}
+
+.glyphicon-tree-conifer:before {
+ content: "\e199";
+}
+
+.glyphicon-tree-deciduous:before {
+ content: "\e200";
+}
+
+.glyphicon-cd:before {
+ content: "\e201";
+}
+
+.glyphicon-save-file:before {
+ content: "\e202";
+}
+
+.glyphicon-open-file:before {
+ content: "\e203";
+}
+
+.glyphicon-level-up:before {
+ content: "\e204";
+}
+
+.glyphicon-copy:before {
+ content: "\e205";
+}
+
+.glyphicon-paste:before {
+ content: "\e206";
+}
+
+.glyphicon-alert:before {
+ content: "\e209";
+}
+
+.glyphicon-equalizer:before {
+ content: "\e210";
+}
+
+.glyphicon-king:before {
+ content: "\e211";
+}
+
+.glyphicon-queen:before {
+ content: "\e212";
+}
+
+.glyphicon-pawn:before {
+ content: "\e213";
+}
+
+.glyphicon-bishop:before {
+ content: "\e214";
+}
+
+.glyphicon-knight:before {
+ content: "\e215";
+}
+
+.glyphicon-baby-formula:before {
+ content: "\e216";
+}
+
+.glyphicon-tent:before {
+ content: "\26fa";
+}
+
+.glyphicon-blackboard:before {
+ content: "\e218";
+}
+
+.glyphicon-bed:before {
+ content: "\e219";
+}
+
+.glyphicon-apple:before {
+ content: "\f8ff";
+}
+
+.glyphicon-erase:before {
+ content: "\e221";
+}
+
+.glyphicon-hourglass:before {
+ content: "\231b";
+}
+
+.glyphicon-lamp:before {
+ content: "\e223";
+}
+
+.glyphicon-duplicate:before {
+ content: "\e224";
+}
+
+.glyphicon-piggy-bank:before {
+ content: "\e225";
+}
+
+.glyphicon-scissors:before {
+ content: "\e226";
+}
+
+.glyphicon-bitcoin:before {
+ content: "\e227";
+}
+
+.glyphicon-btc:before {
+ content: "\e227";
+}
+
+.glyphicon-xbt:before {
+ content: "\e227";
+}
+
+.glyphicon-yen:before {
+ content: "\00a5";
+}
+
+.glyphicon-jpy:before {
+ content: "\00a5";
+}
+
+.glyphicon-ruble:before {
+ content: "\20bd";
+}
+
+.glyphicon-rub:before {
+ content: "\20bd";
+}
+
+.glyphicon-scale:before {
+ content: "\e230";
+}
+
+.glyphicon-ice-lolly:before {
+ content: "\e231";
+}
+
+.glyphicon-ice-lolly-tasted:before {
+ content: "\e232";
+}
+
+.glyphicon-education:before {
+ content: "\e233";
+}
+
+.glyphicon-option-horizontal:before {
+ content: "\e234";
+}
+
+.glyphicon-option-vertical:before {
+ content: "\e235";
+}
+
+.glyphicon-menu-hamburger:before {
+ content: "\e236";
+}
+
+.glyphicon-modal-window:before {
+ content: "\e237";
+}
+
+.glyphicon-oil:before {
+ content: "\e238";
+}
+
+.glyphicon-grain:before {
+ content: "\e239";
+}
+
+.glyphicon-sunglasses:before {
+ content: "\e240";
+}
+
+.glyphicon-text-size:before {
+ content: "\e241";
+}
+
+.glyphicon-text-color:before {
+ content: "\e242";
+}
+
+.glyphicon-text-background:before {
+ content: "\e243";
+}
+
+.glyphicon-object-align-top:before {
+ content: "\e244";
+}
+
+.glyphicon-object-align-bottom:before {
+ content: "\e245";
+}
+
+.glyphicon-object-align-horizontal:before {
+ content: "\e246";
+}
+
+.glyphicon-object-align-left:before {
+ content: "\e247";
+}
+
+.glyphicon-object-align-vertical:before {
+ content: "\e248";
+}
+
+.glyphicon-object-align-right:before {
+ content: "\e249";
+}
+
+.glyphicon-triangle-right:before {
+ content: "\e250";
+}
+
+.glyphicon-triangle-left:before {
+ content: "\e251";
+}
+
+.glyphicon-triangle-bottom:before {
+ content: "\e252";
+}
+
+.glyphicon-triangle-top:before {
+ content: "\e253";
+}
+
+.glyphicon-console:before {
+ content: "\e254";
+}
+
+.glyphicon-superscript:before {
+ content: "\e255";
+}
+
+.glyphicon-subscript:before {
+ content: "\e256";
+}
+
+.glyphicon-menu-left:before {
+ content: "\e257";
+}
+
+.glyphicon-menu-right:before {
+ content: "\e258";
+}
+
+.glyphicon-menu-down:before {
+ content: "\e259";
+}
+
+.glyphicon-menu-up:before {
+ content: "\e260";
+}
+
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+:after,
+:before {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+html {
+ font-size: 10px;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+}
+
+body {
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #333;
+ background-color: #fff;
+}
+
+button,
+input,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+a {
+ color: #337ab7;
+ text-decoration: none;
+}
+
+a:focus,
+a:hover {
+ color: #23527c;
+ text-decoration: underline;
+}
+
+a:focus {
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+figure {
+ margin: 0;
+}
+
+img {
+ vertical-align: middle;
+}
+
+.carousel-inner>.item>a>img,
+.carousel-inner>.item>img,
+.img-responsive,
+.thumbnail a>img,
+.thumbnail>img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+
+.img-rounded {
+ border-radius: 6px;
+}
+
+.img-thumbnail {
+ display: inline-block;
+ max-width: 100%;
+ height: auto;
+ padding: 4px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+}
+
+.img-circle {
+ border-radius: 50%;
+}
+
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0,0,0,0);
+ border: 0;
+}
+
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
+
+[role=button] {
+ cursor: pointer;
+}
+
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-family: inherit;
+ font-weight: 500;
+ line-height: 1.1;
+ color: inherit;
+}
+
+.h1 .small,
+.h1 small,
+.h2 .small,
+.h2 small,
+.h3 .small,
+.h3 small,
+.h4 .small,
+.h4 small,
+.h5 .small,
+.h5 small,
+.h6 .small,
+.h6 small,
+h1 .small,
+h1 small,
+h2 .small,
+h2 small,
+h3 .small,
+h3 small,
+h4 .small,
+h4 small,
+h5 .small,
+h5 small,
+h6 .small,
+h6 small {
+ font-weight: 400;
+ line-height: 1;
+ color: #777;
+}
+
+.h1,
+.h2,
+.h3,
+h1,
+h2,
+h3 {
+ margin-top: 20px;
+ margin-bottom: 10px;
+}
+
+.h1 .small,
+.h1 small,
+.h2 .small,
+.h2 small,
+.h3 .small,
+.h3 small,
+h1 .small,
+h1 small,
+h2 .small,
+h2 small,
+h3 .small,
+h3 small {
+ font-size: 65%;
+}
+
+.h4,
+.h5,
+.h6,
+h4,
+h5,
+h6 {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.h4 .small,
+.h4 small,
+.h5 .small,
+.h5 small,
+.h6 .small,
+.h6 small,
+h4 .small,
+h4 small,
+h5 .small,
+h5 small,
+h6 .small,
+h6 small {
+ font-size: 75%;
+}
+
+.h1,
+h1 {
+ font-size: 36px;
+}
+
+.h2,
+h2 {
+ font-size: 30px;
+}
+
+.h3,
+h3 {
+ font-size: 24px;
+}
+
+.h4,
+h4 {
+ font-size: 18px;
+}
+
+.h5,
+h5 {
+ font-size: 14px;
+}
+
+.h6,
+h6 {
+ font-size: 12px;
+}
+
+p {
+ margin: 0 0 10px;
+}
+
+.lead {
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 1.4;
+}
+
+@media (min-width:768px) {
+ .lead {
+ font-size: 21px;
+ }
+}
+
+.small,
+small {
+ font-size: 85%;
+}
+
+.mark,
+mark {
+ padding: .2em;
+ background-color: #fcf8e3;
+}
+
+.text-left {
+ text-align: left;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-justify {
+ text-align: justify;
+}
+
+.text-nowrap {
+ white-space: nowrap;
+}
+
+.text-lowercase {
+ text-transform: lowercase;
+}
+
+.text-uppercase {
+ text-transform: uppercase;
+}
+
+.text-capitalize {
+ text-transform: capitalize;
+}
+
+.text-muted {
+ color: #777;
+}
+
+.text-primary {
+ color: #337ab7;
+}
+
+a.text-primary:focus,
+a.text-primary:hover {
+ color: #286090;
+}
+
+.text-success {
+ color: #3c763d;
+}
+
+a.text-success:focus,
+a.text-success:hover {
+ color: #2b542c;
+}
+
+.text-info {
+ color: #31708f;
+}
+
+a.text-info:focus,
+a.text-info:hover {
+ color: #245269;
+}
+
+.text-warning {
+ color: #8a6d3b;
+}
+
+a.text-warning:focus,
+a.text-warning:hover {
+ color: #66512c;
+}
+
+.text-danger {
+ color: #a94442;
+}
+
+a.text-danger:focus,
+a.text-danger:hover {
+ color: #843534;
+}
+
+.bg-primary {
+ color: #fff;
+ background-color: #337ab7;
+}
+
+a.bg-primary:focus,
+a.bg-primary:hover {
+ background-color: #286090;
+}
+
+.bg-success {
+ background-color: #dff0d8;
+}
+
+a.bg-success:focus,
+a.bg-success:hover {
+ background-color: #c1e2b3;
+}
+
+.bg-info {
+ background-color: #d9edf7;
+}
+
+a.bg-info:focus,
+a.bg-info:hover {
+ background-color: #afd9ee;
+}
+
+.bg-warning {
+ background-color: #fcf8e3;
+}
+
+a.bg-warning:focus,
+a.bg-warning:hover {
+ background-color: #f7ecb5;
+}
+
+.bg-danger {
+ background-color: #f2dede;
+}
+
+a.bg-danger:focus,
+a.bg-danger:hover {
+ background-color: #e4b9b9;
+}
+
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #eee;
+}
+
+ol,
+ul {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+
+ol ol,
+ol ul,
+ul ol,
+ul ul {
+ margin-bottom: 0;
+}
+
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+
+.list-inline {
+ padding-left: 0;
+ margin-left: -5px;
+ list-style: none;
+}
+
+.list-inline>li {
+ display: inline-block;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+
+dl {
+ margin-top: 0;
+ margin-bottom: 20px;
+}
+
+dd,
+dt {
+ line-height: 1.42857143;
+}
+
+dt {
+ font-weight: 700;
+}
+
+dd {
+ margin-left: 0;
+}
+
+@media (min-width:768px) {
+ .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[data-original-title],
+abbr[title] {
+ cursor: help;
+ border-bottom: 1px dotted #777;
+}
+
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee;
+}
+
+blockquote ol:last-child,
+blockquote p:last-child,
+blockquote ul:last-child {
+ margin-bottom: 0;
+}
+
+blockquote .small,
+blockquote footer,
+blockquote small {
+ display: block;
+ font-size: 80%;
+ line-height: 1.42857143;
+ color: #777;
+}
+
+blockquote .small:before,
+blockquote footer:before,
+blockquote small:before {
+ content: '\2014 \00A0';
+}
+
+.blockquote-reverse,
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ text-align: right;
+ border-right: 5px solid #eee;
+ border-left: 0;
+}
+
+.blockquote-reverse .small:before,
+.blockquote-reverse footer:before,
+.blockquote-reverse small:before,
+blockquote.pull-right .small:before,
+blockquote.pull-right footer:before,
+blockquote.pull-right small:before {
+ content: '';
+}
+
+.blockquote-reverse .small:after,
+.blockquote-reverse footer:after,
+.blockquote-reverse small:after,
+blockquote.pull-right .small:after,
+blockquote.pull-right footer:after,
+blockquote.pull-right small:after {
+ content: '\00A0 \2014';
+}
+
+address {
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 1.42857143;
+}
+
+code,
+kbd,
+pre,
+samp {
+ font-family: Menlo,Monaco,Consolas,"Courier New",monospace;
+}
+
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #c7254e;
+ background-color: #f9f2f4;
+ border-radius: 4px;
+}
+
+kbd {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #fff;
+ background-color: #333;
+ border-radius: 3px;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
+}
+
+kbd kbd {
+ padding: 0;
+ font-size: 100%;
+ font-weight: 700;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border-radius: 0;
+}
+
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
+}
+
+.container {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+@media (min-width:768px) {
+ .container {
+ width: 750px;
+ }
+}
+
+@media (min-width:992px) {
+ .container {
+ width: 970px;
+ }
+}
+
+@media (min-width:1200px) {
+ .container {
+ width: 1170px;
+ }
+}
+
+.container-fluid {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.row {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+.col-lg-1,
+.col-lg-10,
+.col-lg-11,
+.col-lg-12,
+.col-lg-2,
+.col-lg-3,
+.col-lg-4,
+.col-lg-5,
+.col-lg-6,
+.col-lg-7,
+.col-lg-8,
+.col-lg-9,
+.col-md-1,
+.col-md-10,
+.col-md-11,
+.col-md-12,
+.col-md-2,
+.col-md-3,
+.col-md-4,
+.col-md-5,
+.col-md-6,
+.col-md-7,
+.col-md-8,
+.col-md-9,
+.col-sm-1,
+.col-sm-10,
+.col-sm-11,
+.col-sm-12,
+.col-sm-2,
+.col-sm-3,
+.col-sm-4,
+.col-sm-5,
+.col-sm-6,
+.col-sm-7,
+.col-sm-8,
+.col-sm-9,
+.col-xs-1,
+.col-xs-10,
+.col-xs-11,
+.col-xs-12,
+.col-xs-2,
+.col-xs-3,
+.col-xs-4,
+.col-xs-5,
+.col-xs-6,
+.col-xs-7,
+.col-xs-8,
+.col-xs-9 {
+ position: relative;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px;
+}
+
+.col-xs-1,
+.col-xs-10,
+.col-xs-11,
+.col-xs-12,
+.col-xs-2,
+.col-xs-3,
+.col-xs-4,
+.col-xs-5,
+.col-xs-6,
+.col-xs-7,
+.col-xs-8,
+.col-xs-9 {
+ float: left;
+}
+
+.col-xs-12 {
+ width: 100%;
+}
+
+.col-xs-11 {
+ width: 91.66666667%;
+}
+
+.col-xs-10 {
+ width: 83.33333333%;
+}
+
+.col-xs-9 {
+ width: 75%;
+}
+
+.col-xs-8 {
+ width: 66.66666667%;
+}
+
+.col-xs-7 {
+ width: 58.33333333%;
+}
+
+.col-xs-6 {
+ width: 50%;
+}
+
+.col-xs-5 {
+ width: 41.66666667%;
+}
+
+.col-xs-4 {
+ width: 33.33333333%;
+}
+
+.col-xs-3 {
+ width: 25%;
+}
+
+.col-xs-2 {
+ width: 16.66666667%;
+}
+
+.col-xs-1 {
+ width: 8.33333333%;
+}
+
+.col-xs-pull-12 {
+ right: 100%;
+}
+
+.col-xs-pull-11 {
+ right: 91.66666667%;
+}
+
+.col-xs-pull-10 {
+ right: 83.33333333%;
+}
+
+.col-xs-pull-9 {
+ right: 75%;
+}
+
+.col-xs-pull-8 {
+ right: 66.66666667%;
+}
+
+.col-xs-pull-7 {
+ right: 58.33333333%;
+}
+
+.col-xs-pull-6 {
+ right: 50%;
+}
+
+.col-xs-pull-5 {
+ right: 41.66666667%;
+}
+
+.col-xs-pull-4 {
+ right: 33.33333333%;
+}
+
+.col-xs-pull-3 {
+ right: 25%;
+}
+
+.col-xs-pull-2 {
+ right: 16.66666667%;
+}
+
+.col-xs-pull-1 {
+ right: 8.33333333%;
+}
+
+.col-xs-pull-0 {
+ right: auto;
+}
+
+.col-xs-push-12 {
+ left: 100%;
+}
+
+.col-xs-push-11 {
+ left: 91.66666667%;
+}
+
+.col-xs-push-10 {
+ left: 83.33333333%;
+}
+
+.col-xs-push-9 {
+ left: 75%;
+}
+
+.col-xs-push-8 {
+ left: 66.66666667%;
+}
+
+.col-xs-push-7 {
+ left: 58.33333333%;
+}
+
+.col-xs-push-6 {
+ left: 50%;
+}
+
+.col-xs-push-5 {
+ left: 41.66666667%;
+}
+
+.col-xs-push-4 {
+ left: 33.33333333%;
+}
+
+.col-xs-push-3 {
+ left: 25%;
+}
+
+.col-xs-push-2 {
+ left: 16.66666667%;
+}
+
+.col-xs-push-1 {
+ left: 8.33333333%;
+}
+
+.col-xs-push-0 {
+ left: auto;
+}
+
+.col-xs-offset-12 {
+ margin-left: 100%;
+}
+
+.col-xs-offset-11 {
+ margin-left: 91.66666667%;
+}
+
+.col-xs-offset-10 {
+ margin-left: 83.33333333%;
+}
+
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+
+.col-xs-offset-8 {
+ margin-left: 66.66666667%;
+}
+
+.col-xs-offset-7 {
+ margin-left: 58.33333333%;
+}
+
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+
+.col-xs-offset-5 {
+ margin-left: 41.66666667%;
+}
+
+.col-xs-offset-4 {
+ margin-left: 33.33333333%;
+}
+
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+
+.col-xs-offset-2 {
+ margin-left: 16.66666667%;
+}
+
+.col-xs-offset-1 {
+ margin-left: 8.33333333%;
+}
+
+.col-xs-offset-0 {
+ margin-left: 0;
+}
+
+@media (min-width:768px) {
+ .col-sm-1,
+ .col-sm-10,
+ .col-sm-11,
+ .col-sm-12,
+ .col-sm-2,
+ .col-sm-3,
+ .col-sm-4,
+ .col-sm-5,
+ .col-sm-6,
+ .col-sm-7,
+ .col-sm-8,
+ .col-sm-9 {
+ float: left;
+ }
+
+ .col-sm-12 {
+ width: 100%;
+ }
+
+ .col-sm-11 {
+ width: 91.66666667%;
+ }
+
+ .col-sm-10 {
+ width: 83.33333333%;
+ }
+
+ .col-sm-9 {
+ width: 75%;
+ }
+
+ .col-sm-8 {
+ width: 66.66666667%;
+ }
+
+ .col-sm-7 {
+ width: 58.33333333%;
+ }
+
+ .col-sm-6 {
+ width: 50%;
+ }
+
+ .col-sm-5 {
+ width: 41.66666667%;
+ }
+
+ .col-sm-4 {
+ width: 33.33333333%;
+ }
+
+ .col-sm-3 {
+ width: 25%;
+ }
+
+ .col-sm-2 {
+ width: 16.66666667%;
+ }
+
+ .col-sm-1 {
+ width: 8.33333333%;
+ }
+
+ .col-sm-pull-12 {
+ right: 100%;
+ }
+
+ .col-sm-pull-11 {
+ right: 91.66666667%;
+ }
+
+ .col-sm-pull-10 {
+ right: 83.33333333%;
+ }
+
+ .col-sm-pull-9 {
+ right: 75%;
+ }
+
+ .col-sm-pull-8 {
+ right: 66.66666667%;
+ }
+
+ .col-sm-pull-7 {
+ right: 58.33333333%;
+ }
+
+ .col-sm-pull-6 {
+ right: 50%;
+ }
+
+ .col-sm-pull-5 {
+ right: 41.66666667%;
+ }
+
+ .col-sm-pull-4 {
+ right: 33.33333333%;
+ }
+
+ .col-sm-pull-3 {
+ right: 25%;
+ }
+
+ .col-sm-pull-2 {
+ right: 16.66666667%;
+ }
+
+ .col-sm-pull-1 {
+ right: 8.33333333%;
+ }
+
+ .col-sm-pull-0 {
+ right: auto;
+ }
+
+ .col-sm-push-12 {
+ left: 100%;
+ }
+
+ .col-sm-push-11 {
+ left: 91.66666667%;
+ }
+
+ .col-sm-push-10 {
+ left: 83.33333333%;
+ }
+
+ .col-sm-push-9 {
+ left: 75%;
+ }
+
+ .col-sm-push-8 {
+ left: 66.66666667%;
+ }
+
+ .col-sm-push-7 {
+ left: 58.33333333%;
+ }
+
+ .col-sm-push-6 {
+ left: 50%;
+ }
+
+ .col-sm-push-5 {
+ left: 41.66666667%;
+ }
+
+ .col-sm-push-4 {
+ left: 33.33333333%;
+ }
+
+ .col-sm-push-3 {
+ left: 25%;
+ }
+
+ .col-sm-push-2 {
+ left: 16.66666667%;
+ }
+
+ .col-sm-push-1 {
+ left: 8.33333333%;
+ }
+
+ .col-sm-push-0 {
+ left: auto;
+ }
+
+ .col-sm-offset-12 {
+ margin-left: 100%;
+ }
+
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%;
+ }
+
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%;
+ }
+
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%;
+ }
+
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%;
+ }
+
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%;
+ }
+
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%;
+ }
+
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%;
+ }
+
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%;
+ }
+
+ .col-sm-offset-0 {
+ margin-left: 0;
+ }
+}
+
+@media (min-width:992px) {
+ .col-md-1,
+ .col-md-10,
+ .col-md-11,
+ .col-md-12,
+ .col-md-2,
+ .col-md-3,
+ .col-md-4,
+ .col-md-5,
+ .col-md-6,
+ .col-md-7,
+ .col-md-8,
+ .col-md-9 {
+ float: left;
+ }
+
+ .col-md-12 {
+ width: 100%;
+ }
+
+ .col-md-11 {
+ width: 91.66666667%;
+ }
+
+ .col-md-10 {
+ width: 83.33333333%;
+ }
+
+ .col-md-9 {
+ width: 75%;
+ }
+
+ .col-md-8 {
+ width: 66.66666667%;
+ }
+
+ .col-md-7 {
+ width: 58.33333333%;
+ }
+
+ .col-md-6 {
+ width: 50%;
+ }
+
+ .col-md-5 {
+ width: 41.66666667%;
+ }
+
+ .col-md-4 {
+ width: 33.33333333%;
+ }
+
+ .col-md-3 {
+ width: 25%;
+ }
+
+ .col-md-2 {
+ width: 16.66666667%;
+ }
+
+ .col-md-1 {
+ width: 8.33333333%;
+ }
+
+ .col-md-pull-12 {
+ right: 100%;
+ }
+
+ .col-md-pull-11 {
+ right: 91.66666667%;
+ }
+
+ .col-md-pull-10 {
+ right: 83.33333333%;
+ }
+
+ .col-md-pull-9 {
+ right: 75%;
+ }
+
+ .col-md-pull-8 {
+ right: 66.66666667%;
+ }
+
+ .col-md-pull-7 {
+ right: 58.33333333%;
+ }
+
+ .col-md-pull-6 {
+ right: 50%;
+ }
+
+ .col-md-pull-5 {
+ right: 41.66666667%;
+ }
+
+ .col-md-pull-4 {
+ right: 33.33333333%;
+ }
+
+ .col-md-pull-3 {
+ right: 25%;
+ }
+
+ .col-md-pull-2 {
+ right: 16.66666667%;
+ }
+
+ .col-md-pull-1 {
+ right: 8.33333333%;
+ }
+
+ .col-md-pull-0 {
+ right: auto;
+ }
+
+ .col-md-push-12 {
+ left: 100%;
+ }
+
+ .col-md-push-11 {
+ left: 91.66666667%;
+ }
+
+ .col-md-push-10 {
+ left: 83.33333333%;
+ }
+
+ .col-md-push-9 {
+ left: 75%;
+ }
+
+ .col-md-push-8 {
+ left: 66.66666667%;
+ }
+
+ .col-md-push-7 {
+ left: 58.33333333%;
+ }
+
+ .col-md-push-6 {
+ left: 50%;
+ }
+
+ .col-md-push-5 {
+ left: 41.66666667%;
+ }
+
+ .col-md-push-4 {
+ left: 33.33333333%;
+ }
+
+ .col-md-push-3 {
+ left: 25%;
+ }
+
+ .col-md-push-2 {
+ left: 16.66666667%;
+ }
+
+ .col-md-push-1 {
+ left: 8.33333333%;
+ }
+
+ .col-md-push-0 {
+ left: auto;
+ }
+
+ .col-md-offset-12 {
+ margin-left: 100%;
+ }
+
+ .col-md-offset-11 {
+ margin-left: 91.66666667%;
+ }
+
+ .col-md-offset-10 {
+ margin-left: 83.33333333%;
+ }
+
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-md-offset-8 {
+ margin-left: 66.66666667%;
+ }
+
+ .col-md-offset-7 {
+ margin-left: 58.33333333%;
+ }
+
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-md-offset-5 {
+ margin-left: 41.66666667%;
+ }
+
+ .col-md-offset-4 {
+ margin-left: 33.33333333%;
+ }
+
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-md-offset-2 {
+ margin-left: 16.66666667%;
+ }
+
+ .col-md-offset-1 {
+ margin-left: 8.33333333%;
+ }
+
+ .col-md-offset-0 {
+ margin-left: 0;
+ }
+}
+
+@media (min-width:1200px) {
+ .col-lg-1,
+ .col-lg-10,
+ .col-lg-11,
+ .col-lg-12,
+ .col-lg-2,
+ .col-lg-3,
+ .col-lg-4,
+ .col-lg-5,
+ .col-lg-6,
+ .col-lg-7,
+ .col-lg-8,
+ .col-lg-9 {
+ float: left;
+ }
+
+ .col-lg-12 {
+ width: 100%;
+ }
+
+ .col-lg-11 {
+ width: 91.66666667%;
+ }
+
+ .col-lg-10 {
+ width: 83.33333333%;
+ }
+
+ .col-lg-9 {
+ width: 75%;
+ }
+
+ .col-lg-8 {
+ width: 66.66666667%;
+ }
+
+ .col-lg-7 {
+ width: 58.33333333%;
+ }
+
+ .col-lg-6 {
+ width: 50%;
+ }
+
+ .col-lg-5 {
+ width: 41.66666667%;
+ }
+
+ .col-lg-4 {
+ width: 33.33333333%;
+ }
+
+ .col-lg-3 {
+ width: 25%;
+ }
+
+ .col-lg-2 {
+ width: 16.66666667%;
+ }
+
+ .col-lg-1 {
+ width: 8.33333333%;
+ }
+
+ .col-lg-pull-12 {
+ right: 100%;
+ }
+
+ .col-lg-pull-11 {
+ right: 91.66666667%;
+ }
+
+ .col-lg-pull-10 {
+ right: 83.33333333%;
+ }
+
+ .col-lg-pull-9 {
+ right: 75%;
+ }
+
+ .col-lg-pull-8 {
+ right: 66.66666667%;
+ }
+
+ .col-lg-pull-7 {
+ right: 58.33333333%;
+ }
+
+ .col-lg-pull-6 {
+ right: 50%;
+ }
+
+ .col-lg-pull-5 {
+ right: 41.66666667%;
+ }
+
+ .col-lg-pull-4 {
+ right: 33.33333333%;
+ }
+
+ .col-lg-pull-3 {
+ right: 25%;
+ }
+
+ .col-lg-pull-2 {
+ right: 16.66666667%;
+ }
+
+ .col-lg-pull-1 {
+ right: 8.33333333%;
+ }
+
+ .col-lg-pull-0 {
+ right: auto;
+ }
+
+ .col-lg-push-12 {
+ left: 100%;
+ }
+
+ .col-lg-push-11 {
+ left: 91.66666667%;
+ }
+
+ .col-lg-push-10 {
+ left: 83.33333333%;
+ }
+
+ .col-lg-push-9 {
+ left: 75%;
+ }
+
+ .col-lg-push-8 {
+ left: 66.66666667%;
+ }
+
+ .col-lg-push-7 {
+ left: 58.33333333%;
+ }
+
+ .col-lg-push-6 {
+ left: 50%;
+ }
+
+ .col-lg-push-5 {
+ left: 41.66666667%;
+ }
+
+ .col-lg-push-4 {
+ left: 33.33333333%;
+ }
+
+ .col-lg-push-3 {
+ left: 25%;
+ }
+
+ .col-lg-push-2 {
+ left: 16.66666667%;
+ }
+
+ .col-lg-push-1 {
+ left: 8.33333333%;
+ }
+
+ .col-lg-push-0 {
+ left: auto;
+ }
+
+ .col-lg-offset-12 {
+ margin-left: 100%;
+ }
+
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%;
+ }
+
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%;
+ }
+
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%;
+ }
+
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%;
+ }
+
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%;
+ }
+
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%;
+ }
+
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%;
+ }
+
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%;
+ }
+
+ .col-lg-offset-0 {
+ margin-left: 0;
+ }
+}
+
+table {
+ background-color: transparent;
+}
+
+caption {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ color: #777;
+ text-align: left;
+}
+
+th {
+ text-align: left;
+}
+
+.table {
+ width: 100%;
+ max-width: 100%;
+ margin-bottom: 20px;
+}
+
+.table>tbody>tr>td,
+.table>tbody>tr>th,
+.table>tfoot>tr>td,
+.table>tfoot>tr>th,
+.table>thead>tr>td,
+.table>thead>tr>th {
+ padding: 8px;
+ line-height: 1.42857143;
+ vertical-align: top;
+ border-top: 1px solid #ddd;
+}
+
+.table>thead>tr>th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #ddd;
+}
+
+.table>caption+thead>tr:first-child>td,
+.table>caption+thead>tr:first-child>th,
+.table>colgroup+thead>tr:first-child>td,
+.table>colgroup+thead>tr:first-child>th,
+.table>thead:first-child>tr:first-child>td,
+.table>thead:first-child>tr:first-child>th {
+ border-top: 0;
+}
+
+.table>tbody+tbody {
+ border-top: 2px solid #ddd;
+}
+
+.table .table {
+ background-color: #fff;
+}
+
+.table-condensed>tbody>tr>td,
+.table-condensed>tbody>tr>th,
+.table-condensed>tfoot>tr>td,
+.table-condensed>tfoot>tr>th,
+.table-condensed>thead>tr>td,
+.table-condensed>thead>tr>th {
+ padding: 5px;
+}
+
+.table-bordered {
+ border: 1px solid #ddd;
+}
+
+.table-bordered>tbody>tr>td,
+.table-bordered>tbody>tr>th,
+.table-bordered>tfoot>tr>td,
+.table-bordered>tfoot>tr>th,
+.table-bordered>thead>tr>td,
+.table-bordered>thead>tr>th {
+ border: 1px solid #ddd;
+}
+
+.table-bordered>thead>tr>td,
+.table-bordered>thead>tr>th {
+ border-bottom-width: 2px;
+}
+
+.table-striped>tbody>tr:nth-of-type(odd) {
+ background-color: #f9f9f9;
+}
+
+.table-hover>tbody>tr:hover {
+ background-color: #f5f5f5;
+}
+
+table col[class*=col-] {
+ position: static;
+ display: table-column;
+ float: none;
+}
+
+table td[class*=col-],
+table th[class*=col-] {
+ position: static;
+ display: table-cell;
+ float: none;
+}
+
+.table>tbody>tr.active>td,
+.table>tbody>tr.active>th,
+.table>tbody>tr>td.active,
+.table>tbody>tr>th.active,
+.table>tfoot>tr.active>td,
+.table>tfoot>tr.active>th,
+.table>tfoot>tr>td.active,
+.table>tfoot>tr>th.active,
+.table>thead>tr.active>td,
+.table>thead>tr.active>th,
+.table>thead>tr>td.active,
+.table>thead>tr>th.active {
+ background-color: #f5f5f5;
+}
+
+.table-hover>tbody>tr.active:hover>td,
+.table-hover>tbody>tr.active:hover>th,
+.table-hover>tbody>tr:hover>.active,
+.table-hover>tbody>tr>td.active:hover,
+.table-hover>tbody>tr>th.active:hover {
+ background-color: #e8e8e8;
+}
+
+.table>tbody>tr.success>td,
+.table>tbody>tr.success>th,
+.table>tbody>tr>td.success,
+.table>tbody>tr>th.success,
+.table>tfoot>tr.success>td,
+.table>tfoot>tr.success>th,
+.table>tfoot>tr>td.success,
+.table>tfoot>tr>th.success,
+.table>thead>tr.success>td,
+.table>thead>tr.success>th,
+.table>thead>tr>td.success,
+.table>thead>tr>th.success {
+ background-color: #dff0d8;
+}
+
+.table-hover>tbody>tr.success:hover>td,
+.table-hover>tbody>tr.success:hover>th,
+.table-hover>tbody>tr:hover>.success,
+.table-hover>tbody>tr>td.success:hover,
+.table-hover>tbody>tr>th.success:hover {
+ background-color: #d0e9c6;
+}
+
+.table>tbody>tr.info>td,
+.table>tbody>tr.info>th,
+.table>tbody>tr>td.info,
+.table>tbody>tr>th.info,
+.table>tfoot>tr.info>td,
+.table>tfoot>tr.info>th,
+.table>tfoot>tr>td.info,
+.table>tfoot>tr>th.info,
+.table>thead>tr.info>td,
+.table>thead>tr.info>th,
+.table>thead>tr>td.info,
+.table>thead>tr>th.info {
+ background-color: #d9edf7;
+}
+
+.table-hover>tbody>tr.info:hover>td,
+.table-hover>tbody>tr.info:hover>th,
+.table-hover>tbody>tr:hover>.info,
+.table-hover>tbody>tr>td.info:hover,
+.table-hover>tbody>tr>th.info:hover {
+ background-color: #c4e3f3;
+}
+
+.table>tbody>tr.warning>td,
+.table>tbody>tr.warning>th,
+.table>tbody>tr>td.warning,
+.table>tbody>tr>th.warning,
+.table>tfoot>tr.warning>td,
+.table>tfoot>tr.warning>th,
+.table>tfoot>tr>td.warning,
+.table>tfoot>tr>th.warning,
+.table>thead>tr.warning>td,
+.table>thead>tr.warning>th,
+.table>thead>tr>td.warning,
+.table>thead>tr>th.warning {
+ background-color: #fcf8e3;
+}
+
+.table-hover>tbody>tr.warning:hover>td,
+.table-hover>tbody>tr.warning:hover>th,
+.table-hover>tbody>tr:hover>.warning,
+.table-hover>tbody>tr>td.warning:hover,
+.table-hover>tbody>tr>th.warning:hover {
+ background-color: #faf2cc;
+}
+
+.table>tbody>tr.danger>td,
+.table>tbody>tr.danger>th,
+.table>tbody>tr>td.danger,
+.table>tbody>tr>th.danger,
+.table>tfoot>tr.danger>td,
+.table>tfoot>tr.danger>th,
+.table>tfoot>tr>td.danger,
+.table>tfoot>tr>th.danger,
+.table>thead>tr.danger>td,
+.table>thead>tr.danger>th,
+.table>thead>tr>td.danger,
+.table>thead>tr>th.danger {
+ background-color: #f2dede;
+}
+
+.table-hover>tbody>tr.danger:hover>td,
+.table-hover>tbody>tr.danger:hover>th,
+.table-hover>tbody>tr:hover>.danger,
+.table-hover>tbody>tr>td.danger:hover,
+.table-hover>tbody>tr>th.danger:hover {
+ background-color: #ebcccc;
+}
+
+.table-responsive {
+ min-height: .01%;
+ overflow-x: auto;
+}
+
+@media screen and (max-width:767px) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-y: hidden;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid #ddd;
+ }
+
+ .table-responsive>.table {
+ margin-bottom: 0;
+ }
+
+ .table-responsive>.table>tbody>tr>td,
+ .table-responsive>.table>tbody>tr>th,
+ .table-responsive>.table>tfoot>tr>td,
+ .table-responsive>.table>tfoot>tr>th,
+ .table-responsive>.table>thead>tr>td,
+ .table-responsive>.table>thead>tr>th {
+ white-space: nowrap;
+ }
+
+ .table-responsive>.table-bordered {
+ border: 0;
+ }
+
+ .table-responsive>.table-bordered>tbody>tr>td:first-child,
+ .table-responsive>.table-bordered>tbody>tr>th:first-child,
+ .table-responsive>.table-bordered>tfoot>tr>td:first-child,
+ .table-responsive>.table-bordered>tfoot>tr>th:first-child,
+ .table-responsive>.table-bordered>thead>tr>td:first-child,
+ .table-responsive>.table-bordered>thead>tr>th:first-child {
+ border-left: 0;
+ }
+
+ .table-responsive>.table-bordered>tbody>tr>td:last-child,
+ .table-responsive>.table-bordered>tbody>tr>th:last-child,
+ .table-responsive>.table-bordered>tfoot>tr>td:last-child,
+ .table-responsive>.table-bordered>tfoot>tr>th:last-child,
+ .table-responsive>.table-bordered>thead>tr>td:last-child,
+ .table-responsive>.table-bordered>thead>tr>th:last-child {
+ border-right: 0;
+ }
+
+ .table-responsive>.table-bordered>tbody>tr:last-child>td,
+ .table-responsive>.table-bordered>tbody>tr:last-child>th,
+ .table-responsive>.table-bordered>tfoot>tr:last-child>td,
+ .table-responsive>.table-bordered>tfoot>tr:last-child>th {
+ border-bottom: 0;
+ }
+}
+
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: inherit;
+ color: #333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+label {
+ display: inline-block;
+ max-width: 100%;
+ margin-bottom: 5px;
+ font-weight: 700;
+}
+
+input[type=search] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+input[type=checkbox],
+input[type=radio] {
+ margin: 4px 0 0;
+ margin-top: 1px\9;
+ line-height: normal;
+}
+
+input[type=file] {
+ display: block;
+}
+
+input[type=range] {
+ display: block;
+ width: 100%;
+}
+
+select[multiple],
+select[size] {
+ height: auto;
+}
+
+input[type=file]:focus,
+input[type=checkbox]:focus,
+input[type=radio]:focus {
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+output {
+ display: block;
+ padding-top: 7px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+}
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+ -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
+ -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
+}
+
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);
+}
+
+.form-control::-moz-placeholder {
+ color: #999;
+ opacity: 1;
+}
+
+.form-control:-ms-input-placeholder {
+ color: #999;
+}
+
+.form-control::-webkit-input-placeholder {
+ color: #999;
+}
+
+.form-control::-ms-expand {
+ background-color: transparent;
+ border: 0;
+}
+
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+ background-color: #eee;
+ opacity: 1;
+}
+
+.form-control[disabled],
+fieldset[disabled] .form-control {
+ cursor: not-allowed;
+}
+
+textarea.form-control {
+ height: auto;
+}
+
+input[type=search] {
+ -webkit-appearance: none;
+}
+
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+ input[type=date].form-control,
+ input[type=time].form-control,
+ input[type=datetime-local].form-control,
+ input[type=month].form-control {
+ line-height: 34px;
+ }
+
+ .input-group-sm input[type=date],
+ .input-group-sm input[type=time],
+ .input-group-sm input[type=datetime-local],
+ .input-group-sm input[type=month],
+ input[type=date].input-sm,
+ input[type=time].input-sm,
+ input[type=datetime-local].input-sm,
+ input[type=month].input-sm {
+ line-height: 30px;
+ }
+
+ .input-group-lg input[type=date],
+ .input-group-lg input[type=time],
+ .input-group-lg input[type=datetime-local],
+ .input-group-lg input[type=month],
+ input[type=date].input-lg,
+ input[type=time].input-lg,
+ input[type=datetime-local].input-lg,
+ input[type=month].input-lg {
+ line-height: 46px;
+ }
+}
+
+.form-group {
+ margin-bottom: 15px;
+}
+
+.checkbox,
+.radio {
+ position: relative;
+ display: block;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.checkbox label,
+.radio label {
+ min-height: 20px;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: 400;
+ cursor: pointer;
+}
+
+.checkbox input[type=checkbox],
+.checkbox-inline input[type=checkbox],
+.radio input[type=radio],
+.radio-inline input[type=radio] {
+ position: absolute;
+ margin-top: 4px\9;
+ margin-left: -20px;
+}
+
+.checkbox+.checkbox,
+.radio+.radio {
+ margin-top: -5px;
+}
+
+.checkbox-inline,
+.radio-inline {
+ position: relative;
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: 400;
+ vertical-align: middle;
+ cursor: pointer;
+}
+
+.checkbox-inline+.checkbox-inline,
+.radio-inline+.radio-inline {
+ margin-top: 0;
+ margin-left: 10px;
+}
+
+fieldset[disabled] input[type=checkbox],
+fieldset[disabled] input[type=radio],
+input[type=checkbox].disabled,
+input[type=checkbox][disabled],
+input[type=radio].disabled,
+input[type=radio][disabled] {
+ cursor: not-allowed;
+}
+
+.checkbox-inline.disabled,
+.radio-inline.disabled,
+fieldset[disabled] .checkbox-inline,
+fieldset[disabled] .radio-inline {
+ cursor: not-allowed;
+}
+
+.checkbox.disabled label,
+.radio.disabled label,
+fieldset[disabled] .checkbox label,
+fieldset[disabled] .radio label {
+ cursor: not-allowed;
+}
+
+.form-control-static {
+ min-height: 34px;
+ padding-top: 7px;
+ padding-bottom: 7px;
+ margin-bottom: 0;
+}
+
+.form-control-static.input-lg,
+.form-control-static.input-sm {
+ padding-right: 0;
+ padding-left: 0;
+}
+
+.input-sm {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+select.input-sm {
+ height: 30px;
+ line-height: 30px;
+}
+
+select[multiple].input-sm,
+textarea.input-sm {
+ height: auto;
+}
+
+.form-group-sm .form-control {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+.form-group-sm select.form-control {
+ height: 30px;
+ line-height: 30px;
+}
+
+.form-group-sm select[multiple].form-control,
+.form-group-sm textarea.form-control {
+ height: auto;
+}
+
+.form-group-sm .form-control-static {
+ height: 30px;
+ min-height: 32px;
+ padding: 6px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+}
+
+.input-lg {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+
+select.input-lg {
+ height: 46px;
+ line-height: 46px;
+}
+
+select[multiple].input-lg,
+textarea.input-lg {
+ height: auto;
+}
+
+.form-group-lg .form-control {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+
+.form-group-lg select.form-control {
+ height: 46px;
+ line-height: 46px;
+}
+
+.form-group-lg select[multiple].form-control,
+.form-group-lg textarea.form-control {
+ height: auto;
+}
+
+.form-group-lg .form-control-static {
+ height: 46px;
+ min-height: 38px;
+ padding: 11px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+}
+
+.has-feedback {
+ position: relative;
+}
+
+.has-feedback .form-control {
+ padding-right: 42.5px;
+}
+
+.form-control-feedback {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 2;
+ display: block;
+ width: 34px;
+ height: 34px;
+ line-height: 34px;
+ text-align: center;
+ pointer-events: none;
+}
+
+.form-group-lg .form-control+.form-control-feedback,
+.input-group-lg+.form-control-feedback,
+.input-lg+.form-control-feedback {
+ width: 46px;
+ height: 46px;
+ line-height: 46px;
+}
+
+.form-group-sm .form-control+.form-control-feedback,
+.input-group-sm+.form-control-feedback,
+.input-sm+.form-control-feedback {
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+}
+
+.has-success .checkbox,
+.has-success .checkbox-inline,
+.has-success .control-label,
+.has-success .help-block,
+.has-success .radio,
+.has-success .radio-inline,
+.has-success.checkbox label,
+.has-success.checkbox-inline label,
+.has-success.radio label,
+.has-success.radio-inline label {
+ color: #3c763d;
+}
+
+.has-success .form-control {
+ border-color: #3c763d;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+}
+
+.has-success .form-control:focus {
+ border-color: #2b542c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;
+}
+
+.has-success .input-group-addon {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #3c763d;
+}
+
+.has-success .form-control-feedback {
+ color: #3c763d;
+}
+
+.has-warning .checkbox,
+.has-warning .checkbox-inline,
+.has-warning .control-label,
+.has-warning .help-block,
+.has-warning .radio,
+.has-warning .radio-inline,
+.has-warning.checkbox label,
+.has-warning.checkbox-inline label,
+.has-warning.radio label,
+.has-warning.radio-inline label {
+ color: #8a6d3b;
+}
+
+.has-warning .form-control {
+ border-color: #8a6d3b;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+}
+
+.has-warning .form-control:focus {
+ border-color: #66512c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;
+}
+
+.has-warning .input-group-addon {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #8a6d3b;
+}
+
+.has-warning .form-control-feedback {
+ color: #8a6d3b;
+}
+
+.has-error .checkbox,
+.has-error .checkbox-inline,
+.has-error .control-label,
+.has-error .help-block,
+.has-error .radio,
+.has-error .radio-inline,
+.has-error.checkbox label,
+.has-error.checkbox-inline label,
+.has-error.radio label,
+.has-error.radio-inline label {
+ color: #a94442;
+}
+
+.has-error .form-control {
+ border-color: #a94442;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+}
+
+.has-error .form-control:focus {
+ border-color: #843534;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;
+}
+
+.has-error .input-group-addon {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #a94442;
+}
+
+.has-error .form-control-feedback {
+ color: #a94442;
+}
+
+.has-feedback label~.form-control-feedback {
+ top: 25px;
+}
+
+.has-feedback label.sr-only~.form-control-feedback {
+ top: 0;
+}
+
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: #737373;
+}
+
+@media (min-width:768px) {
+ .form-inline .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+
+ .form-inline .form-control-static {
+ display: inline-block;
+ }
+
+ .form-inline .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+
+ .form-inline .input-group .form-control,
+ .form-inline .input-group .input-group-addon,
+ .form-inline .input-group .input-group-btn {
+ width: auto;
+ }
+
+ .form-inline .input-group>.form-control {
+ width: 100%;
+ }
+
+ .form-inline .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .form-inline .checkbox,
+ .form-inline .radio {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .form-inline .checkbox label,
+ .form-inline .radio label {
+ padding-left: 0;
+ }
+
+ .form-inline .checkbox input[type=checkbox],
+ .form-inline .radio input[type=radio] {
+ position: relative;
+ margin-left: 0;
+ }
+
+ .form-inline .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+
+.form-horizontal .checkbox,
+.form-horizontal .checkbox-inline,
+.form-horizontal .radio,
+.form-horizontal .radio-inline {
+ padding-top: 7px;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.form-horizontal .checkbox,
+.form-horizontal .radio {
+ min-height: 27px;
+}
+
+.form-horizontal .form-group {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+@media (min-width:768px) {
+ .form-horizontal .control-label {
+ padding-top: 7px;
+ margin-bottom: 0;
+ text-align: right;
+ }
+}
+
+.form-horizontal .has-feedback .form-control-feedback {
+ right: 15px;
+}
+
+@media (min-width:768px) {
+ .form-horizontal .form-group-lg .control-label {
+ padding-top: 11px;
+ font-size: 18px;
+ }
+}
+
+@media (min-width:768px) {
+ .form-horizontal .form-group-sm .control-label {
+ padding-top: 6px;
+ font-size: 12px;
+ }
+}
+
+.btn {
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0;
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 1.42857143;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ -ms-touch-action: manipulation;
+ touch-action: manipulation;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.btn.active.focus,
+.btn.active:focus,
+.btn.focus,
+.btn:active.focus,
+.btn:active:focus,
+.btn:focus {
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+.btn.focus,
+.btn:focus,
+.btn:hover {
+ color: #333;
+ text-decoration: none;
+}
+
+.btn.active,
+.btn:active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,.125);
+ box-shadow: inset 0 3px 5px rgba(0,0,0,.125);
+}
+
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+ cursor: not-allowed;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ opacity: .65;
+}
+
+a.btn.disabled,
+fieldset[disabled] a.btn {
+ pointer-events: none;
+}
+
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc;
+}
+
+.btn-default.focus,
+.btn-default:focus {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #8c8c8c;
+}
+
+.btn-default:hover {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+
+.btn-default.active,
+.btn-default:active,
+.open>.dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+
+.btn-default.active.focus,
+.btn-default.active:focus,
+.btn-default.active:hover,
+.btn-default:active.focus,
+.btn-default:active:focus,
+.btn-default:active:hover,
+.open>.dropdown-toggle.btn-default.focus,
+.open>.dropdown-toggle.btn-default:focus,
+.open>.dropdown-toggle.btn-default:hover {
+ color: #333;
+ background-color: #d4d4d4;
+ border-color: #8c8c8c;
+}
+
+.btn-default.active,
+.btn-default:active,
+.open>.dropdown-toggle.btn-default {
+ background-image: none;
+}
+
+.btn-default.disabled.focus,
+.btn-default.disabled:focus,
+.btn-default.disabled:hover,
+.btn-default[disabled].focus,
+.btn-default[disabled]:focus,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default.focus,
+fieldset[disabled] .btn-default:focus,
+fieldset[disabled] .btn-default:hover {
+ background-color: #fff;
+ border-color: #ccc;
+}
+
+.btn-default .badge {
+ color: #fff;
+ background-color: #333;
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #2e6da4;
+}
+
+.btn-primary.focus,
+.btn-primary:focus {
+ color: #fff;
+ background-color: #286090;
+ border-color: #122b40;
+}
+
+.btn-primary:hover {
+ color: #fff;
+ background-color: #286090;
+ border-color: #204d74;
+}
+
+.btn-primary.active,
+.btn-primary:active,
+.open>.dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #286090;
+ border-color: #204d74;
+}
+
+.btn-primary.active.focus,
+.btn-primary.active:focus,
+.btn-primary.active:hover,
+.btn-primary:active.focus,
+.btn-primary:active:focus,
+.btn-primary:active:hover,
+.open>.dropdown-toggle.btn-primary.focus,
+.open>.dropdown-toggle.btn-primary:focus,
+.open>.dropdown-toggle.btn-primary:hover {
+ color: #fff;
+ background-color: #204d74;
+ border-color: #122b40;
+}
+
+.btn-primary.active,
+.btn-primary:active,
+.open>.dropdown-toggle.btn-primary {
+ background-image: none;
+}
+
+.btn-primary.disabled.focus,
+.btn-primary.disabled:focus,
+.btn-primary.disabled:hover,
+.btn-primary[disabled].focus,
+.btn-primary[disabled]:focus,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary.focus,
+fieldset[disabled] .btn-primary:focus,
+fieldset[disabled] .btn-primary:hover {
+ background-color: #337ab7;
+ border-color: #2e6da4;
+}
+
+.btn-primary .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+
+.btn-success.focus,
+.btn-success:focus {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #255625;
+}
+
+.btn-success:hover {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #398439;
+}
+
+.btn-success.active,
+.btn-success:active,
+.open>.dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #398439;
+}
+
+.btn-success.active.focus,
+.btn-success.active:focus,
+.btn-success.active:hover,
+.btn-success:active.focus,
+.btn-success:active:focus,
+.btn-success:active:hover,
+.open>.dropdown-toggle.btn-success.focus,
+.open>.dropdown-toggle.btn-success:focus,
+.open>.dropdown-toggle.btn-success:hover {
+ color: #fff;
+ background-color: #398439;
+ border-color: #255625;
+}
+
+.btn-success.active,
+.btn-success:active,
+.open>.dropdown-toggle.btn-success {
+ background-image: none;
+}
+
+.btn-success.disabled.focus,
+.btn-success.disabled:focus,
+.btn-success.disabled:hover,
+.btn-success[disabled].focus,
+.btn-success[disabled]:focus,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success.focus,
+fieldset[disabled] .btn-success:focus,
+fieldset[disabled] .btn-success:hover {
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff;
+}
+
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+
+.btn-info.focus,
+.btn-info:focus {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #1b6d85;
+}
+
+.btn-info:hover {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #269abc;
+}
+
+.btn-info.active,
+.btn-info:active,
+.open>.dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #269abc;
+}
+
+.btn-info.active.focus,
+.btn-info.active:focus,
+.btn-info.active:hover,
+.btn-info:active.focus,
+.btn-info:active:focus,
+.btn-info:active:hover,
+.open>.dropdown-toggle.btn-info.focus,
+.open>.dropdown-toggle.btn-info:focus,
+.open>.dropdown-toggle.btn-info:hover {
+ color: #fff;
+ background-color: #269abc;
+ border-color: #1b6d85;
+}
+
+.btn-info.active,
+.btn-info:active,
+.open>.dropdown-toggle.btn-info {
+ background-image: none;
+}
+
+.btn-info.disabled.focus,
+.btn-info.disabled:focus,
+.btn-info.disabled:hover,
+.btn-info[disabled].focus,
+.btn-info[disabled]:focus,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info.focus,
+fieldset[disabled] .btn-info:focus,
+fieldset[disabled] .btn-info:hover {
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff;
+}
+
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+
+.btn-warning.focus,
+.btn-warning:focus {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #985f0d;
+}
+
+.btn-warning:hover {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #d58512;
+}
+
+.btn-warning.active,
+.btn-warning:active,
+.open>.dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #d58512;
+}
+
+.btn-warning.active.focus,
+.btn-warning.active:focus,
+.btn-warning.active:hover,
+.btn-warning:active.focus,
+.btn-warning:active:focus,
+.btn-warning:active:hover,
+.open>.dropdown-toggle.btn-warning.focus,
+.open>.dropdown-toggle.btn-warning:focus,
+.open>.dropdown-toggle.btn-warning:hover {
+ color: #fff;
+ background-color: #d58512;
+ border-color: #985f0d;
+}
+
+.btn-warning.active,
+.btn-warning:active,
+.open>.dropdown-toggle.btn-warning {
+ background-image: none;
+}
+
+.btn-warning.disabled.focus,
+.btn-warning.disabled:focus,
+.btn-warning.disabled:hover,
+.btn-warning[disabled].focus,
+.btn-warning[disabled]:focus,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning.focus,
+fieldset[disabled] .btn-warning:focus,
+fieldset[disabled] .btn-warning:hover {
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff;
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+
+.btn-danger.focus,
+.btn-danger:focus {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #761c19;
+}
+
+.btn-danger:hover {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #ac2925;
+}
+
+.btn-danger.active,
+.btn-danger:active,
+.open>.dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #ac2925;
+}
+
+.btn-danger.active.focus,
+.btn-danger.active:focus,
+.btn-danger.active:hover,
+.btn-danger:active.focus,
+.btn-danger:active:focus,
+.btn-danger:active:hover,
+.open>.dropdown-toggle.btn-danger.focus,
+.open>.dropdown-toggle.btn-danger:focus,
+.open>.dropdown-toggle.btn-danger:hover {
+ color: #fff;
+ background-color: #ac2925;
+ border-color: #761c19;
+}
+
+.btn-danger.active,
+.btn-danger:active,
+.open>.dropdown-toggle.btn-danger {
+ background-image: none;
+}
+
+.btn-danger.disabled.focus,
+.btn-danger.disabled:focus,
+.btn-danger.disabled:hover,
+.btn-danger[disabled].focus,
+.btn-danger[disabled]:focus,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger.focus,
+fieldset[disabled] .btn-danger:focus,
+fieldset[disabled] .btn-danger:hover {
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff;
+}
+
+.btn-link {
+ font-weight: 400;
+ color: #337ab7;
+ border-radius: 0;
+}
+
+.btn-link,
+.btn-link.active,
+.btn-link:active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn-link,
+.btn-link:active,
+.btn-link:focus,
+.btn-link:hover {
+ border-color: transparent;
+}
+
+.btn-link:focus,
+.btn-link:hover {
+ color: #23527c;
+ text-decoration: underline;
+ background-color: transparent;
+}
+
+.btn-link[disabled]:focus,
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:focus,
+fieldset[disabled] .btn-link:hover {
+ color: #777;
+ text-decoration: none;
+}
+
+.btn-group-lg>.btn,
+.btn-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+
+.btn-group-sm>.btn,
+.btn-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+.btn-group-xs>.btn,
+.btn-xs {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+.btn-block {
+ display: block;
+ width: 100%;
+}
+
+.btn-block+.btn-block {
+ margin-top: 5px;
+}
+
+input[type=button].btn-block,
+input[type=reset].btn-block,
+input[type=submit].btn-block {
+ width: 100%;
+}
+
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity .15s linear;
+ -o-transition: opacity .15s linear;
+ transition: opacity .15s linear;
+}
+
+.fade.in {
+ opacity: 1;
+}
+
+.collapse {
+ display: none;
+}
+
+.collapse.in {
+ display: block;
+}
+
+tr.collapse.in {
+ display: table-row;
+}
+
+tbody.collapse.in {
+ display: table-row-group;
+}
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition-timing-function: ease;
+ -o-transition-timing-function: ease;
+ transition-timing-function: ease;
+ -webkit-transition-duration: .35s;
+ -o-transition-duration: .35s;
+ transition-duration: .35s;
+ -webkit-transition-property: height,visibility;
+ -o-transition-property: height,visibility;
+ transition-property: height,visibility;
+}
+
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px dashed;
+ border-top: 4px solid\9;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+}
+
+.dropdown,
+.dropup {
+ position: relative;
+}
+
+.dropdown-toggle:focus {
+ outline: 0;
+}
+
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 14px;
+ text-align: left;
+ list-style: none;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0,0,0,.15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0,0,0,.175);
+ box-shadow: 0 6px 12px rgba(0,0,0,.175);
+}
+
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+
+.dropdown-menu>li>a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: 400;
+ line-height: 1.42857143;
+ color: #333;
+ white-space: nowrap;
+}
+
+.dropdown-menu>li>a:focus,
+.dropdown-menu>li>a:hover {
+ color: #262626;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+
+.dropdown-menu>.active>a,
+.dropdown-menu>.active>a:focus,
+.dropdown-menu>.active>a:hover {
+ color: #fff;
+ text-decoration: none;
+ background-color: #337ab7;
+ outline: 0;
+}
+
+.dropdown-menu>.disabled>a,
+.dropdown-menu>.disabled>a:focus,
+.dropdown-menu>.disabled>a:hover {
+ color: #777;
+}
+
+.dropdown-menu>.disabled>a:focus,
+.dropdown-menu>.disabled>a:hover {
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.open>.dropdown-menu {
+ display: block;
+}
+
+.open>a {
+ outline: 0;
+}
+
+.dropdown-menu-right {
+ right: 0;
+ left: auto;
+}
+
+.dropdown-menu-left {
+ right: auto;
+ left: 0;
+}
+
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.42857143;
+ color: #777;
+ white-space: nowrap;
+}
+
+.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 {
+ content: "";
+ border-top: 0;
+ border-bottom: 4px dashed;
+ border-bottom: 4px solid\9;
+}
+
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 2px;
+}
+
+@media (min-width:768px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto;
+ }
+
+ .navbar-right .dropdown-menu-left {
+ right: auto;
+ left: 0;
+ }
+}
+
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.btn-group-vertical>.btn,
+.btn-group>.btn {
+ position: relative;
+ float: left;
+}
+
+.btn-group-vertical>.btn.active,
+.btn-group-vertical>.btn:active,
+.btn-group-vertical>.btn:focus,
+.btn-group-vertical>.btn:hover,
+.btn-group>.btn.active,
+.btn-group>.btn:active,
+.btn-group>.btn:focus,
+.btn-group>.btn:hover {
+ z-index: 2;
+}
+
+.btn-group .btn+.btn,
+.btn-group .btn+.btn-group,
+.btn-group .btn-group+.btn,
+.btn-group .btn-group+.btn-group {
+ margin-left: -1px;
+}
+
+.btn-toolbar {
+ margin-left: -5px;
+}
+
+.btn-toolbar .btn,
+.btn-toolbar .btn-group,
+.btn-toolbar .input-group {
+ float: left;
+}
+
+.btn-toolbar>.btn,
+.btn-toolbar>.btn-group,
+.btn-toolbar>.input-group {
+ margin-left: 5px;
+}
+
+.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+
+.btn-group>.btn:first-child {
+ margin-left: 0;
+}
+
+.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.btn-group>.btn:last-child:not(:first-child),
+.btn-group>.dropdown-toggle:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group>.btn-group {
+ float: left;
+}
+
+.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn {
+ border-radius: 0;
+}
+
+.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,
+.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.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-lg+.dropdown-toggle {
+ padding-right: 12px;
+ padding-left: 12px;
+}
+
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,.125);
+ box-shadow: inset 0 3px 5px rgba(0,0,0,.125);
+}
+
+.btn-group.open .dropdown-toggle.btn-link {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn .caret {
+ margin-left: 0;
+}
+
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0;
+}
+
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px;
+}
+
+.btn-group-vertical>.btn,
+.btn-group-vertical>.btn-group,
+.btn-group-vertical>.btn-group>.btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+}
+
+.btn-group-vertical>.btn-group>.btn {
+ float: none;
+}
+
+.btn-group-vertical>.btn+.btn,
+.btn-group-vertical>.btn+.btn-group,
+.btn-group-vertical>.btn-group+.btn,
+.btn-group-vertical>.btn-group+.btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+}
+
+.btn-group-vertical>.btn:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+
+.btn-group-vertical>.btn:first-child:not(:last-child) {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group-vertical>.btn:last-child:not(:first-child) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+
+.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn {
+ border-radius: 0;
+}
+
+.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,
+.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate;
+}
+
+.btn-group-justified>.btn,
+.btn-group-justified>.btn-group {
+ display: table-cell;
+ float: none;
+ width: 1%;
+}
+
+.btn-group-justified>.btn-group .btn {
+ width: 100%;
+}
+
+.btn-group-justified>.btn-group .dropdown-menu {
+ left: auto;
+}
+
+[data-toggle=buttons]>.btn input[type=checkbox],
+[data-toggle=buttons]>.btn input[type=radio],
+[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],
+[data-toggle=buttons]>.btn-group>.btn input[type=radio] {
+ position: absolute;
+ clip: rect(0,0,0,0);
+ pointer-events: none;
+}
+
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate;
+}
+
+.input-group[class*=col-] {
+ float: none;
+ padding-right: 0;
+ padding-left: 0;
+}
+
+.input-group .form-control {
+ position: relative;
+ z-index: 2;
+ float: left;
+ width: 100%;
+ margin-bottom: 0;
+}
+
+.input-group .form-control:focus {
+ z-index: 3;
+}
+
+.input-group-lg>.form-control,
+.input-group-lg>.input-group-addon,
+.input-group-lg>.input-group-btn>.btn {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+
+select.input-group-lg>.form-control,
+select.input-group-lg>.input-group-addon,
+select.input-group-lg>.input-group-btn>.btn {
+ height: 46px;
+ line-height: 46px;
+}
+
+select[multiple].input-group-lg>.form-control,
+select[multiple].input-group-lg>.input-group-addon,
+select[multiple].input-group-lg>.input-group-btn>.btn,
+textarea.input-group-lg>.form-control,
+textarea.input-group-lg>.input-group-addon,
+textarea.input-group-lg>.input-group-btn>.btn {
+ height: auto;
+}
+
+.input-group-sm>.form-control,
+.input-group-sm>.input-group-addon,
+.input-group-sm>.input-group-btn>.btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+select.input-group-sm>.form-control,
+select.input-group-sm>.input-group-addon,
+select.input-group-sm>.input-group-btn>.btn {
+ height: 30px;
+ line-height: 30px;
+}
+
+select[multiple].input-group-sm>.form-control,
+select[multiple].input-group-sm>.input-group-addon,
+select[multiple].input-group-sm>.input-group-btn>.btn,
+textarea.input-group-sm>.form-control,
+textarea.input-group-sm>.input-group-addon,
+textarea.input-group-sm>.input-group-btn>.btn {
+ height: auto;
+}
+
+.input-group .form-control,
+.input-group-addon,
+.input-group-btn {
+ display: table-cell;
+}
+
+.input-group .form-control:not(:first-child):not(:last-child),
+.input-group-addon:not(:first-child):not(:last-child),
+.input-group-btn:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 1;
+ color: #555;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px;
+}
+
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px;
+}
+
+.input-group-addon input[type=checkbox],
+.input-group-addon input[type=radio] {
+ margin-top: 0;
+}
+
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child>.btn,
+.input-group-btn:first-child>.btn-group>.btn,
+.input-group-btn:first-child>.dropdown-toggle,
+.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,
+.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.input-group-addon:first-child {
+ border-right: 0;
+}
+
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,
+.input-group-btn:first-child>.btn:not(:first-child),
+.input-group-btn:last-child>.btn,
+.input-group-btn:last-child>.btn-group>.btn,
+.input-group-btn:last-child>.dropdown-toggle {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.input-group-addon:last-child {
+ border-left: 0;
+}
+
+.input-group-btn {
+ position: relative;
+ font-size: 0;
+ white-space: nowrap;
+}
+
+.input-group-btn>.btn {
+ position: relative;
+}
+
+.input-group-btn>.btn+.btn {
+ margin-left: -1px;
+}
+
+.input-group-btn>.btn:active,
+.input-group-btn>.btn:focus,
+.input-group-btn>.btn:hover {
+ z-index: 2;
+}
+
+.input-group-btn:first-child>.btn,
+.input-group-btn:first-child>.btn-group {
+ margin-right: -1px;
+}
+
+.input-group-btn:last-child>.btn,
+.input-group-btn:last-child>.btn-group {
+ z-index: 2;
+ margin-left: -1px;
+}
+
+.nav {
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none;
+}
+
+.nav>li {
+ position: relative;
+ display: block;
+}
+
+.nav>li>a {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+}
+
+.nav>li>a:focus,
+.nav>li>a:hover {
+ text-decoration: none;
+ background-color: #eee;
+}
+
+.nav>li.disabled>a {
+ color: #777;
+}
+
+.nav>li.disabled>a:focus,
+.nav>li.disabled>a:hover {
+ color: #777;
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+}
+
+.nav .open>a,
+.nav .open>a:focus,
+.nav .open>a:hover {
+ background-color: #eee;
+ border-color: #337ab7;
+}
+
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+
+.nav>li>a>img {
+ max-width: none;
+}
+
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+
+.nav-tabs>li {
+ float: left;
+ margin-bottom: -1px;
+}
+
+.nav-tabs>li>a {
+ margin-right: 2px;
+ line-height: 1.42857143;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0;
+}
+
+.nav-tabs>li>a:hover {
+ border-color: #eee #eee #ddd;
+}
+
+.nav-tabs>li.active>a,
+.nav-tabs>li.active>a:focus,
+.nav-tabs>li.active>a:hover {
+ color: #555;
+ cursor: default;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+}
+
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0;
+}
+
+.nav-tabs.nav-justified>li {
+ float: none;
+}
+
+.nav-tabs.nav-justified>li>a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+
+.nav-tabs.nav-justified>.dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+
+@media (min-width:768px) {
+ .nav-tabs.nav-justified>li {
+ display: table-cell;
+ width: 1%;
+ }
+
+ .nav-tabs.nav-justified>li>a {
+ margin-bottom: 0;
+ }
+}
+
+.nav-tabs.nav-justified>li>a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+
+.nav-tabs.nav-justified>.active>a,
+.nav-tabs.nav-justified>.active>a:focus,
+.nav-tabs.nav-justified>.active>a:hover {
+ border: 1px solid #ddd;
+}
+
+@media (min-width:768px) {
+ .nav-tabs.nav-justified>li>a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+
+ .nav-tabs.nav-justified>.active>a,
+ .nav-tabs.nav-justified>.active>a:focus,
+ .nav-tabs.nav-justified>.active>a:hover {
+ border-bottom-color: #fff;
+ }
+}
+
+.nav-pills>li {
+ float: left;
+}
+
+.nav-pills>li>a {
+ border-radius: 4px;
+}
+
+.nav-pills>li+li {
+ margin-left: 2px;
+}
+
+.nav-pills>li.active>a,
+.nav-pills>li.active>a:focus,
+.nav-pills>li.active>a:hover {
+ color: #fff;
+ background-color: #337ab7;
+}
+
+.nav-stacked>li {
+ float: none;
+}
+
+.nav-stacked>li+li {
+ margin-top: 2px;
+ margin-left: 0;
+}
+
+.nav-justified {
+ width: 100%;
+}
+
+.nav-justified>li {
+ float: none;
+}
+
+.nav-justified>li>a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+
+.nav-justified>.dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+
+@media (min-width:768px) {
+ .nav-justified>li {
+ display: table-cell;
+ width: 1%;
+ }
+
+ .nav-justified>li>a {
+ margin-bottom: 0;
+ }
+}
+
+.nav-tabs-justified {
+ border-bottom: 0;
+}
+
+.nav-tabs-justified>li>a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+
+.nav-tabs-justified>.active>a,
+.nav-tabs-justified>.active>a:focus,
+.nav-tabs-justified>.active>a:hover {
+ border: 1px solid #ddd;
+}
+
+@media (min-width:768px) {
+ .nav-tabs-justified>li>a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+
+ .nav-tabs-justified>.active>a,
+ .nav-tabs-justified>.active>a:focus,
+ .nav-tabs-justified>.active>a:hover {
+ border-bottom-color: #fff;
+ }
+}
+
+.tab-content>.tab-pane {
+ display: none;
+}
+
+.tab-content>.active {
+ display: block;
+}
+
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.navbar {
+ position: relative;
+ min-height: 50px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+}
+
+@media (min-width:768px) {
+ .navbar {
+ border-radius: 4px;
+ }
+}
+
+@media (min-width:768px) {
+ .navbar-header {
+ float: left;
+ }
+}
+
+.navbar-collapse {
+ padding-right: 15px;
+ padding-left: 15px;
+ overflow-x: visible;
+ -webkit-overflow-scrolling: touch;
+ border-top: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+ box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+}
+
+.navbar-collapse.in {
+ overflow-y: auto;
+}
+
+@media (min-width:768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+
+ .navbar-collapse.collapse {
+ display: block!important;
+ height: auto!important;
+ padding-bottom: 0;
+ overflow: visible!important;
+ }
+
+ .navbar-collapse.in {
+ overflow-y: visible;
+ }
+
+ .navbar-fixed-bottom .navbar-collapse,
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-static-top .navbar-collapse {
+ padding-right: 0;
+ padding-left: 0;
+ }
+}
+
+.navbar-fixed-bottom .navbar-collapse,
+.navbar-fixed-top .navbar-collapse {
+ max-height: 340px;
+}
+
+@media (max-device-width:480px) and (orientation:landscape) {
+ .navbar-fixed-bottom .navbar-collapse,
+ .navbar-fixed-top .navbar-collapse {
+ max-height: 200px;
+ }
+}
+
+.container-fluid>.navbar-collapse,
+.container-fluid>.navbar-header,
+.container>.navbar-collapse,
+.container>.navbar-header {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+@media (min-width:768px) {
+ .container-fluid>.navbar-collapse,
+ .container-fluid>.navbar-header,
+ .container>.navbar-collapse,
+ .container>.navbar-header {
+ margin-right: 0;
+ margin-left: 0;
+ }
+}
+
+.navbar-static-top {
+ z-index: 1000;
+ border-width: 0 0 1px;
+}
+
+@media (min-width:768px) {
+ .navbar-static-top {
+ border-radius: 0;
+ }
+}
+
+.navbar-fixed-bottom,
+.navbar-fixed-top {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+
+@media (min-width:768px) {
+ .navbar-fixed-bottom,
+ .navbar-fixed-top {
+ border-radius: 0;
+ }
+}
+
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px;
+}
+
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0;
+ border-width: 1px 0 0;
+}
+
+.navbar-brand {
+ float: left;
+ height: 50px;
+ padding: 15px 15px;
+ font-size: 18px;
+ line-height: 20px;
+}
+
+.navbar-brand:focus,
+.navbar-brand:hover {
+ text-decoration: none;
+}
+
+.navbar-brand>img {
+ display: block;
+}
+
+@media (min-width:768px) {
+ .navbar>.container .navbar-brand,
+ .navbar>.container-fluid .navbar-brand {
+ margin-left: -15px;
+ }
+}
+
+.navbar-toggle {
+ position: relative;
+ float: right;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-right: 15px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.navbar-toggle:focus {
+ outline: 0;
+}
+
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px;
+}
+
+.navbar-toggle .icon-bar+.icon-bar {
+ margin-top: 4px;
+}
+
+@media (min-width:768px) {
+ .navbar-toggle {
+ display: none;
+ }
+}
+
+.navbar-nav {
+ margin: 7.5px -15px;
+}
+
+.navbar-nav>li>a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px;
+}
+
+@media (max-width:767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+
+ .navbar-nav .open .dropdown-menu .dropdown-header,
+ .navbar-nav .open .dropdown-menu>li>a {
+ padding: 5px 15px 5px 25px;
+ }
+
+ .navbar-nav .open .dropdown-menu>li>a {
+ line-height: 20px;
+ }
+
+ .navbar-nav .open .dropdown-menu>li>a:focus,
+ .navbar-nav .open .dropdown-menu>li>a:hover {
+ background-image: none;
+ }
+}
+
+@media (min-width:768px) {
+ .navbar-nav {
+ float: left;
+ margin: 0;
+ }
+
+ .navbar-nav>li {
+ float: left;
+ }
+
+ .navbar-nav>li>a {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ }
+}
+
+.navbar-form {
+ padding: 10px 15px;
+ margin-top: 8px;
+ margin-right: -15px;
+ margin-bottom: 8px;
+ margin-left: -15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);
+ box-shadow: inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);
+}
+
+@media (min-width:768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .navbar-form .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+
+ .navbar-form .form-control-static {
+ display: inline-block;
+ }
+
+ .navbar-form .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+
+ .navbar-form .input-group .form-control,
+ .navbar-form .input-group .input-group-addon,
+ .navbar-form .input-group .input-group-btn {
+ width: auto;
+ }
+
+ .navbar-form .input-group>.form-control {
+ width: 100%;
+ }
+
+ .navbar-form .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .navbar-form .checkbox,
+ .navbar-form .radio {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .navbar-form .checkbox label,
+ .navbar-form .radio label {
+ padding-left: 0;
+ }
+
+ .navbar-form .checkbox input[type=checkbox],
+ .navbar-form .radio input[type=radio] {
+ position: relative;
+ margin-left: 0;
+ }
+
+ .navbar-form .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+
+@media (max-width:767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px;
+ }
+
+ .navbar-form .form-group:last-child {
+ margin-bottom: 0;
+ }
+}
+
+@media (min-width:768px) {
+ .navbar-form {
+ width: auto;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+}
+
+.navbar-nav>li>.dropdown-menu {
+ margin-top: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu {
+ margin-bottom: 0;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+
+.navbar-btn.btn-sm {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.navbar-btn.btn-xs {
+ margin-top: 14px;
+ margin-bottom: 14px;
+}
+
+.navbar-text {
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+
+@media (min-width:768px) {
+ .navbar-text {
+ float: left;
+ margin-right: 15px;
+ margin-left: 15px;
+ }
+}
+
+@media (min-width:768px) {
+ .navbar-left {
+ float: left!important;
+ }
+
+ .navbar-right {
+ float: right!important;
+ margin-right: -15px;
+ }
+
+ .navbar-right~.navbar-right {
+ margin-right: 0;
+ }
+}
+
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7;
+}
+
+.navbar-default .navbar-brand {
+ color: #777;
+}
+
+.navbar-default .navbar-brand:focus,
+.navbar-default .navbar-brand:hover {
+ color: #5e5e5e;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-text {
+ color: #777;
+}
+
+.navbar-default .navbar-nav>li>a {
+ color: #777;
+}
+
+.navbar-default .navbar-nav>li>a:focus,
+.navbar-default .navbar-nav>li>a:hover {
+ color: #333;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-nav>.active>a,
+.navbar-default .navbar-nav>.active>a:focus,
+.navbar-default .navbar-nav>.active>a:hover {
+ color: #555;
+ background-color: #e7e7e7;
+}
+
+.navbar-default .navbar-nav>.disabled>a,
+.navbar-default .navbar-nav>.disabled>a:focus,
+.navbar-default .navbar-nav>.disabled>a:hover {
+ color: #ccc;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-toggle {
+ border-color: #ddd;
+}
+
+.navbar-default .navbar-toggle:focus,
+.navbar-default .navbar-toggle:hover {
+ background-color: #ddd;
+}
+
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #888;
+}
+
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+ border-color: #e7e7e7;
+}
+
+.navbar-default .navbar-nav>.open>a,
+.navbar-default .navbar-nav>.open>a:focus,
+.navbar-default .navbar-nav>.open>a:hover {
+ color: #555;
+ background-color: #e7e7e7;
+}
+
+@media (max-width:767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu>li>a {
+ color: #777;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,
+ .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover {
+ color: #333;
+ background-color: transparent;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu>.active>a,
+ .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,
+ .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover {
+ color: #555;
+ background-color: #e7e7e7;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,
+ .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,
+ .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover {
+ color: #ccc;
+ background-color: transparent;
+ }
+}
+
+.navbar-default .navbar-link {
+ color: #777;
+}
+
+.navbar-default .navbar-link:hover {
+ color: #333;
+}
+
+.navbar-default .btn-link {
+ color: #777;
+}
+
+.navbar-default .btn-link:focus,
+.navbar-default .btn-link:hover {
+ color: #333;
+}
+
+.navbar-default .btn-link[disabled]:focus,
+.navbar-default .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-default .btn-link:focus,
+fieldset[disabled] .navbar-default .btn-link:hover {
+ color: #ccc;
+}
+
+.navbar-inverse {
+ background-color: #222;
+ border-color: #080808;
+}
+
+.navbar-inverse .navbar-brand {
+ color: #9d9d9d;
+}
+
+.navbar-inverse .navbar-brand:focus,
+.navbar-inverse .navbar-brand:hover {
+ color: #fff;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-text {
+ color: #9d9d9d;
+}
+
+.navbar-inverse .navbar-nav>li>a {
+ color: #9d9d9d;
+}
+
+.navbar-inverse .navbar-nav>li>a:focus,
+.navbar-inverse .navbar-nav>li>a:hover {
+ color: #fff;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-nav>.active>a,
+.navbar-inverse .navbar-nav>.active>a:focus,
+.navbar-inverse .navbar-nav>.active>a:hover {
+ color: #fff;
+ background-color: #080808;
+}
+
+.navbar-inverse .navbar-nav>.disabled>a,
+.navbar-inverse .navbar-nav>.disabled>a:focus,
+.navbar-inverse .navbar-nav>.disabled>a:hover {
+ color: #444;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-toggle {
+ border-color: #333;
+}
+
+.navbar-inverse .navbar-toggle:focus,
+.navbar-inverse .navbar-toggle:hover {
+ background-color: #333;
+}
+
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #fff;
+}
+
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+ border-color: #101010;
+}
+
+.navbar-inverse .navbar-nav>.open>a,
+.navbar-inverse .navbar-nav>.open>a:focus,
+.navbar-inverse .navbar-nav>.open>a:hover {
+ color: #fff;
+ background-color: #080808;
+}
+
+@media (max-width:767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header {
+ border-color: #080808;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+ background-color: #080808;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu>li>a {
+ color: #9d9d9d;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,
+ .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover {
+ color: #fff;
+ background-color: transparent;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover {
+ color: #fff;
+ background-color: #080808;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover {
+ color: #444;
+ background-color: transparent;
+ }
+}
+
+.navbar-inverse .navbar-link {
+ color: #9d9d9d;
+}
+
+.navbar-inverse .navbar-link:hover {
+ color: #fff;
+}
+
+.navbar-inverse .btn-link {
+ color: #9d9d9d;
+}
+
+.navbar-inverse .btn-link:focus,
+.navbar-inverse .btn-link:hover {
+ color: #fff;
+}
+
+.navbar-inverse .btn-link[disabled]:focus,
+.navbar-inverse .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-inverse .btn-link:focus,
+fieldset[disabled] .navbar-inverse .btn-link:hover {
+ color: #444;
+}
+
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+}
+
+.breadcrumb>li {
+ display: inline-block;
+}
+
+.breadcrumb>li+li:before {
+ padding: 0 5px;
+ color: #ccc;
+ content: "/\00a0";
+}
+
+.breadcrumb>.active {
+ color: #777;
+}
+
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px;
+}
+
+.pagination>li {
+ display: inline;
+}
+
+.pagination>li>a,
+.pagination>li>span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ margin-left: -1px;
+ line-height: 1.42857143;
+ color: #337ab7;
+ text-decoration: none;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+
+.pagination>li:first-child>a,
+.pagination>li:first-child>span {
+ margin-left: 0;
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+
+.pagination>li:last-child>a,
+.pagination>li:last-child>span {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+.pagination>li>a:focus,
+.pagination>li>a:hover,
+.pagination>li>span:focus,
+.pagination>li>span:hover {
+ z-index: 2;
+ color: #23527c;
+ background-color: #eee;
+ border-color: #ddd;
+}
+
+.pagination>.active>a,
+.pagination>.active>a:focus,
+.pagination>.active>a:hover,
+.pagination>.active>span,
+.pagination>.active>span:focus,
+.pagination>.active>span:hover {
+ z-index: 3;
+ color: #fff;
+ cursor: default;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+
+.pagination>.disabled>a,
+.pagination>.disabled>a:focus,
+.pagination>.disabled>a:hover,
+.pagination>.disabled>span,
+.pagination>.disabled>span:focus,
+.pagination>.disabled>span:hover {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+ border-color: #ddd;
+}
+
+.pagination-lg>li>a,
+.pagination-lg>li>span {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+}
+
+.pagination-lg>li:first-child>a,
+.pagination-lg>li:first-child>span {
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+}
+
+.pagination-lg>li:last-child>a,
+.pagination-lg>li:last-child>span {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+
+.pagination-sm>li>a,
+.pagination-sm>li>span {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+}
+
+.pagination-sm>li:first-child>a,
+.pagination-sm>li:first-child>span {
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.pagination-sm>li:last-child>a,
+.pagination-sm>li:last-child>span {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ text-align: center;
+ list-style: none;
+}
+
+.pager li {
+ display: inline;
+}
+
+.pager li>a,
+.pager li>span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 15px;
+}
+
+.pager li>a:focus,
+.pager li>a:hover {
+ text-decoration: none;
+ background-color: #eee;
+}
+
+.pager .next>a,
+.pager .next>span {
+ float: right;
+}
+
+.pager .previous>a,
+.pager .previous>span {
+ float: left;
+}
+
+.pager .disabled>a,
+.pager .disabled>a:focus,
+.pager .disabled>a:hover,
+.pager .disabled>span {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+}
+
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: 700;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
+}
+
+a.label:focus,
+a.label:hover {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.label:empty {
+ display: none;
+}
+
+.btn .label {
+ position: relative;
+ top: -1px;
+}
+
+.label-default {
+ background-color: #777;
+}
+
+.label-default[href]:focus,
+.label-default[href]:hover {
+ background-color: #5e5e5e;
+}
+
+.label-primary {
+ background-color: #337ab7;
+}
+
+.label-primary[href]:focus,
+.label-primary[href]:hover {
+ background-color: #286090;
+}
+
+.label-success {
+ background-color: #5cb85c;
+}
+
+.label-success[href]:focus,
+.label-success[href]:hover {
+ background-color: #449d44;
+}
+
+.label-info {
+ background-color: #5bc0de;
+}
+
+.label-info[href]:focus,
+.label-info[href]:hover {
+ background-color: #31b0d5;
+}
+
+.label-warning {
+ background-color: #f0ad4e;
+}
+
+.label-warning[href]:focus,
+.label-warning[href]:hover {
+ background-color: #ec971f;
+}
+
+.label-danger {
+ background-color: #d9534f;
+}
+
+.label-danger[href]:focus,
+.label-danger[href]:hover {
+ background-color: #c9302c;
+}
+
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ font-weight: 700;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ background-color: #777;
+ border-radius: 10px;
+}
+
+.badge:empty {
+ display: none;
+}
+
+.btn .badge {
+ position: relative;
+ top: -1px;
+}
+
+.btn-group-xs>.btn .badge,
+.btn-xs .badge {
+ top: 0;
+ padding: 1px 5px;
+}
+
+a.badge:focus,
+a.badge:hover {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.list-group-item.active>.badge,
+.nav-pills>.active>a>.badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+
+.list-group-item>.badge {
+ float: right;
+}
+
+.list-group-item>.badge+.badge {
+ margin-right: 5px;
+}
+
+.nav-pills>li>a>.badge {
+ margin-left: 3px;
+}
+
+.jumbotron {
+ padding-top: 30px;
+ padding-bottom: 30px;
+ margin-bottom: 30px;
+ color: inherit;
+ background-color: #eee;
+}
+
+.jumbotron .h1,
+.jumbotron h1 {
+ color: inherit;
+}
+
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200;
+}
+
+.jumbotron>hr {
+ border-top-color: #d5d5d5;
+}
+
+.container .jumbotron,
+.container-fluid .jumbotron {
+ padding-right: 15px;
+ padding-left: 15px;
+ border-radius: 6px;
+}
+
+.jumbotron .container {
+ max-width: 100%;
+}
+
+@media screen and (min-width:768px) {
+ .jumbotron {
+ padding-top: 48px;
+ padding-bottom: 48px;
+ }
+
+ .container .jumbotron,
+ .container-fluid .jumbotron {
+ padding-right: 60px;
+ padding-left: 60px;
+ }
+
+ .jumbotron .h1,
+ .jumbotron h1 {
+ font-size: 63px;
+ }
+}
+
+.thumbnail {
+ display: block;
+ padding: 4px;
+ margin-bottom: 20px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: border .2s ease-in-out;
+ -o-transition: border .2s ease-in-out;
+ transition: border .2s ease-in-out;
+}
+
+.thumbnail a>img,
+.thumbnail>img {
+ margin-right: auto;
+ margin-left: auto;
+}
+
+a.thumbnail.active,
+a.thumbnail:focus,
+a.thumbnail:hover {
+ border-color: #337ab7;
+}
+
+.thumbnail .caption {
+ padding: 9px;
+ color: #333;
+}
+
+.alert {
+ padding: 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.alert h4 {
+ margin-top: 0;
+ color: inherit;
+}
+
+.alert .alert-link {
+ font-weight: 700;
+}
+
+.alert>p,
+.alert>ul {
+ margin-bottom: 0;
+}
+
+.alert>p+p {
+ margin-top: 5px;
+}
+
+.alert-dismissable,
+.alert-dismissible {
+ padding-right: 35px;
+}
+
+.alert-dismissable .close,
+.alert-dismissible .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+}
+
+.alert-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.alert-success hr {
+ border-top-color: #c9e2b3;
+}
+
+.alert-success .alert-link {
+ color: #2b542c;
+}
+
+.alert-info {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.alert-info hr {
+ border-top-color: #a6e1ec;
+}
+
+.alert-info .alert-link {
+ color: #245269;
+}
+
+.alert-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+
+.alert-warning hr {
+ border-top-color: #f7e1b5;
+}
+
+.alert-warning .alert-link {
+ color: #66512c;
+}
+
+.alert-danger {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+
+.alert-danger hr {
+ border-top-color: #e4b9c0;
+}
+
+.alert-danger .alert-link {
+ color: #843534;
+}
+
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+
+ to {
+ background-position: 0 0;
+ }
+}
+
+@-o-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: 20px;
+ overflow: hidden;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
+ box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
+}
+
+.progress-bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ line-height: 20px;
+ color: #fff;
+ text-align: center;
+ background-color: #337ab7;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);
+ -webkit-transition: width .6s ease;
+ -o-transition: width .6s ease;
+ transition: width .6s ease;
+}
+
+.progress-bar-striped,
+.progress-striped .progress-bar {
+ background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+ background-image: -o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+ background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+ -webkit-background-size: 40px 40px;
+ background-size: 40px 40px;
+}
+
+.progress-bar.active,
+.progress.active .progress-bar {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -o-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+
+.progress-bar-success {
+ background-color: #5cb85c;
+}
+
+.progress-striped .progress-bar-success {
+ background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+ background-image: -o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+ background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+}
+
+.progress-bar-info {
+ background-color: #5bc0de;
+}
+
+.progress-striped .progress-bar-info {
+ background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+ background-image: -o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+ background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+}
+
+.progress-bar-warning {
+ background-color: #f0ad4e;
+}
+
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+ background-image: -o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+ background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+}
+
+.progress-bar-danger {
+ background-color: #d9534f;
+}
+
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+ background-image: -o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+ background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+}
+
+.media {
+ margin-top: 15px;
+}
+
+.media:first-child {
+ margin-top: 0;
+}
+
+.media,
+.media-body {
+ overflow: hidden;
+ zoom: 1;
+}
+
+.media-body {
+ width: 10000px;
+}
+
+.media-object {
+ display: block;
+}
+
+.media-object.img-thumbnail {
+ max-width: none;
+}
+
+.media-right,
+.media>.pull-right {
+ padding-left: 10px;
+}
+
+.media-left,
+.media>.pull-left {
+ padding-right: 10px;
+}
+
+.media-body,
+.media-left,
+.media-right {
+ display: table-cell;
+ vertical-align: top;
+}
+
+.media-middle {
+ vertical-align: middle;
+}
+
+.media-bottom {
+ vertical-align: bottom;
+}
+
+.media-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
+
+.list-group {
+ padding-left: 0;
+ margin-bottom: 20px;
+}
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+
+.list-group-item:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+
+a.list-group-item,
+button.list-group-item {
+ color: #555;
+}
+
+a.list-group-item .list-group-item-heading,
+button.list-group-item .list-group-item-heading {
+ color: #333;
+}
+
+a.list-group-item:focus,
+a.list-group-item:hover,
+button.list-group-item:focus,
+button.list-group-item:hover {
+ color: #555;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+
+button.list-group-item {
+ width: 100%;
+ text-align: left;
+}
+
+.list-group-item.disabled,
+.list-group-item.disabled:focus,
+.list-group-item.disabled:hover {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #eee;
+}
+
+.list-group-item.disabled .list-group-item-heading,
+.list-group-item.disabled:focus .list-group-item-heading,
+.list-group-item.disabled:hover .list-group-item-heading {
+ color: inherit;
+}
+
+.list-group-item.disabled .list-group-item-text,
+.list-group-item.disabled:focus .list-group-item-text,
+.list-group-item.disabled:hover .list-group-item-text {
+ color: #777;
+}
+
+.list-group-item.active,
+.list-group-item.active:focus,
+.list-group-item.active:hover {
+ z-index: 2;
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active .list-group-item-heading>.small,
+.list-group-item.active .list-group-item-heading>small,
+.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading>.small,
+.list-group-item.active:focus .list-group-item-heading>small,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading>.small,
+.list-group-item.active:hover .list-group-item-heading>small {
+ color: inherit;
+}
+
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text {
+ color: #c7ddef;
+}
+
+.list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+}
+
+a.list-group-item-success,
+button.list-group-item-success {
+ color: #3c763d;
+}
+
+a.list-group-item-success .list-group-item-heading,
+button.list-group-item-success .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-success:focus,
+a.list-group-item-success:hover,
+button.list-group-item-success:focus,
+button.list-group-item-success:hover {
+ color: #3c763d;
+ background-color: #d0e9c6;
+}
+
+a.list-group-item-success.active,
+a.list-group-item-success.active:focus,
+a.list-group-item-success.active:hover,
+button.list-group-item-success.active,
+button.list-group-item-success.active:focus,
+button.list-group-item-success.active:hover {
+ color: #fff;
+ background-color: #3c763d;
+ border-color: #3c763d;
+}
+
+.list-group-item-info {
+ color: #31708f;
+ background-color: #d9edf7;
+}
+
+a.list-group-item-info,
+button.list-group-item-info {
+ color: #31708f;
+}
+
+a.list-group-item-info .list-group-item-heading,
+button.list-group-item-info .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-info:focus,
+a.list-group-item-info:hover,
+button.list-group-item-info:focus,
+button.list-group-item-info:hover {
+ color: #31708f;
+ background-color: #c4e3f3;
+}
+
+a.list-group-item-info.active,
+a.list-group-item-info.active:focus,
+a.list-group-item-info.active:hover,
+button.list-group-item-info.active,
+button.list-group-item-info.active:focus,
+button.list-group-item-info.active:hover {
+ color: #fff;
+ background-color: #31708f;
+ border-color: #31708f;
+}
+
+.list-group-item-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+}
+
+a.list-group-item-warning,
+button.list-group-item-warning {
+ color: #8a6d3b;
+}
+
+a.list-group-item-warning .list-group-item-heading,
+button.list-group-item-warning .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-warning:focus,
+a.list-group-item-warning:hover,
+button.list-group-item-warning:focus,
+button.list-group-item-warning:hover {
+ color: #8a6d3b;
+ background-color: #faf2cc;
+}
+
+a.list-group-item-warning.active,
+a.list-group-item-warning.active:focus,
+a.list-group-item-warning.active:hover,
+button.list-group-item-warning.active,
+button.list-group-item-warning.active:focus,
+button.list-group-item-warning.active:hover {
+ color: #fff;
+ background-color: #8a6d3b;
+ border-color: #8a6d3b;
+}
+
+.list-group-item-danger {
+ color: #a94442;
+ background-color: #f2dede;
+}
+
+a.list-group-item-danger,
+button.list-group-item-danger {
+ color: #a94442;
+}
+
+a.list-group-item-danger .list-group-item-heading,
+button.list-group-item-danger .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-danger:focus,
+a.list-group-item-danger:hover,
+button.list-group-item-danger:focus,
+button.list-group-item-danger:hover {
+ color: #a94442;
+ background-color: #ebcccc;
+}
+
+a.list-group-item-danger.active,
+a.list-group-item-danger.active:focus,
+a.list-group-item-danger.active:hover,
+button.list-group-item-danger.active,
+button.list-group-item-danger.active:focus,
+button.list-group-item-danger.active:hover {
+ color: #fff;
+ background-color: #a94442;
+ border-color: #a94442;
+}
+
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3;
+}
+
+.panel {
+ margin-bottom: 20px;
+ background-color: #fff;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,.05);
+ box-shadow: 0 1px 1px rgba(0,0,0,.05);
+}
+
+.panel-body {
+ padding: 15px;
+}
+
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.panel-heading>.dropdown .dropdown-toggle {
+ color: inherit;
+}
+
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px;
+ color: inherit;
+}
+
+.panel-title>.small,
+.panel-title>.small>a,
+.panel-title>a,
+.panel-title>small,
+.panel-title>small>a {
+ color: inherit;
+}
+
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel>.list-group,
+.panel>.panel-collapse>.list-group {
+ margin-bottom: 0;
+}
+
+.panel>.list-group .list-group-item,
+.panel>.panel-collapse>.list-group .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0;
+}
+
+.panel>.list-group:first-child .list-group-item:first-child,
+.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child {
+ border-top: 0;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.panel>.list-group:last-child .list-group-item:last-child,
+.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child {
+ border-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.panel-heading+.list-group .list-group-item:first-child {
+ border-top-width: 0;
+}
+
+.list-group+.panel-footer {
+ border-top-width: 0;
+}
+
+.panel>.panel-collapse>.table,
+.panel>.table,
+.panel>.table-responsive>.table {
+ margin-bottom: 0;
+}
+
+.panel>.panel-collapse>.table caption,
+.panel>.table caption,
+.panel>.table-responsive>.table caption {
+ padding-right: 15px;
+ padding-left: 15px;
+}
+
+.panel>.table-responsive:first-child>.table:first-child,
+.panel>.table:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,
+.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,
+.panel>.table:first-child>tbody:first-child>tr:first-child,
+.panel>.table:first-child>thead:first-child>tr:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,
+.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,
+.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,
+.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,
+.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,
+.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,
+.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,
+.panel>.table:first-child>thead:first-child>tr:first-child th:first-child {
+ border-top-left-radius: 3px;
+}
+
+.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,
+.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,
+.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,
+.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,
+.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,
+.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,
+.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,
+.panel>.table:first-child>thead:first-child>tr:first-child th:last-child {
+ border-top-right-radius: 3px;
+}
+
+.panel>.table-responsive:last-child>.table:last-child,
+.panel>.table:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,
+.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,
+.panel>.table:last-child>tbody:last-child>tr:last-child,
+.panel>.table:last-child>tfoot:last-child>tr:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,
+.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,
+.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,
+.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,
+.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,
+.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,
+.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,
+.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child {
+ border-bottom-left-radius: 3px;
+}
+
+.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,
+.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,
+.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,
+.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,
+.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,
+.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,
+.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,
+.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child {
+ border-bottom-right-radius: 3px;
+}
+
+.panel>.panel-body+.table,
+.panel>.panel-body+.table-responsive,
+.panel>.table+.panel-body,
+.panel>.table-responsive+.panel-body {
+ border-top: 1px solid #ddd;
+}
+
+.panel>.table>tbody:first-child>tr:first-child td,
+.panel>.table>tbody:first-child>tr:first-child th {
+ border-top: 0;
+}
+
+.panel>.table-bordered,
+.panel>.table-responsive>.table-bordered {
+ border: 0;
+}
+
+.panel>.table-bordered>tbody>tr>td:first-child,
+.panel>.table-bordered>tbody>tr>th:first-child,
+.panel>.table-bordered>tfoot>tr>td:first-child,
+.panel>.table-bordered>tfoot>tr>th:first-child,
+.panel>.table-bordered>thead>tr>td:first-child,
+.panel>.table-bordered>thead>tr>th:first-child,
+.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,
+.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,
+.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,
+.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,
+.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,
+.panel>.table-responsive>.table-bordered>thead>tr>th:first-child {
+ border-left: 0;
+}
+
+.panel>.table-bordered>tbody>tr>td:last-child,
+.panel>.table-bordered>tbody>tr>th:last-child,
+.panel>.table-bordered>tfoot>tr>td:last-child,
+.panel>.table-bordered>tfoot>tr>th:last-child,
+.panel>.table-bordered>thead>tr>td:last-child,
+.panel>.table-bordered>thead>tr>th:last-child,
+.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,
+.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,
+.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,
+.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,
+.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,
+.panel>.table-responsive>.table-bordered>thead>tr>th:last-child {
+ border-right: 0;
+}
+
+.panel>.table-bordered>tbody>tr:first-child>td,
+.panel>.table-bordered>tbody>tr:first-child>th,
+.panel>.table-bordered>thead>tr:first-child>td,
+.panel>.table-bordered>thead>tr:first-child>th,
+.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,
+.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,
+.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,
+.panel>.table-responsive>.table-bordered>thead>tr:first-child>th {
+ border-bottom: 0;
+}
+
+.panel>.table-bordered>tbody>tr:last-child>td,
+.panel>.table-bordered>tbody>tr:last-child>th,
+.panel>.table-bordered>tfoot>tr:last-child>td,
+.panel>.table-bordered>tfoot>tr:last-child>th,
+.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,
+.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,
+.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,
+.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th {
+ border-bottom: 0;
+}
+
+.panel>.table-responsive {
+ margin-bottom: 0;
+ border: 0;
+}
+
+.panel-group {
+ margin-bottom: 20px;
+}
+
+.panel-group .panel {
+ margin-bottom: 0;
+ border-radius: 4px;
+}
+
+.panel-group .panel+.panel {
+ margin-top: 5px;
+}
+
+.panel-group .panel-heading {
+ border-bottom: 0;
+}
+
+.panel-group .panel-heading+.panel-collapse>.list-group,
+.panel-group .panel-heading+.panel-collapse>.panel-body {
+ border-top: 1px solid #ddd;
+}
+
+.panel-group .panel-footer {
+ border-top: 0;
+}
+
+.panel-group .panel-footer+.panel-collapse .panel-body {
+ border-bottom: 1px solid #ddd;
+}
+
+.panel-default {
+ border-color: #ddd;
+}
+
+.panel-default>.panel-heading {
+ color: #333;
+ background-color: #f5f5f5;
+ border-color: #ddd;
+}
+
+.panel-default>.panel-heading+.panel-collapse>.panel-body {
+ border-top-color: #ddd;
+}
+
+.panel-default>.panel-heading .badge {
+ color: #f5f5f5;
+ background-color: #333;
+}
+
+.panel-default>.panel-footer+.panel-collapse>.panel-body {
+ border-bottom-color: #ddd;
+}
+
+.panel-primary {
+ border-color: #337ab7;
+}
+
+.panel-primary>.panel-heading {
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+
+.panel-primary>.panel-heading+.panel-collapse>.panel-body {
+ border-top-color: #337ab7;
+}
+
+.panel-primary>.panel-heading .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+
+.panel-primary>.panel-footer+.panel-collapse>.panel-body {
+ border-bottom-color: #337ab7;
+}
+
+.panel-success {
+ border-color: #d6e9c6;
+}
+
+.panel-success>.panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.panel-success>.panel-heading+.panel-collapse>.panel-body {
+ border-top-color: #d6e9c6;
+}
+
+.panel-success>.panel-heading .badge {
+ color: #dff0d8;
+ background-color: #3c763d;
+}
+
+.panel-success>.panel-footer+.panel-collapse>.panel-body {
+ border-bottom-color: #d6e9c6;
+}
+
+.panel-info {
+ border-color: #bce8f1;
+}
+
+.panel-info>.panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.panel-info>.panel-heading+.panel-collapse>.panel-body {
+ border-top-color: #bce8f1;
+}
+
+.panel-info>.panel-heading .badge {
+ color: #d9edf7;
+ background-color: #31708f;
+}
+
+.panel-info>.panel-footer+.panel-collapse>.panel-body {
+ border-bottom-color: #bce8f1;
+}
+
+.panel-warning {
+ border-color: #faebcc;
+}
+
+.panel-warning>.panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+
+.panel-warning>.panel-heading+.panel-collapse>.panel-body {
+ border-top-color: #faebcc;
+}
+
+.panel-warning>.panel-heading .badge {
+ color: #fcf8e3;
+ background-color: #8a6d3b;
+}
+
+.panel-warning>.panel-footer+.panel-collapse>.panel-body {
+ border-bottom-color: #faebcc;
+}
+
+.panel-danger {
+ border-color: #ebccd1;
+}
+
+.panel-danger>.panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+
+.panel-danger>.panel-heading+.panel-collapse>.panel-body {
+ border-top-color: #ebccd1;
+}
+
+.panel-danger>.panel-heading .badge {
+ color: #f2dede;
+ background-color: #a94442;
+}
+
+.panel-danger>.panel-footer+.panel-collapse>.panel-body {
+ border-bottom-color: #ebccd1;
+}
+
+.embed-responsive {
+ position: relative;
+ display: block;
+ height: 0;
+ padding: 0;
+ overflow: hidden;
+}
+
+.embed-responsive .embed-responsive-item,
+.embed-responsive embed,
+.embed-responsive iframe,
+.embed-responsive object,
+.embed-responsive video {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
+}
+
+.embed-responsive-16by9 {
+ padding-bottom: 56.25%;
+}
+
+.embed-responsive-4by3 {
+ padding-bottom: 75%;
+}
+
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
+}
+
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0,0,0,.15);
+}
+
+.well-lg {
+ padding: 24px;
+ border-radius: 6px;
+}
+
+.well-sm {
+ padding: 9px;
+ border-radius: 3px;
+}
+
+.close {
+ float: right;
+ font-size: 21px;
+ font-weight: 700;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ filter: alpha(opacity=20);
+ opacity: .2;
+}
+
+.close:focus,
+.close:hover {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+
+button.close {
+ -webkit-appearance: none;
+ padding: 0;
+ cursor: pointer;
+ background: 0 0;
+ border: 0;
+}
+
+.modal-open {
+ overflow: hidden;
+}
+
+.modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1050;
+ display: none;
+ overflow: hidden;
+ -webkit-overflow-scrolling: touch;
+ outline: 0;
+}
+
+.modal.fade .modal-dialog {
+ -webkit-transition: -webkit-transform .3s ease-out;
+ -o-transition: -o-transform .3s ease-out;
+ transition: transform .3s ease-out;
+ -webkit-transform: translate(0,-25%);
+ -ms-transform: translate(0,-25%);
+ -o-transform: translate(0,-25%);
+ transform: translate(0,-25%);
+}
+
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0,0);
+ -ms-transform: translate(0,0);
+ -o-transform: translate(0,0);
+ transform: translate(0,0);
+}
+
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
+}
+
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border: 1px solid rgba(0,0,0,.2);
+ border-radius: 6px;
+ outline: 0;
+ -webkit-box-shadow: 0 3px 9px rgba(0,0,0,.5);
+ box-shadow: 0 3px 9px rgba(0,0,0,.5);
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #000;
+}
+
+.modal-backdrop.fade {
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+
+.modal-backdrop.in {
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+
+.modal-header {
+ padding: 15px;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+.modal-header .close {
+ margin-top: -2px;
+}
+
+.modal-title {
+ margin: 0;
+ line-height: 1.42857143;
+}
+
+.modal-body {
+ position: relative;
+ padding: 15px;
+}
+
+.modal-footer {
+ padding: 15px;
+ text-align: right;
+ border-top: 1px solid #e5e5e5;
+}
+
+.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;
+}
+
+.modal-scrollbar-measure {
+ position: absolute;
+ top: -9999px;
+ width: 50px;
+ height: 50px;
+ overflow: scroll;
+}
+
+@media (min-width:768px) {
+ .modal-dialog {
+ width: 600px;
+ margin: 30px auto;
+ }
+
+ .modal-content {
+ -webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5);
+ box-shadow: 0 5px 15px rgba(0,0,0,.5);
+ }
+
+ .modal-sm {
+ width: 300px;
+ }
+}
+
+@media (min-width:992px) {
+ .modal-lg {
+ width: 900px;
+ }
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1070;
+ display: block;
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+ font-size: 12px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.42857143;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ word-wrap: normal;
+ white-space: normal;
+ filter: alpha(opacity=0);
+ opacity: 0;
+ line-break: auto;
+}
+
+.tooltip.in {
+ filter: alpha(opacity=90);
+ opacity: .9;
+}
+
+.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: 3px 8px;
+ color: #fff;
+ text-align: center;
+ background-color: #000;
+ border-radius: 4px;
+}
+
+.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-width: 5px 5px 0;
+ border-top-color: #000;
+}
+
+.tooltip.top-left .tooltip-arrow {
+ right: 5px;
+ bottom: 0;
+ margin-bottom: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+
+.tooltip.top-right .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ margin-bottom: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-width: 5px 5px 5px 0;
+ border-right-color: #000;
+}
+
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-width: 5px 0 5px 5px;
+ border-left-color: #000;
+}
+
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+
+.tooltip.bottom-left .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ margin-top: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+
+.tooltip.bottom-right .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ margin-top: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1060;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.42857143;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ word-wrap: normal;
+ white-space: normal;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0,0,0,.2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
+ box-shadow: 0 5px 10px rgba(0,0,0,.2);
+ line-break: auto;
+}
+
+.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: 14px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0;
+}
+
+.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 {
+ content: "";
+ border-width: 10px;
+}
+
+.popover.top>.arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999;
+ border-top-color: rgba(0,0,0,.25);
+ border-bottom-width: 0;
+}
+
+.popover.top>.arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-color: #fff;
+ border-bottom-width: 0;
+}
+
+.popover.right>.arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999;
+ border-right-color: rgba(0,0,0,.25);
+ border-left-width: 0;
+}
+
+.popover.right>.arrow:after {
+ bottom: -10px;
+ left: 1px;
+ content: " ";
+ border-right-color: #fff;
+ border-left-width: 0;
+}
+
+.popover.bottom>.arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-width: 0;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0,0,0,.25);
+}
+
+.popover.bottom>.arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-width: 0;
+ border-bottom-color: #fff;
+}
+
+.popover.left>.arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-right-width: 0;
+ border-left-color: #999;
+ border-left-color: rgba(0,0,0,.25);
+}
+
+.popover.left>.arrow:after {
+ right: 1px;
+ bottom: -10px;
+ content: " ";
+ border-right-width: 0;
+ border-left-color: #fff;
+}
+
+.carousel {
+ position: relative;
+}
+
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+}
+
+.carousel-inner>.item {
+ position: relative;
+ display: none;
+ -webkit-transition: .6s ease-in-out left;
+ -o-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left;
+}
+
+.carousel-inner>.item>a>img,
+.carousel-inner>.item>img {
+ line-height: 1;
+}
+
+@media all and (transform-3d),(-webkit-transform-3d) {
+ .carousel-inner>.item {
+ -webkit-transition: -webkit-transform .6s ease-in-out;
+ -o-transition: -o-transform .6s ease-in-out;
+ transition: transform .6s ease-in-out;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-perspective: 1000px;
+ perspective: 1000px;
+ }
+
+ .carousel-inner>.item.active.right,
+ .carousel-inner>.item.next {
+ left: 0;
+ -webkit-transform: translate3d(100%,0,0);
+ transform: translate3d(100%,0,0);
+ }
+
+ .carousel-inner>.item.active.left,
+ .carousel-inner>.item.prev {
+ left: 0;
+ -webkit-transform: translate3d(-100%,0,0);
+ transform: translate3d(-100%,0,0);
+ }
+
+ .carousel-inner>.item.active,
+ .carousel-inner>.item.next.left,
+ .carousel-inner>.item.prev.right {
+ left: 0;
+ -webkit-transform: translate3d(0,0,0);
+ transform: translate3d(0,0,0);
+ }
+}
+
+.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: 0;
+ bottom: 0;
+ left: 0;
+ width: 15%;
+ font-size: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0,0,0,.6);
+ background-color: rgba(0,0,0,0);
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+
+.carousel-control.left {
+ background-image: -webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);
+ background-image: -o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);
+ background-image: -webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));
+ background-image: linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+
+.carousel-control.right {
+ right: 0;
+ left: auto;
+ background-image: -webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);
+ background-image: -o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);
+ background-image: -webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));
+ background-image: linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+
+.carousel-control:focus,
+.carousel-control:hover {
+ color: #fff;
+ text-decoration: none;
+ filter: alpha(opacity=90);
+ outline: 0;
+ opacity: .9;
+}
+
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .glyphicon-chevron-right,
+.carousel-control .icon-next,
+.carousel-control .icon-prev {
+ position: absolute;
+ top: 50%;
+ z-index: 5;
+ display: inline-block;
+ margin-top: -10px;
+}
+
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .icon-prev {
+ left: 50%;
+ margin-left: -10px;
+}
+
+.carousel-control .glyphicon-chevron-right,
+.carousel-control .icon-next {
+ right: 50%;
+ margin-right: -10px;
+}
+
+.carousel-control .icon-next,
+.carousel-control .icon-prev {
+ width: 20px;
+ height: 20px;
+ font-family: serif;
+ line-height: 1;
+}
+
+.carousel-control .icon-prev:before {
+ content: '\2039';
+}
+
+.carousel-control .icon-next:before {
+ content: '\203a';
+}
+
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ padding-left: 0;
+ margin-left: -30%;
+ text-align: center;
+ list-style: none;
+}
+
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #000\9;
+ background-color: rgba(0,0,0,0);
+ border: 1px solid #fff;
+ border-radius: 10px;
+}
+
+.carousel-indicators .active {
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ background-color: #fff;
+}
+
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0,0,0,.6);
+}
+
+.carousel-caption .btn {
+ text-shadow: none;
+}
+
+@media screen and (min-width:768px) {
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-next,
+ .carousel-control .icon-prev {
+ width: 30px;
+ height: 30px;
+ margin-top: -10px;
+ font-size: 30px;
+ }
+
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .icon-prev {
+ margin-left: -10px;
+ }
+
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-next {
+ margin-right: -10px;
+ }
+
+ .carousel-caption {
+ right: 20%;
+ left: 20%;
+ padding-bottom: 30px;
+ }
+
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
+
+.btn-group-vertical>.btn-group:after,
+.btn-group-vertical>.btn-group:before,
+.btn-toolbar:after,
+.btn-toolbar:before,
+.clearfix:after,
+.clearfix:before,
+.container-fluid:after,
+.container-fluid:before,
+.container:after,
+.container:before,
+.dl-horizontal dd:after,
+.dl-horizontal dd:before,
+.form-horizontal .form-group:after,
+.form-horizontal .form-group:before,
+.modal-footer:after,
+.modal-footer:before,
+.modal-header:after,
+.modal-header:before,
+.nav:after,
+.nav:before,
+.navbar-collapse:after,
+.navbar-collapse:before,
+.navbar-header:after,
+.navbar-header:before,
+.navbar:after,
+.navbar:before,
+.pager:after,
+.pager:before,
+.panel-body:after,
+.panel-body:before,
+.row:after,
+.row:before {
+ display: table;
+ content: " ";
+}
+
+.btn-group-vertical>.btn-group:after,
+.btn-toolbar:after,
+.clearfix:after,
+.container-fluid:after,
+.container:after,
+.dl-horizontal dd:after,
+.form-horizontal .form-group:after,
+.modal-footer:after,
+.modal-header:after,
+.nav:after,
+.navbar-collapse:after,
+.navbar-header:after,
+.navbar:after,
+.pager:after,
+.panel-body:after,
+.row:after {
+ clear: both;
+}
+
+.center-block {
+ display: block;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.pull-right {
+ float: right!important;
+}
+
+.pull-left {
+ float: left!important;
+}
+
+.hide {
+ display: none!important;
+}
+
+.show {
+ display: block!important;
+}
+
+.invisible {
+ visibility: hidden;
+}
+
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+
+.hidden {
+ display: none!important;
+}
+
+.affix {
+ position: fixed;
+}
+
+@-ms-viewport {
+ width: device-width;
+}
+
+.visible-lg,
+.visible-md,
+.visible-sm,
+.visible-xs {
+ display: none!important;
+}
+
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block {
+ display: none!important;
+}
+
+@media (max-width:767px) {
+ .visible-xs {
+ display: block!important;
+ }
+
+ table.visible-xs {
+ display: table!important;
+ }
+
+ tr.visible-xs {
+ display: table-row!important;
+ }
+
+ td.visible-xs,
+ th.visible-xs {
+ display: table-cell!important;
+ }
+}
+
+@media (max-width:767px) {
+ .visible-xs-block {
+ display: block!important;
+ }
+}
+
+@media (max-width:767px) {
+ .visible-xs-inline {
+ display: inline!important;
+ }
+}
+
+@media (max-width:767px) {
+ .visible-xs-inline-block {
+ display: inline-block!important;
+ }
+}
+
+@media (min-width:768px) and (max-width:991px) {
+ .visible-sm {
+ display: block!important;
+ }
+
+ table.visible-sm {
+ display: table!important;
+ }
+
+ tr.visible-sm {
+ display: table-row!important;
+ }
+
+ td.visible-sm,
+ th.visible-sm {
+ display: table-cell!important;
+ }
+}
+
+@media (min-width:768px) and (max-width:991px) {
+ .visible-sm-block {
+ display: block!important;
+ }
+}
+
+@media (min-width:768px) and (max-width:991px) {
+ .visible-sm-inline {
+ display: inline!important;
+ }
+}
+
+@media (min-width:768px) and (max-width:991px) {
+ .visible-sm-inline-block {
+ display: inline-block!important;
+ }
+}
+
+@media (min-width:992px) and (max-width:1199px) {
+ .visible-md {
+ display: block!important;
+ }
+
+ table.visible-md {
+ display: table!important;
+ }
+
+ tr.visible-md {
+ display: table-row!important;
+ }
+
+ td.visible-md,
+ th.visible-md {
+ display: table-cell!important;
+ }
+}
+
+@media (min-width:992px) and (max-width:1199px) {
+ .visible-md-block {
+ display: block!important;
+ }
+}
+
+@media (min-width:992px) and (max-width:1199px) {
+ .visible-md-inline {
+ display: inline!important;
+ }
+}
+
+@media (min-width:992px) and (max-width:1199px) {
+ .visible-md-inline-block {
+ display: inline-block!important;
+ }
+}
+
+@media (min-width:1200px) {
+ .visible-lg {
+ display: block!important;
+ }
+
+ table.visible-lg {
+ display: table!important;
+ }
+
+ tr.visible-lg {
+ display: table-row!important;
+ }
+
+ td.visible-lg,
+ th.visible-lg {
+ display: table-cell!important;
+ }
+}
+
+@media (min-width:1200px) {
+ .visible-lg-block {
+ display: block!important;
+ }
+}
+
+@media (min-width:1200px) {
+ .visible-lg-inline {
+ display: inline!important;
+ }
+}
+
+@media (min-width:1200px) {
+ .visible-lg-inline-block {
+ display: inline-block!important;
+ }
+}
+
+@media (max-width:767px) {
+ .hidden-xs {
+ display: none!important;
+ }
+}
+
+@media (min-width:768px) and (max-width:991px) {
+ .hidden-sm {
+ display: none!important;
+ }
+}
+
+@media (min-width:992px) and (max-width:1199px) {
+ .hidden-md {
+ display: none!important;
+ }
+}
+
+@media (min-width:1200px) {
+ .hidden-lg {
+ display: none!important;
+ }
+}
+
+.visible-print {
+ display: none!important;
+}
+
+@media print {
+ .visible-print {
+ display: block!important;
+ }
+
+ table.visible-print {
+ display: table!important;
+ }
+
+ tr.visible-print {
+ display: table-row!important;
+ }
+
+ td.visible-print,
+ th.visible-print {
+ display: table-cell!important;
+ }
+}
+
+.visible-print-block {
+ display: none!important;
+}
+
+@media print {
+ .visible-print-block {
+ display: block!important;
+ }
+}
+
+.visible-print-inline {
+ display: none!important;
+}
+
+@media print {
+ .visible-print-inline {
+ display: inline!important;
+ }
+}
+
+.visible-print-inline-block {
+ display: none!important;
+}
+
+@media print {
+ .visible-print-inline-block {
+ display: inline-block!important;
+ }
+}
+
+@media print {
+ .hidden-print {
+ display: none!important;
+ }
+}
+
+/*# sourceMappingURL=bootstrap.min.css.map */
+.bootstrap-dialog .modal-header {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+
+.bootstrap-dialog .bootstrap-dialog-title {
+ color: #fff;
+ display: inline-block;
+ font-size: 16px;
+}
+
+.bootstrap-dialog .bootstrap-dialog-message {
+ font-size: 14px;
+}
+
+.bootstrap-dialog .bootstrap-dialog-button-icon {
+ margin-right: 3px;
+}
+
+.bootstrap-dialog .bootstrap-dialog-close-button {
+ font-size: 20px;
+ float: right;
+ opacity: .9;
+ filter: alpha(opacity=90);
+}
+
+.bootstrap-dialog .bootstrap-dialog-close-button:hover {
+ cursor: pointer;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.bootstrap-dialog.type-default .modal-header {
+ background-color: #fff;
+}
+
+.bootstrap-dialog.type-default .bootstrap-dialog-title {
+ color: #333;
+}
+
+.bootstrap-dialog.type-info .modal-header {
+ background-color: #5bc0de;
+}
+
+.bootstrap-dialog.type-primary .modal-header {
+ background-color: #337ab7;
+}
+
+.bootstrap-dialog.type-success .modal-header {
+ background-color: #5cb85c;
+}
+
+.bootstrap-dialog.type-warning .modal-header {
+ background-color: #f0ad4e;
+}
+
+.bootstrap-dialog.type-danger .modal-header {
+ background-color: #d9534f;
+}
+
+.bootstrap-dialog.size-large .bootstrap-dialog-title {
+ font-size: 24px;
+}
+
+.bootstrap-dialog.size-large .bootstrap-dialog-close-button {
+ font-size: 30px;
+}
+
+.bootstrap-dialog.size-large .bootstrap-dialog-message {
+ font-size: 18px;
+}
+
+.bootstrap-dialog .icon-spin {
+ display: inline-block;
+ -moz-animation: spin 2s infinite linear;
+ -o-animation: spin 2s infinite linear;
+ -webkit-animation: spin 2s infinite linear;
+ animation: spin 2s infinite linear;
+}
+
+@-moz-keyframes spin {
+ 0% {
+ -moz-transform: rotate(0deg);
+ }
+
+ 100% {
+ -moz-transform: rotate(359deg);
+ }
+}
+
+@-webkit-keyframes spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ }
+
+ 100% {
+ -webkit-transform: rotate(359deg);
+ }
+}
+
+@-o-keyframes spin {
+ 0% {
+ -o-transform: rotate(0deg);
+ }
+
+ 100% {
+ -o-transform: rotate(359deg);
+ }
+}
+
+@-ms-keyframes spin {
+ 0% {
+ -ms-transform: rotate(0deg);
+ }
+
+ 100% {
+ -ms-transform: rotate(359deg);
+ }
+}
+
+@keyframes spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+
+ 100% {
+ transform: rotate(359deg);
+ }
+}
+/*!
+ * Stylesheet for the Date Range Picker, for use with Bootstrap 3.x
+ *
+ * Copyright 2013 Dan Grossman ( http://www.dangrossman.info )
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Built for http://www.improvely.com
+ */
+
+.daterangepicker.dropdown-menu {
+ max-width: none;
+ z-index: 3000;
+}
+
+.daterangepicker.opensleft .ranges,
+.daterangepicker.opensleft .calendar {
+ float: left;
+ margin: 4px;
+}
+
+.daterangepicker.opensright .ranges,
+.daterangepicker.opensright .calendar {
+ float: right;
+ margin: 4px;
+}
+
+.daterangepicker .ranges {
+ width: 160px;
+ text-align: left;
+}
+
+.daterangepicker .ranges .range_inputs>div {
+ float: left;
+}
+
+.daterangepicker .ranges .range_inputs>div:nth-child(2) {
+ padding-left: 11px;
+}
+
+.daterangepicker .calendar {
+ display: none;
+ max-width: 270px;
+}
+
+.daterangepicker.show-calendar .calendar {
+ display: block;
+}
+
+.daterangepicker .calendar.single .calendar-date {
+ border: none;
+}
+
+.daterangepicker .calendar th,
+.daterangepicker .calendar td {
+ font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
+ white-space: nowrap;
+ text-align: center;
+ min-width: 32px;
+}
+
+.daterangepicker .daterangepicker_start_input label,
+.daterangepicker .daterangepicker_end_input label {
+ color: #333;
+ display: block;
+ font-size: 11px;
+ font-weight: normal;
+ height: 20px;
+ line-height: 20px;
+ margin-bottom: 2px;
+ text-shadow: #fff 1px 1px 0px;
+ text-transform: uppercase;
+ width: 74px;
+}
+
+.daterangepicker .ranges input {
+ font-size: 11px;
+}
+
+.daterangepicker .ranges .input-mini {
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ color: #555;
+ display: block;
+ font-size: 11px;
+ height: 30px;
+ line-height: 30px;
+ vertical-align: middle;
+ margin: 0 0 10px 0;
+ padding: 0 6px;
+ width: 74px;
+}
+
+.daterangepicker .ranges ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+.daterangepicker .ranges li {
+ font-size: 13px;
+ background: #f5f5f5;
+ border: 1px solid #f5f5f5;
+ color: #08c;
+ padding: 3px 12px;
+ margin-bottom: 8px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ cursor: pointer;
+}
+
+.daterangepicker .ranges li.active,
+.daterangepicker .ranges li:hover {
+ background: #08c;
+ border: 1px solid #08c;
+ color: #fff;
+}
+
+.daterangepicker .calendar-date {
+ border: 1px solid #ddd;
+ padding: 4px;
+ border-radius: 4px;
+ background: #fff;
+}
+
+.daterangepicker .calendar-time {
+ text-align: center;
+ margin: 8px auto 0 auto;
+ line-height: 30px;
+}
+
+.daterangepicker {
+ position: absolute;
+ background: #fff;
+ top: 100px;
+ left: 20px;
+ padding: 4px;
+ margin-top: 1px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.daterangepicker.opensleft:before {
+ position: absolute;
+ top: -7px;
+ right: 9px;
+ display: inline-block;
+ border-right: 7px solid transparent;
+ border-bottom: 7px solid #ccc;
+ border-left: 7px solid transparent;
+ border-bottom-color: rgba(0, 0, 0, 0.2);
+ content: '';
+}
+
+.daterangepicker.opensleft:after {
+ position: absolute;
+ top: -6px;
+ right: 10px;
+ display: inline-block;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid #fff;
+ border-left: 6px solid transparent;
+ content: '';
+}
+
+.daterangepicker.opensright:before {
+ position: absolute;
+ top: -7px;
+ left: 9px;
+ display: inline-block;
+ border-right: 7px solid transparent;
+ border-bottom: 7px solid #ccc;
+ border-left: 7px solid transparent;
+ border-bottom-color: rgba(0, 0, 0, 0.2);
+ content: '';
+}
+
+.daterangepicker.opensright:after {
+ position: absolute;
+ top: -6px;
+ left: 10px;
+ display: inline-block;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid #fff;
+ border-left: 6px solid transparent;
+ content: '';
+}
+
+.daterangepicker table {
+ width: 100%;
+ margin: 0;
+}
+
+.daterangepicker td,
+.daterangepicker th {
+ text-align: center;
+ width: 20px;
+ height: 20px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ cursor: pointer;
+ white-space: nowrap;
+}
+
+.daterangepicker td.off {
+ color: #999;
+}
+
+.daterangepicker td.disabled {
+ color: #999;
+}
+
+.daterangepicker td.available:hover,
+.daterangepicker th.available:hover {
+ background: #eee;
+}
+
+.daterangepicker td.in-range {
+ background: #ebf4f8;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.daterangepicker td.available + td.start-date {
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+
+.daterangepicker td.in-range + td.end-date {
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.daterangepicker td.start-date.end-date {
+ -webkit-border-radius: 4px !important;
+ -moz-border-radius: 4px !important;
+ border-radius: 4px !important;
+}
+
+.daterangepicker td.active,
+.daterangepicker td.active:hover {
+ background-color: #357ebd;
+ border-color: #3071a9;
+ color: #fff;
+}
+
+.daterangepicker td.week,
+.daterangepicker th.week {
+ font-size: 80%;
+ color: #ccc;
+}
+
+.daterangepicker select.monthselect,
+.daterangepicker select.yearselect {
+ font-size: 12px;
+ padding: 1px;
+ height: auto;
+ margin: 0;
+ cursor: default;
+}
+
+.daterangepicker select.monthselect {
+ margin-right: 2%;
+ width: 56%;
+}
+
+.daterangepicker select.yearselect {
+ width: 40%;
+}
+
+.daterangepicker select.hourselect,
+.daterangepicker select.minuteselect,
+.daterangepicker select.ampmselect {
+ width: 50px;
+ margin-bottom: 0;
+}
+
+.daterangepicker_start_input {
+ float: left;
+}
+
+.daterangepicker_end_input {
+ float: left;
+ padding-left: 11px;
+}
+
+.daterangepicker th.month {
+ width: auto;
+}
+div.dataTables_length label {
+ font-weight: normal;
+ text-align: left;
+ white-space: nowrap;
+}
+
+div.dataTables_length select {
+ width: 75px;
+ display: inline-block;
+}
+
+div.dataTables_filter {
+ text-align: right;
+}
+
+div.dataTables_filter label {
+ font-weight: normal;
+ white-space: nowrap;
+ text-align: left;
+}
+
+div.dataTables_filter input {
+ margin-left: 0.5em;
+ display: inline-block;
+}
+
+div.dataTables_info {
+ padding-top: 8px;
+ white-space: nowrap;
+}
+
+div.dataTables_paginate {
+ margin: 0;
+ white-space: nowrap;
+ text-align: right;
+}
+
+div.dataTables_paginate ul.pagination {
+ margin: 2px 0;
+ white-space: nowrap;
+}
+
+@media screen and (max-width: 767px) {
+ div.dataTables_length,
+ div.dataTables_filter,
+ div.dataTables_info,
+ div.dataTables_paginate {
+ text-align: center;
+ }
+}
+
+table.dataTable td,
+table.dataTable th {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+table.dataTable {
+ clear: both;
+ margin-top: 6px !important;
+ margin-bottom: 6px !important;
+ max-width: none !important;
+}
+
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc,
+table.dataTable thead .sorting_asc_disabled,
+table.dataTable thead .sorting_desc_disabled {
+ cursor: pointer;
+}
+
+table.dataTable thead .sorting {
+ background: url('../images/sort_both.png') no-repeat center right;
+}
+
+table.dataTable thead .sorting_asc {
+ background: url('../images/sort_asc.png') no-repeat center right;
+}
+
+table.dataTable thead .sorting_desc {
+ background: url('../images/sort_desc.png') no-repeat center right;
+}
+
+table.dataTable thead .sorting_asc_disabled {
+ background: url('../images/sort_asc_disabled.png') no-repeat center right;
+}
+
+table.dataTable thead .sorting_desc_disabled {
+ background: url('../images/sort_desc_disabled.png') no-repeat center right;
+}
+
+table.dataTable thead > tr > th {
+ padding-left: 18px;
+ padding-right: 18px;
+}
+
+table.dataTable th:active {
+ outline: none;
+}
+
+/* Scrolling */
+
+div.dataTables_scrollHead table {
+ margin-bottom: 0 !important;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+div.dataTables_scrollHead table thead tr:last-child th:first-child,
+div.dataTables_scrollHead table thead tr:last-child td:first-child {
+ border-bottom-left-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+}
+
+div.dataTables_scrollBody table {
+ border-top: none;
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+}
+
+div.dataTables_scrollBody tbody tr:first-child th,
+div.dataTables_scrollBody tbody tr:first-child td {
+ border-top: none;
+}
+
+div.dataTables_scrollFoot table {
+ margin-top: 0 !important;
+ border-top: none;
+}
+
+/* Frustratingly the border-collapse:collapse used by Bootstrap makes the column
+ width calculations when using scrolling impossible to align columns. We have
+ to use separate
+ */
+
+table.table-bordered.dataTable {
+ border-collapse: separate !important;
+}
+
+table.table-bordered thead th,
+table.table-bordered thead td {
+ border-left-width: 0;
+ border-top-width: 0;
+}
+
+table.table-bordered tbody th,
+table.table-bordered tbody td {
+ border-left-width: 0;
+ border-bottom-width: 0;
+}
+
+table.table-bordered th:last-child,
+table.table-bordered td:last-child {
+ border-right-width: 0;
+}
+
+div.dataTables_scrollHead table.table-bordered {
+ border-bottom-width: 0;
+}
+
+/*
+ * TableTools styles
+ */
+
+.table.dataTable tbody tr.active td,
+.table.dataTable tbody tr.active th {
+ background-color: #08C;
+ color: white;
+}
+
+.table.dataTable tbody tr.active:hover td,
+.table.dataTable tbody tr.active:hover th {
+ background-color: #0075b0 !important;
+}
+
+.table.dataTable tbody tr.active th > a,
+.table.dataTable tbody tr.active td > a {
+ color: white;
+}
+
+.table-striped.dataTable tbody tr.active:nth-child(odd) td,
+.table-striped.dataTable tbody tr.active:nth-child(odd) th {
+ background-color: #017ebc;
+}
+
+table.DTTT_selectable tbody tr {
+ cursor: pointer;
+}
+
+div.DTTT .btn:hover {
+ text-decoration: none !important;
+}
+
+ul.DTTT_dropdown.dropdown-menu {
+ z-index: 2003;
+}
+
+ul.DTTT_dropdown.dropdown-menu a {
+ color: #333 !important;
+ /* needed only when demo_page.css is included */
+}
+
+ul.DTTT_dropdown.dropdown-menu li {
+ position: relative;
+}
+
+ul.DTTT_dropdown.dropdown-menu li:hover a {
+ background-color: #0088cc;
+ color: white !important;
+}
+
+div.DTTT_collection_background {
+ z-index: 2002;
+}
+
+/* TableTools information display */
+
+div.DTTT_print_info {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 400px;
+ height: 150px;
+ margin-left: -200px;
+ margin-top: -75px;
+ text-align: center;
+ color: #333;
+ padding: 10px 30px;
+ opacity: 0.95;
+ background-color: white;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
+ box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
+}
+
+div.DTTT_print_info h6 {
+ font-weight: normal;
+ font-size: 28px;
+ line-height: 28px;
+ margin: 1em;
+}
+
+div.DTTT_print_info p {
+ font-size: 14px;
+ line-height: 20px;
+}
+
+div.dataTables_processing {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 100%;
+ height: 60px;
+ margin-left: -50%;
+ margin-top: -25px;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ text-align: center;
+ font-size: 1.2em;
+ background-color: white;
+ background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));
+ background: -webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+ background: -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+ background: -ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+ background: -o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+ background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+}
+
+/*
+ * FixedColumns styles
+ */
+
+div.DTFC_LeftHeadWrapper table,
+div.DTFC_LeftFootWrapper table,
+div.DTFC_RightHeadWrapper table,
+div.DTFC_RightFootWrapper table,
+table.DTFC_Cloned tr.even {
+ background-color: white;
+ margin-bottom: 0;
+}
+
+div.DTFC_RightHeadWrapper table,
+div.DTFC_LeftHeadWrapper table {
+ border-bottom: none !important;
+ margin-bottom: 0 !important;
+ border-top-right-radius: 0 !important;
+ border-bottom-left-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+}
+
+div.DTFC_RightHeadWrapper table thead tr:last-child th:first-child,
+div.DTFC_RightHeadWrapper table thead tr:last-child td:first-child,
+div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child,
+div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child {
+ border-bottom-left-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+}
+
+div.DTFC_RightBodyWrapper table,
+div.DTFC_LeftBodyWrapper table {
+ border-top: none;
+ margin: 0 !important;
+}
+
+div.DTFC_RightBodyWrapper tbody tr:first-child th,
+div.DTFC_RightBodyWrapper tbody tr:first-child td,
+div.DTFC_LeftBodyWrapper tbody tr:first-child th,
+div.DTFC_LeftBodyWrapper tbody tr:first-child td {
+ border-top: none;
+}
+
+div.DTFC_RightFootWrapper table,
+div.DTFC_LeftFootWrapper table {
+ border-top: none;
+ margin-top: 0 !important;
+}
+
+/*
+ * FixedHeader styles
+ */
+
+div.FixedHeader_Cloned table {
+ margin: 0 !important;
+}
+table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,
+table.dataTable.dtr-inline.collapsed > tbody > tr > th.child,
+table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {
+ cursor: default !important;
+}
+
+table.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,
+table.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,
+table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {
+ display: none !important;
+}
+
+table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child,
+table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child {
+ position: relative;
+ padding-left: 30px;
+ cursor: pointer;
+}
+
+table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child:before,
+table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child:before {
+ top: 8px;
+ left: 4px;
+ height: 16px;
+ width: 16px;
+ display: block;
+ position: absolute;
+ color: white;
+ border: 2px solid white;
+ border-radius: 16px;
+ box-shadow: 0 0 3px #444;
+ box-sizing: content-box;
+ text-align: left;
+ font-family: 'Courier New', Courier, monospace;
+ text-indent: 4px;
+ line-height: 16px;
+ content: '+';
+ background-color: #31b131;
+}
+
+table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td:first-child:before,
+table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th:first-child:before {
+ content: '-';
+ background-color: #d33333;
+}
+
+table.dataTable.dtr-inline.collapsed > tbody > tr.child td:before {
+ display: none;
+}
+
+table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child,
+table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child {
+ padding-left: 27px;
+}
+
+table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child:before,
+table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child:before {
+ top: 5px;
+ left: 4px;
+ height: 14px;
+ width: 14px;
+ border-radius: 14px;
+ line-height: 14px;
+ text-indent: 3px;
+}
+
+table.dataTable.dtr-column > tbody > tr > td.control,
+table.dataTable.dtr-column > tbody > tr > th.control {
+ position: relative;
+ cursor: pointer;
+}
+
+table.dataTable.dtr-column > tbody > tr > td.control:before,
+table.dataTable.dtr-column > tbody > tr > th.control:before {
+ top: 50%;
+ left: 50%;
+ height: 16px;
+ width: 16px;
+ margin-top: -10px;
+ margin-left: -10px;
+ display: block;
+ position: absolute;
+ color: white;
+ border: 2px solid white;
+ border-radius: 16px;
+ box-shadow: 0 0 3px #444;
+ box-sizing: content-box;
+ text-align: left;
+ font-family: 'Courier New', Courier, monospace;
+ text-indent: 4px;
+ line-height: 16px;
+ content: '+';
+ background-color: #31b131;
+}
+
+table.dataTable.dtr-column > tbody > tr.parent td.control:before,
+table.dataTable.dtr-column > tbody > tr.parent th.control:before {
+ content: '-';
+ background-color: #d33333;
+}
+
+table.dataTable > tbody > tr.child {
+ padding: 0.5em 1em;
+}
+
+table.dataTable > tbody > tr.child:hover {
+ background: transparent !important;
+}
+
+table.dataTable > tbody > tr.child ul {
+ display: inline-block;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+
+table.dataTable > tbody > tr.child ul li {
+ border-bottom: 1px solid #efefef;
+ padding: 0.5em 0;
+}
+
+table.dataTable > tbody > tr.child ul li:first-child {
+ padding-top: 0;
+}
+
+table.dataTable > tbody > tr.child ul li:last-child {
+ border-bottom: none;
+}
+
+table.dataTable > tbody > tr.child span.dtr-title {
+ display: inline-block;
+ min-width: 75px;
+ font-weight: bold;
+}
+
+div.dtr-modal {
+ position: fixed;
+ box-sizing: border-box;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ z-index: 100;
+ padding: 10em 1em;
+}
+
+div.dtr-modal div.dtr-modal-display {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ width: 50%;
+ height: 50%;
+ overflow: auto;
+ margin: auto;
+ z-index: 102;
+ overflow: auto;
+ background-color: #f5f5f7;
+ border: 1px solid black;
+ border-radius: 0.5em;
+ box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);
+}
+
+div.dtr-modal div.dtr-modal-content {
+ position: relative;
+ padding: 1em;
+}
+
+div.dtr-modal div.dtr-modal-close {
+ position: absolute;
+ top: 6px;
+ right: 6px;
+ width: 22px;
+ height: 22px;
+ border: 1px solid #eaeaea;
+ background-color: #f9f9f9;
+ text-align: center;
+ border-radius: 3px;
+ cursor: pointer;
+ z-index: 12;
+}
+
+div.dtr-modal div.dtr-modal-close:hover {
+ background-color: #eaeaea;
+}
+
+div.dtr-modal div.dtr-modal-background {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 101;
+ background: rgba(0, 0, 0, 0.6);
+}
+
+@media screen and (max-width: 767px) {
+ div.dtr-modal div.dtr-modal-display {
+ width: 95%;
+ }
+}
+.select2-container {
+ box-sizing: border-box;
+ display: inline-block;
+ margin: 0;
+ position: relative;
+ vertical-align: middle;
+}
+
+.select2-container .select2-selection--single {
+ box-sizing: border-box;
+ cursor: pointer;
+ display: block;
+ height: 28px;
+ user-select: none;
+ -webkit-user-select: none;
+}
+
+.select2-container .select2-selection--single .select2-selection__rendered {
+ display: block;
+ padding-left: 8px;
+ padding-right: 20px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered {
+ padding-right: 8px;
+ padding-left: 20px;
+}
+
+.select2-container .select2-selection--multiple {
+ box-sizing: border-box;
+ cursor: pointer;
+ display: block;
+ min-height: 32px;
+ user-select: none;
+ -webkit-user-select: none;
+}
+
+.select2-container .select2-selection--multiple .select2-selection__rendered {
+ display: inline-block;
+ overflow: hidden;
+ padding-left: 8px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.select2-container .select2-search--inline {
+ float: left;
+}
+
+.select2-container .select2-search--inline .select2-search__field {
+ box-sizing: border-box;
+ border: none;
+ font-size: 100%;
+ margin-top: 5px;
+}
+
+.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+}
+
+.select2-dropdown {
+ background-color: white;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ box-sizing: border-box;
+ display: block;
+ position: absolute;
+ left: -100000px;
+ width: 100%;
+ z-index: 1051;
+}
+
+.select2-results {
+ display: block;
+}
+
+.select2-results__options {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+.select2-results__option {
+ padding: 6px;
+ user-select: none;
+ -webkit-user-select: none;
+}
+
+.select2-results__option[aria-selected] {
+ cursor: pointer;
+}
+
+.select2-container--open .select2-dropdown {
+ left: 0;
+}
+
+.select2-container--open .select2-dropdown--above {
+ border-bottom: none;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.select2-container--open .select2-dropdown--below {
+ border-top: none;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.select2-search--dropdown {
+ display: block;
+ padding: 4px;
+}
+
+.select2-search--dropdown .select2-search__field {
+ padding: 4px;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+}
+
+.select2-search--dropdown.select2-search--hide {
+ display: none;
+}
+
+.select2-close-mask {
+ border: 0;
+ margin: 0;
+ padding: 0;
+ display: block;
+ position: fixed;
+ left: 0;
+ top: 0;
+ min-height: 100%;
+ min-width: 100%;
+ height: auto;
+ width: auto;
+ opacity: 0;
+ z-index: 99;
+ background-color: #fff;
+ filter: alpha(opacity=0);
+}
+
+.select2-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+
+.select2-container--default .select2-selection--single {
+ background-color: #fff;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+}
+
+.select2-container--default .select2-selection--single .select2-selection__rendered {
+ color: #444;
+ line-height: 28px;
+}
+
+.select2-container--default .select2-selection--single .select2-selection__clear {
+ cursor: pointer;
+ float: right;
+ font-weight: bold;
+}
+
+.select2-container--default .select2-selection--single .select2-selection__placeholder {
+ color: #999;
+}
+
+.select2-container--default .select2-selection--single .select2-selection__arrow {
+ height: 26px;
+ position: absolute;
+ top: 1px;
+ right: 1px;
+ width: 20px;
+}
+
+.select2-container--default .select2-selection--single .select2-selection__arrow b {
+ border-color: #888 transparent transparent transparent;
+ border-style: solid;
+ border-width: 5px 4px 0 4px;
+ height: 0;
+ left: 50%;
+ margin-left: -4px;
+ margin-top: -2px;
+ position: absolute;
+ top: 50%;
+ width: 0;
+}
+
+.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear {
+ float: left;
+}
+
+.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow {
+ left: 1px;
+ right: auto;
+}
+
+.select2-container--default.select2-container--disabled .select2-selection--single {
+ background-color: #eee;
+ cursor: default;
+}
+
+.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
+ display: none;
+}
+
+.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
+ border-color: transparent transparent #888 transparent;
+ border-width: 0 4px 5px 4px;
+}
+
+.select2-container--default .select2-selection--multiple {
+ background-color: white;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ cursor: text;
+}
+
+.select2-container--default .select2-selection--multiple .select2-selection__rendered {
+ box-sizing: border-box;
+ list-style: none;
+ margin: 0;
+ padding: 0 5px;
+ width: 100%;
+}
+
+.select2-container--default .select2-selection--multiple .select2-selection__placeholder {
+ color: #999;
+ margin-top: 5px;
+ float: left;
+}
+
+.select2-container--default .select2-selection--multiple .select2-selection__clear {
+ cursor: pointer;
+ float: right;
+ font-weight: bold;
+ margin-top: 5px;
+ margin-right: 10px;
+}
+
+.select2-container--default .select2-selection--multiple .select2-selection__choice {
+ background-color: #e4e4e4;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ cursor: default;
+ float: left;
+ margin-right: 5px;
+ margin-top: 5px;
+ padding: 0 5px;
+}
+
+.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
+ color: #999;
+ cursor: pointer;
+ display: inline-block;
+ font-weight: bold;
+ margin-right: 2px;
+}
+
+.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
+ color: #333;
+}
+
+.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,
+.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder {
+ float: right;
+}
+
+.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
+ margin-left: 5px;
+ margin-right: auto;
+}
+
+.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
+ margin-left: 2px;
+ margin-right: auto;
+}
+
+.select2-container--default.select2-container--focus .select2-selection--multiple {
+ border: solid black 1px;
+ outline: 0;
+}
+
+.select2-container--default.select2-container--disabled .select2-selection--multiple {
+ background-color: #eee;
+ cursor: default;
+}
+
+.select2-container--default.select2-container--disabled .select2-selection__choice__remove {
+ display: none;
+}
+
+.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,
+.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,
+.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.select2-container--default .select2-search--dropdown .select2-search__field {
+ border: 1px solid #aaa;
+}
+
+.select2-container--default .select2-search--inline .select2-search__field {
+ background: transparent;
+ border: none;
+ outline: 0;
+}
+
+.select2-container--default .select2-results>.select2-results__options {
+ max-height: 200px;
+ overflow-y: auto;
+}
+
+.select2-container--default .select2-results__option[role=group] {
+ padding: 0;
+}
+
+.select2-container--default .select2-results__option[aria-disabled=true] {
+ color: #999;
+}
+
+.select2-container--default .select2-results__option[aria-selected=true] {
+ background-color: #ddd;
+}
+
+.select2-container--default .select2-results__option .select2-results__option {
+ padding-left: 1em;
+}
+
+.select2-container--default .select2-results__option .select2-results__option .select2-results__group {
+ padding-left: 0;
+}
+
+.select2-container--default .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -1em;
+ padding-left: 2em;
+}
+
+.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -2em;
+ padding-left: 3em;
+}
+
+.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -3em;
+ padding-left: 4em;
+}
+
+.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -4em;
+ padding-left: 5em;
+}
+
+.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -5em;
+ padding-left: 6em;
+}
+
+.select2-container--default .select2-results__option--highlighted[aria-selected] {
+ background-color: #5897fb;
+ color: white;
+}
+
+.select2-container--default .select2-results__group {
+ cursor: default;
+ display: block;
+ padding: 6px;
+}
+
+.select2-container--classic .select2-selection--single {
+ background-color: #f6f6f6;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ outline: 0;
+ background-image: -webkit-linear-gradient(top, #ffffff 50%, #eeeeee 100%);
+ background-image: -o-linear-gradient(top, #ffffff 50%, #eeeeee 100%);
+ background-image: linear-gradient(to bottom, #ffffff 50%, #eeeeee 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);
+}
+
+.select2-container--classic .select2-selection--single:focus {
+ border: 1px solid #5897fb;
+}
+
+.select2-container--classic .select2-selection--single .select2-selection__rendered {
+ color: #444;
+ line-height: 28px;
+}
+
+.select2-container--classic .select2-selection--single .select2-selection__clear {
+ cursor: pointer;
+ float: right;
+ font-weight: bold;
+ margin-right: 10px;
+}
+
+.select2-container--classic .select2-selection--single .select2-selection__placeholder {
+ color: #999;
+}
+
+.select2-container--classic .select2-selection--single .select2-selection__arrow {
+ background-color: #ddd;
+ border: none;
+ border-left: 1px solid #aaa;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ height: 26px;
+ position: absolute;
+ top: 1px;
+ right: 1px;
+ width: 20px;
+ background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
+ background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
+ background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#cccccc', GradientType=0);
+}
+
+.select2-container--classic .select2-selection--single .select2-selection__arrow b {
+ border-color: #888 transparent transparent transparent;
+ border-style: solid;
+ border-width: 5px 4px 0 4px;
+ height: 0;
+ left: 50%;
+ margin-left: -4px;
+ margin-top: -2px;
+ position: absolute;
+ top: 50%;
+ width: 0;
+}
+
+.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear {
+ float: left;
+}
+
+.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow {
+ border: none;
+ border-right: 1px solid #aaa;
+ border-radius: 0;
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ left: 1px;
+ right: auto;
+}
+
+.select2-container--classic.select2-container--open .select2-selection--single {
+ border: 1px solid #5897fb;
+}
+
+.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {
+ background: transparent;
+ border: none;
+}
+
+.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {
+ border-color: transparent transparent #888 transparent;
+ border-width: 0 4px 5px 4px;
+}
+
+.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
+ border-top: none;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ background-image: -webkit-linear-gradient(top, #ffffff 0%, #eeeeee 50%);
+ background-image: -o-linear-gradient(top, #ffffff 0%, #eeeeee 50%);
+ background-image: linear-gradient(to bottom, #ffffff 0%, #eeeeee 50%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);
+}
+
+.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
+ border-bottom: none;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ background-image: -webkit-linear-gradient(top, #eeeeee 50%, #ffffff 100%);
+ background-image: -o-linear-gradient(top, #eeeeee 50%, #ffffff 100%);
+ background-image: linear-gradient(to bottom, #eeeeee 50%, #ffffff 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
+}
+
+.select2-container--classic .select2-selection--multiple {
+ background-color: white;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ cursor: text;
+ outline: 0;
+}
+
+.select2-container--classic .select2-selection--multiple:focus {
+ border: 1px solid #5897fb;
+}
+
+.select2-container--classic .select2-selection--multiple .select2-selection__rendered {
+ list-style: none;
+ margin: 0;
+ padding: 0 5px;
+}
+
+.select2-container--classic .select2-selection--multiple .select2-selection__clear {
+ display: none;
+}
+
+.select2-container--classic .select2-selection--multiple .select2-selection__choice {
+ background-color: #e4e4e4;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ cursor: default;
+ float: left;
+ margin-right: 5px;
+ margin-top: 5px;
+ padding: 0 5px;
+}
+
+.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {
+ color: #888;
+ cursor: pointer;
+ display: inline-block;
+ font-weight: bold;
+ margin-right: 2px;
+}
+
+.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {
+ color: #555;
+}
+
+.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
+ float: right;
+}
+
+.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
+ margin-left: 5px;
+ margin-right: auto;
+}
+
+.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
+ margin-left: 2px;
+ margin-right: auto;
+}
+
+.select2-container--classic.select2-container--open .select2-selection--multiple {
+ border: 1px solid #5897fb;
+}
+
+.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {
+ border-top: none;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {
+ border-bottom: none;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.select2-container--classic .select2-search--dropdown .select2-search__field {
+ border: 1px solid #aaa;
+ outline: 0;
+}
+
+.select2-container--classic .select2-search--inline .select2-search__field {
+ outline: 0;
+}
+
+.select2-container--classic .select2-dropdown {
+ background-color: white;
+ border: 1px solid transparent;
+}
+
+.select2-container--classic .select2-dropdown--above {
+ border-bottom: none;
+}
+
+.select2-container--classic .select2-dropdown--below {
+ border-top: none;
+}
+
+.select2-container--classic .select2-results>.select2-results__options {
+ max-height: 200px;
+ overflow-y: auto;
+}
+
+.select2-container--classic .select2-results__option[role=group] {
+ padding: 0;
+}
+
+.select2-container--classic .select2-results__option[aria-disabled=true] {
+ color: grey;
+}
+
+.select2-container--classic .select2-results__option--highlighted[aria-selected] {
+ background-color: #3875d7;
+ color: white;
+}
+
+.select2-container--classic .select2-results__group {
+ cursor: default;
+ display: block;
+ padding: 6px;
+}
+
+.select2-container--classic.select2-container--open .select2-dropdown {
+ border-color: #5897fb;
+}
+/*! Select2 Bootstrap 3 CSS v1.4.6 | MIT License | github.com/t0m/select2-bootstrap-css */
+
+.select2-container.form-control {
+ background: transparent;
+ box-shadow: none;
+ border: 0;
+ display: block;
+ margin: 0;
+ padding: 0;
+}
+
+.select2-container .select2-choices .select2-search-field input,
+.select2-container .select2-choice,
+.select2-container .select2-choices {
+ background: 0;
+ padding: 0;
+ border-color: #ccc;
+ border-radius: 4px;
+ color: #555;
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+ background-color: white;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
+}
+
+.select2-search input {
+ border-color: #ccc;
+ border-radius: 4px;
+ color: #555;
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+ background-color: white;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
+}
+
+.select2-container .select2-choices .select2-search-field input {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.select2-container .select2-choice {
+ height: 34px;
+ line-height: 1.42857;
+}
+
+.select2-container.select2-container-multi.form-control {
+ height: auto;
+}
+
+.select2-container.input-sm .select2-choice,
+.input-group-sm .select2-container .select2-choice {
+ height: 30px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+.select2-container.input-lg .select2-choice,
+.input-group-lg .select2-container .select2-choice {
+ height: 46px;
+ line-height: 1.33333;
+ border-radius: 6px;
+}
+
+.select2-container-multi .select2-choices .select2-search-field input {
+ height: 32px;
+}
+
+.select2-container-multi.input-sm .select2-choices .select2-search-field input,
+.input-group-sm .select2-container-multi .select2-choices .select2-search-field input {
+ height: 28px;
+}
+
+.select2-container-multi.input-lg .select2-choices .select2-search-field input,
+.input-group-lg .select2-container-multi .select2-choices .select2-search-field input {
+ height: 44px;
+}
+
+.select2-container-multi .select2-choices .select2-search-field input {
+ margin: 0;
+}
+
+.select2-chosen,
+.select2-choice>span:first-child,
+.select2-container .select2-choices .select2-search-field input {
+ padding: 6px 12px;
+}
+
+.input-sm .select2-chosen,
+.input-group-sm .select2-chosen,
+.input-sm .select2-choice>span:first-child,
+.input-group-sm .select2-choice>span:first-child,
+.input-sm .select2-choices .select2-search-field input,
+.input-group-sm .select2-choices .select2-search-field input {
+ padding: 5px 10px;
+}
+
+.input-lg .select2-chosen,
+.input-group-lg .select2-chosen,
+.input-lg .select2-choice>span:first-child,
+.input-group-lg .select2-choice>span:first-child,
+.input-lg .select2-choices .select2-search-field input,
+.input-group-lg .select2-choices .select2-search-field input {
+ padding: 10px 16px;
+}
+
+.select2-container-multi .select2-choices .select2-search-choice {
+ margin-top: 5px;
+ margin-bottom: 3px;
+}
+
+.select2-container-multi.input-sm .select2-choices .select2-search-choice,
+.input-group-sm .select2-container-multi .select2-choices .select2-search-choice {
+ margin-top: 3px;
+ margin-bottom: 2px;
+}
+
+.select2-container-multi.input-lg .select2-choices .select2-search-choice,
+.input-group-lg .select2-container-multi .select2-choices .select2-search-choice {
+ line-height: 24px;
+}
+
+.select2-container .select2-choice .select2-arrow,
+.select2-container .select2-choice div {
+ border-left: none;
+ background: 0;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+
+.select2-dropdown-open .select2-choice .select2-arrow,
+.select2-dropdown-open .select2-choice div {
+ border-left-color: transparent;
+ background: 0;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+
+.select2-container .select2-choice .select2-arrow b,
+.select2-container .select2-choice div b {
+ background-position: 0 3px;
+}
+
+.select2-dropdown-open .select2-choice .select2-arrow b,
+.select2-dropdown-open .select2-choice div b {
+ background-position: -18px 3px;
+}
+
+.select2-container.input-sm .select2-choice .select2-arrow b,
+.input-group-sm .select2-container .select2-choice .select2-arrow b,
+.select2-container.input-sm .select2-choice div b,
+.input-group-sm .select2-container .select2-choice div b {
+ background-position: 0 1px;
+}
+
+.select2-dropdown-open.input-sm .select2-choice .select2-arrow b,
+.input-group-sm .select2-dropdown-open .select2-choice .select2-arrow b,
+.select2-dropdown-open.input-sm .select2-choice div b,
+.input-group-sm .select2-dropdown-open .select2-choice div b {
+ background-position: -18px 1px;
+}
+
+.select2-container.input-lg .select2-choice .select2-arrow b,
+.input-group-lg .select2-container .select2-choice .select2-arrow b,
+.select2-container.input-lg .select2-choice div b,
+.input-group-lg .select2-container .select2-choice div b {
+ background-position: 0 9px;
+}
+
+.select2-dropdown-open.input-lg .select2-choice .select2-arrow b,
+.input-group-lg .select2-dropdown-open .select2-choice .select2-arrow b,
+.select2-dropdown-open.input-lg .select2-choice div b,
+.input-group-lg .select2-dropdown-open .select2-choice div b {
+ background-position: -18px 9px;
+}
+
+.has-warning .select2-choice,
+.has-warning .select2-choices {
+ border-color: #8a6d3b;
+}
+
+.has-warning .select2-container-active .select2-choice,
+.has-warning .select2-container-multi.select2-container-active .select2-choices {
+ border-color: #66512c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;
+ box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;
+}
+
+.has-warning.select2-drop-active {
+ border-color: #66512c;
+}
+
+.has-warning.select2-drop-active.select2-drop.select2-drop-above {
+ border-top-color: #66512c;
+}
+
+.has-error .select2-choice,
+.has-error .select2-choices {
+ border-color: #a94442;
+}
+
+.has-error .select2-container-active .select2-choice,
+.has-error .select2-container-multi.select2-container-active .select2-choices {
+ border-color: #843534;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;
+ box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;
+}
+
+.has-error.select2-drop-active {
+ border-color: #843534;
+}
+
+.has-error.select2-drop-active.select2-drop.select2-drop-above {
+ border-top-color: #843534;
+}
+
+.has-success .select2-choice,
+.has-success .select2-choices {
+ border-color: #3c763d;
+}
+
+.has-success .select2-container-active .select2-choice,
+.has-success .select2-container-multi.select2-container-active .select2-choices {
+ border-color: #2b542c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;
+ box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;
+}
+
+.has-success.select2-drop-active {
+ border-color: #2b542c;
+}
+
+.has-success.select2-drop-active.select2-drop.select2-drop-above {
+ border-top-color: #2b542c;
+}
+
+.select2-container-active .select2-choice,
+.select2-container-multi.select2-container-active .select2-choices {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);
+ -webkit-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
+ -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
+}
+
+.select2-drop-active {
+ border-color: #66afe9;
+}
+
+.select2-drop-auto-width,
+.select2-drop.select2-drop-above.select2-drop-active {
+ border-top-color: #66afe9;
+}
+
+.input-group.select2-bootstrap-prepend [class^="select2-choice"] {
+ border-bottom-left-radius: 0!important;
+ border-top-left-radius: 0!important;
+}
+
+.input-group.select2-bootstrap-append [class^="select2-choice"] {
+ border-bottom-right-radius: 0!important;
+ border-top-right-radius: 0!important;
+}
+
+.select2-dropdown-open [class^="select2-choice"] {
+ border-bottom-right-radius: 0!important;
+ border-bottom-left-radius: 0!important;
+}
+
+.select2-dropdown-open.select2-drop-above [class^="select2-choice"] {
+ border-top-right-radius: 0!important;
+ border-top-left-radius: 0!important;
+ border-bottom-right-radius: 4px!important;
+ border-bottom-left-radius: 4px!important;
+ background: white;
+ filter: none;
+}
+
+.input-group.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^="select2-choice"] {
+ border-bottom-left-radius: 0!important;
+ border-top-left-radius: 0!important;
+}
+
+.input-group.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^="select2-choice"] {
+ border-bottom-right-radius: 0!important;
+ border-top-right-radius: 0!important;
+}
+
+.input-group.input-group-sm.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^="select2-choice"] {
+ border-bottom-right-radius: 3px!important;
+}
+
+.input-group.input-group-lg.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^="select2-choice"] {
+ border-bottom-right-radius: 6px!important;
+}
+
+.input-group.input-group-sm.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^="select2-choice"] {
+ border-bottom-left-radius: 3px!important;
+}
+
+.input-group.input-group-lg.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^="select2-choice"] {
+ border-bottom-left-radius: 6px!important;
+}
+
+.select2-results .select2-highlighted {
+ color: white;
+ background-color: #337ab7;
+}
+
+.select2-bootstrap-append .select2-container-multiple,
+.select2-bootstrap-append .input-group-btn,
+.select2-bootstrap-append .input-group-btn .btn,
+.select2-bootstrap-prepend .select2-container-multiple,
+.select2-bootstrap-prepend .input-group-btn,
+.select2-bootstrap-prepend .input-group-btn .btn {
+ vertical-align: top;
+}
+
+.select2-container-multi .select2-choices .select2-search-choice {
+ color: #555;
+ background: white;
+ border-color: #ccc;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.select2-container-multi .select2-choices .select2-search-choice-focus {
+ background: #ebebeb;
+ border-color: #adadad;
+ color: #333;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.select2-search-choice-close {
+ margin-top: -7px;
+ top: 50%;
+}
+
+.select2-container .select2-choice abbr {
+ top: 50%;
+}
+
+.select2-results .select2-no-results,
+.select2-results .select2-searching,
+.select2-results .select2-selection-limit {
+ background-color: #fcf8e3;
+ color: #8a6d3b;
+}
+
+.select2-container.select2-container-disabled .select2-choice,
+.select2-container.select2-container-disabled .select2-choices {
+ cursor: not-allowed;
+ background-color: #eee;
+ border-color: #ccc;
+}
+
+.select2-container.select2-container-disabled .select2-choice .select2-arrow,
+.select2-container.select2-container-disabled .select2-choice div,
+.select2-container.select2-container-disabled .select2-choices .select2-arrow,
+.select2-container.select2-container-disabled .select2-choices div {
+ background-color: transparent;
+ border-left: 1px solid transparent;
+}
+
+.select2-search input.select2-active,
+.select2-container-multi .select2-choices .select2-search-field input.select2-active,
+.select2-more-results.select2-active {
+ background-position: 99%;
+ background-position: right 4px center;
+}
+
+.select2-offscreen,
+.select2-offscreen:focus {
+ width: 1px!important;
+ height: 1px!important;
+ position: absolute!important;
+}
+/* iCheck plugin Square skin, blue
+----------------------------------- */
+
+.icheckbox_square-blue,
+.iradio_square-blue {
+ display: inline-block;
+ *display: inline;
+ vertical-align: middle;
+ margin: 0;
+ padding: 0;
+ width: 22px;
+ height: 22px;
+ background: url(blue.png) no-repeat;
+ border: none;
+ cursor: pointer;
+}
+
+.icheckbox_square-blue {
+ background-position: 0 0;
+}
+
+.icheckbox_square-blue.hover {
+ background-position: -24px 0;
+}
+
+.icheckbox_square-blue.checked {
+ background-position: -48px 0;
+}
+
+.icheckbox_square-blue.disabled {
+ background-position: -72px 0;
+ cursor: default;
+}
+
+.icheckbox_square-blue.checked.disabled {
+ background-position: -96px 0;
+}
+
+.iradio_square-blue {
+ background-position: -120px 0;
+}
+
+.iradio_square-blue.hover {
+ background-position: -144px 0;
+}
+
+.iradio_square-blue.checked {
+ background-position: -168px 0;
+}
+
+.iradio_square-blue.disabled {
+ background-position: -192px 0;
+ cursor: default;
+}
+
+.iradio_square-blue.checked.disabled {
+ background-position: -216px 0;
+}
+
+/* HiDPI support */
+
+@media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi), (min-resolution: 1.25dppx) {
+ .icheckbox_square-blue,
+ .iradio_square-blue {
+ background-image: url(blue@2x.png);
+ -webkit-background-size: 240px 24px;
+ background-size: 240px 24px;
+ }
+}
+/*! X-editable - v1.5.1
+* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery
+* http://github.com/vitalets/x-editable
+* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */
+
+.editableform {
+ margin-bottom: 0;
+ /* overwrites bootstrap margin */
+}
+
+.editableform .control-group {
+ margin-bottom: 0;
+ /* overwrites bootstrap margin */
+ white-space: nowrap;
+ /* prevent wrapping buttons on new line */
+ line-height: 20px;
+ /* overwriting bootstrap line-height. See #133 */
+}
+
+/*
+ BS3 width:1005 for inputs breaks editable form in popup
+ See: https://github.com/vitalets/x-editable/issues/393
+*/
+
+.editableform .form-control {
+ width: auto;
+}
+
+.editable-buttons {
+ display: inline-block;
+ /* should be inline to take effect of parent's white-space: nowrap */
+ vertical-align: top;
+ margin-left: 7px;
+ /* inline-block emulation for IE7*/
+ zoom: 1;
+ *display: inline;
+}
+
+.editable-buttons.editable-buttons-bottom {
+ display: block;
+ margin-top: 7px;
+ margin-left: 0;
+}
+
+.editable-input {
+ vertical-align: top;
+ display: inline-block;
+ /* should be inline to take effect of parent's white-space: nowrap */
+ width: auto;
+ /* bootstrap-responsive has width: 100% that breakes layout */
+ white-space: normal;
+ /* reset white-space decalred in parent*/
+ /* display-inline emulation for IE7*/
+ zoom: 1;
+ *display: inline;
+}
+
+.editable-buttons .editable-cancel {
+ margin-left: 7px;
+}
+
+/*for jquery-ui buttons need set height to look more pretty*/
+
+.editable-buttons button.ui-button-icon-only {
+ height: 24px;
+ width: 30px;
+}
+
+.editableform-loading {
+ background: url('../img/loading.gif') center center no-repeat;
+ height: 25px;
+ width: auto;
+ min-width: 25px;
+}
+
+.editable-inline .editableform-loading {
+ background-position: left 5px;
+}
+
+.editable-error-block {
+ max-width: 300px;
+ margin: 5px 0 0 0;
+ width: auto;
+ white-space: normal;
+}
+
+/*add padding for jquery ui*/
+
+.editable-error-block.ui-state-error {
+ padding: 3px;
+}
+
+.editable-error {
+ color: red;
+}
+
+/* ---- For specific types ---- */
+
+.editableform .editable-date {
+ padding: 0;
+ margin: 0;
+ float: left;
+}
+
+/* move datepicker icon to center of add-on button. See https://github.com/vitalets/x-editable/issues/183 */
+
+.editable-inline .add-on .icon-th {
+ margin-top: 3px;
+ margin-left: 1px;
+}
+
+/* checklist vertical alignment */
+
+.editable-checklist label input[type="checkbox"],
+.editable-checklist label span {
+ vertical-align: middle;
+ margin: 0;
+}
+
+.editable-checklist label {
+ white-space: nowrap;
+}
+
+/* set exact width of textarea to fit buttons toolbar */
+
+.editable-wysihtml5 {
+ width: 566px;
+ height: 250px;
+}
+
+/* clear button shown as link in date inputs */
+
+.editable-clear {
+ clear: both;
+ font-size: 0.9em;
+ text-decoration: none;
+ text-align: right;
+}
+
+/* IOS-style clear button for text inputs */
+
+.editable-clear-x {
+ background: url('../img/clear.png') center center no-repeat;
+ display: block;
+ width: 13px;
+ height: 13px;
+ position: absolute;
+ opacity: 0.6;
+ z-index: 100;
+ top: 50%;
+ right: 6px;
+ margin-top: -6px;
+}
+
+.editable-clear-x:hover {
+ opacity: 1;
+}
+
+.editable-pre-wrapped {
+ white-space: pre-wrap;
+}
+
+.editable-container.editable-popup {
+ max-width: none !important;
+ /* without this rule poshytip/tooltip does not stretch */
+}
+
+.editable-container.popover {
+ width: auto;
+ /* without this rule popover does not stretch */
+}
+
+.editable-container.editable-inline {
+ display: inline-block;
+ vertical-align: middle;
+ width: auto;
+ /* inline-block emulation for IE7*/
+ zoom: 1;
+ *display: inline;
+}
+
+.editable-container.ui-widget {
+ font-size: inherit;
+ /* jqueryui widget font 1.1em too big, overwrite it */
+ z-index: 9990;
+ /* should be less than select2 dropdown z-index to close dropdown first when click */
+}
+
+.editable-click,
+a.editable-click,
+a.editable-click:hover {
+ text-decoration: none;
+ border-bottom: dashed 1px #0088cc;
+}
+
+.editable-click.editable-disabled,
+a.editable-click.editable-disabled,
+a.editable-click.editable-disabled:hover {
+ color: #585858;
+ cursor: default;
+ border-bottom: none;
+}
+
+.editable-empty,
+.editable-empty:hover,
+.editable-empty:focus {
+ font-style: italic;
+ color: #DD1144;
+ /* border-bottom: none; */
+ text-decoration: none;
+}
+
+.editable-unsaved {
+ font-weight: bold;
+}
+
+.editable-unsaved:after {
+ /* content: '*'*/
+}
+
+.editable-bg-transition {
+ -webkit-transition: background-color 1400ms ease-out;
+ -moz-transition: background-color 1400ms ease-out;
+ -o-transition: background-color 1400ms ease-out;
+ -ms-transition: background-color 1400ms ease-out;
+ transition: background-color 1400ms ease-out;
+}
+
+/*see https://github.com/vitalets/x-editable/issues/139 */
+
+.form-horizontal .editable {
+ padding-top: 5px;
+ display: inline-block;
+}
+
+.input-append.date .add-on i,
+.input-prepend.date .add-on i {
+ display: block;
+ cursor: pointer;
+ width: 16px;
+ height: 16px;
+}
+
+.input-daterange input {
+ text-align: center;
+}
+
+.input-daterange input:first-child {
+ -webkit-border-radius: 3px 0 0 3px;
+ -moz-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px;
+}
+
+.input-daterange input:last-child {
+ -webkit-border-radius: 0 3px 3px 0;
+ -moz-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0;
+}
+
+.input-daterange .add-on {
+ display: inline-block;
+ width: auto;
+ min-width: 16px;
+ height: 18px;
+ padding: 4px 5px;
+ font-weight: normal;
+ line-height: 18px;
+ text-align: center;
+ text-shadow: 0 1px 0 #ffffff;
+ vertical-align: middle;
+ background-color: #eeeeee;
+ border: 1px solid #ccc;
+ margin-left: -5px;
+ margin-right: -5px;
+}
+/*!
+ * Start Bootstrap - SB Admin Bootstrap Admin Template (http://startbootstrap.com)
+ * Code licensed under the Apache License v2.0.
+ * For details, see http://www.apache.org/licenses/LICENSE-2.0.
+ */
+
+/* Global Styles */
+
+body {
+ font-family: Open Sans;
+ margin-top: 50px;
+}
+
+#wrapper {
+ padding-left: 0;
+}
+
+#page-wrapper {
+ width: 100%;
+ padding: 0;
+ background-color: #fff;
+}
+
+.huge {
+ font-size: 50px;
+ line-height: normal;
+}
+
+@media (min-width: 768px) {
+ #wrapper {
+ padding-left: 225px;
+ }
+}
+
+/* Top Navigation */
+
+.navbar-maquetacion {
+ background-color: #ddd !important;
+}
+
+.top-nav {
+ padding: 0 15px;
+}
+
+.top-nav > li {
+ display: inline-block;
+ float: left;
+}
+
+.top-nav > li > a {
+ line-height: 20px;
+ padding-top: 15px;
+ padding-bottom: 15px;
+ color: #999;
+}
+
+.top-nav > li > a:hover,
+.top-nav > li > a:focus,
+.top-nav > .open > a,
+.top-nav > .open > a:hover,
+.top-nav > .open > a:focus {
+ color: #fff;
+ background-color: #000;
+}
+
+.top-nav > .open > .dropdown-menu {
+ position: absolute;
+ float: left;
+ margin-top: 0;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ background-color: #fff;
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+}
+
+.top-nav > .open > .dropdown-menu > li > a {
+ white-space: normal;
+}
+
+.top-nav-left {
+ display: none;
+}
+
+@media (min-width: 768px) {
+ .top-nav-left {
+ display: inline;
+ margin-left: 95px;
+ }
+}
+
+ul.message-dropdown {
+ overflow-x: hidden;
+ overflow-y: auto;
+ max-height: 250px;
+ padding: 0;
+}
+
+li.message-preview {
+ width: 275px;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.15);
+}
+
+li.message-preview > a {
+ padding-top: 15px;
+ padding-bottom: 15px;
+}
+
+li.message-footer {
+ margin: 5px 0;
+}
+
+ul.alert-dropdown {
+ width: 200px;
+}
+
+/* Side Navigation */
+
+@media (min-width: 768px) {
+ .side-nav {
+ position: fixed;
+ top: 51px;
+ left: 225px;
+ overflow-y: auto;
+ width: 225px;
+ margin-left: -225px;
+ border: none;
+ border-radius: 0;
+ }
+
+ .side-nav.produccion {
+ background-color: #000000;
+ }
+
+ .side-nav.desarrollo {
+ background-color: #006847;
+ border-color: #006847;
+ }
+
+ .side-nav.local {
+ background-color: #2E70A5;
+ border-color: #2E70A5;
+ }
+
+ .side-nav > li > a {
+ width: 225px;
+ }
+
+ .side-nav li a:hover,
+ .side-nav li a:focus {
+ outline: none;
+ background-color: #000 !important;
+ }
+}
+
+.side-nav > li > ul {
+ padding: 0;
+}
+
+.side-nav > li > ul > li > a {
+ display: block;
+ padding: 10px 15px 10px 38px;
+ text-decoration: none;
+ color: #999;
+}
+
+.side-nav > li > ul > li > a:hover {
+ color: #fff;
+}
+
+/* Flot Chart Containers */
+
+.flot-chart {
+ display: block;
+ height: 400px;
+}
+
+.flot-chart-content {
+ width: 100%;
+ height: 100%;
+}
+
+/* Custom Colored Panels */
+
+.huge {
+ font-size: 40px;
+}
+
+.panel-green {
+ border-color: #abc335;
+}
+
+.panel-green .panel-heading {
+ color: #fff;
+ border-color: #abc335;
+ background-color: #abc335;
+}
+
+.panel-green a {
+ color: #abc335;
+}
+
+.panel-green a:hover {
+ color: #3d8b3d;
+}
+
+.panel-red {
+ border-color: #d9534f;
+}
+
+.panel-red .panel-heading {
+ color: #fff;
+ border-color: #d9534f;
+ background-color: #d9534f;
+}
+
+.panel-red a {
+ color: #d9534f;
+}
+
+.panel-red a:hover {
+ color: #b52b27;
+}
+
+.panel-yellow {
+ border-color: #e1a31a;
+}
+
+.panel-yellow .panel-heading {
+ color: #fff;
+ border-color: #e1a31a;
+ background-color: #e1a31a;
+}
+
+.panel-yellow a {
+ color: #e1a31a;
+}
+
+.panel-yellow a:hover {
+ color: #df8a13;
+}
+
+.page-header {
+ margin: 10px 0 10px;
+}
+
+.breadcrumb {
+ margin-bottom: 10px;
+}
+
+.right {
+ text-align: right;
+}
+
+.details-control {
+ position: relative;
+ cursor: pointer;
+}
+
+tr.details td.details-control {
+ background: url('/assets/images/details_close.png') no-repeat center center;
+}
+
+td.details-control {
+ cursor: pointer;
+ background: url('/assets/images/details_open.png') no-repeat center center;
+}
+
+.panel.inside-table .panel-body {
+ /* padding: 0px; */
+}
+
+.inside-table .table-responsive {
+ margin-bottom: 10px;
+}
+
+.inside-table .table-responsive table {
+ margin-bottom: 0;
+}
+
+textarea.code {
+ font-family: monospace;
+ min-height: 400px;
+}
+
+.table-responsive {
+ overflow-x: visible;
+}
+
+.green {
+ color: green;
+}
+
+.red {
+ color: red;
+}
+
+.blue {
+ color: blue;
+}
+
+.incidencia {
+ background: #EBC22E;
+}
+
+.right {
+ text-align: right !important;
+}
+
+.no-margin {
+ margin: 0;
+}
+
+.no-pl {
+ padding-left: 0 !important;
+}
+
+.no-pr {
+ padding-right: 0 !important;
+}
+
+.panel-user .huge {
+ font-size: 30px;
+}
+
+.container-fluid.maquina {
+ padding-top: 10px;
+}
+
+.dropzone {
+ width: 100%;
+ height: 100%;
+ padding: 20px;
+ text-align: center;
+}
+
+.navbar-brand {
+ display: block;
+ width: 225px;
+ padding-left: 120px;
+ height: 50px;
+ text-indent: -9999px;
+ background-repeat: no-repeat;
+ background-position: center;
+}
+
+.navbar-brand.safekat-erp {
+ background-image: url('../images/logo-login-safekat-erp.png');
+ background-size: 115px;
+}
+
+.navbar-inverse.produccion {
+ background-color: #000000;
+}
+
+.navbar-inverse.desarrollo {
+ background-color: #006847;
+ border-color: #006847;
+}
+
+.navbar-inverse.local {
+ background-color: #2E70A5;
+ border-color: #2E70A5;
+}
+
+.navbar ul.top-nav-left {
+ margin-left: 0;
+}
+
+.navbar ul.top-nav-left.produccion {
+ background-color: #000000;
+}
+
+.navbar ul.top-nav-left.produccion li > a {
+ background-color: #000000;
+ color: #fff;
+}
+
+.navbar ul.top-nav-left.produccion li > a:hover,
+.navbar ul.top-nav-left.produccion li > a:focus {
+ color: #9d9d9d;
+ background-color: #000000;
+}
+
+.navbar ul.top-nav-left.produccion .active > a,
+.navbar ul.top-nav-left.produccion .active > a:focus,
+.navbar ul.top-nav-left.produccion .active > a:hover {
+ color: #9d9d9d;
+ background-color: #000000;
+}
+
+.navbar ul.top-nav-left.desarrollo {
+ background-color: #006847;
+}
+
+.navbar ul.top-nav-left.desarrollo li > a {
+ background-color: #006847;
+ color: #fff;
+}
+
+.navbar ul.top-nav-left.desarrollo li > a:hover,
+.navbar ul.top-nav-left.desarrollo li > a:focus {
+ background-color: #015037;
+ color: #9d9d9d;
+}
+
+.navbar ul.top-nav-left.desarrollo .active > a,
+.navbar ul.top-nav-left.desarrollo .active > a:focus,
+.navbar ul.top-nav-left.desarrollo .active > a:hover {
+ background-color: #015037;
+ color: #9d9d9d;
+}
+
+.navbar ul.top-nav-left.local {
+ background-color: #2E70A5;
+}
+
+.navbar ul.top-nav-left.local li > a {
+ background-color: #2E70A5;
+ color: #fff;
+}
+
+.navbar ul.top-nav-left.local li > a:hover,
+.navbar ul.top-nav-left.local li > a:focus {
+ background-color: #0f2dcd;
+ color: #9d9d9d;
+}
+
+.navbar ul.top-nav-left.local .active > a,
+.navbar ul.top-nav-left.local .active > a:focus,
+.navbar ul.top-nav-left.local .active > a:hover {
+ background-color: #0f2dcd;
+ color: #9d9d9d;
+}
+
+.text-area-height-100 {
+ height: 100px !important;
+}
+
+.text-area-height-150 {
+ height: 150px !important;
+}
+
+ul.navbar-right .open > .dropdown-menu > li > a {
+ color: #000000;
+}
+
+ul.navbar-right .open > .dropdown-menu > li > a:hover {
+ color: #fff;
+}
+
+ul.navbar-right.produccion li > a {
+ line-height: 20px;
+ padding-top: 15px;
+ padding-bottom: 15px;
+ color: #fff;
+}
+
+ul.navbar-right.produccion .open > .dropdown-menu > li > a {
+ color: #000000;
+}
+
+ul.navbar-right.produccion li > a:hover,
+ul.navbar-right.produccion li > a:focus,
+ul.navbar-right.produccion .open > a,
+ul.navbar-right.produccion .open > a:hover,
+ul.navbar-right.produccion .open > a:focus {
+ color: #9d9d9d;
+ background-color: #000000;
+}
+
+ul.navbar-right.desarrollo li > a {
+ line-height: 20px;
+ padding-top: 15px;
+ padding-bottom: 15px;
+ color: #fff;
+}
+
+ul.navbar-right.desarrollo .open > .dropdown-menu > li > a {
+ color: #000000;
+}
+
+ul.navbar-right.desarrollo li > a:hover,
+ul.navbar-right.desarrollo li > a:focus,
+ul.navbar-right.desarrollo .open > a,
+ul.navbar-right.desarrollo .open > a:hover,
+ul.navbar-right.desarrollo .open > a:focus {
+ color: #9d9d9d;
+ background-color: #006847;
+}
+
+ul.navbar-right.local li > a {
+ line-height: 20px;
+ padding-top: 15px;
+ padding-bottom: 15px;
+ color: #fff;
+}
+
+ul.navbar-right.local .open > .dropdown-menu > li > a {
+ color: #0e38d0;
+}
+
+ul.navbar-right.local li > a:hover,
+ul.navbar-right.local li > a:focus,
+ul.navbar-right.local .open > a,
+ul.navbar-right.local .open > a:hover,
+ul.navbar-right.local .open > a:focus {
+ color: #9d9d9d;
+ background-color: #2E70A5;
+}
+
+ul.hidden-xs li.messages-count {
+ width: 50px;
+}
+
+ul.hidden-xs li.messages-count > a {
+ color: #fff;
+}
+
+ul.hidden-xs li.messages-count > a:hover,
+ul.hidden-xs li.messages-count > a:focus {
+ color: #9d9d9d;
+}
+
+.navbar-nav {
+ overflow-y: auto;
+ height: 100%;
+}
+
+.navbar-nav span.bubble {
+ font: bold 12px Tahoma;
+ position: absolute;
+ top: 10px;
+ left: 25px;
+ padding: 1px 3px 1px 2px;
+ color: #fff;
+ border-width: 1px;
+ border-color: #e23923 #d83722 #c0311e;
+ border-left: 1px solid #d83722;
+ border-radius: 3px;
+ background-color: #e44c34;
+ box-shadow: -1px 1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.side-nav {
+ position: fixed;
+ top: 51px;
+ left: 225px;
+ overflow-y: auto;
+ width: 225px;
+ margin-left: -225px;
+ border-radius: 0;
+}
+
+.side-nav.produccion {
+ background: #000000 top left repeat;
+}
+
+.side-nav.produccion li {
+ margin-bottom: 0;
+ background-color: #000000;
+ color: #fff;
+}
+
+.side-nav.produccion li > a {
+ width: 225px;
+ color: #fff;
+ background-color: #000000;
+}
+
+.side-nav.produccion li a:hover,
+.side-nav.produccion li a:focus {
+ outline: none;
+ color: #999;
+ background-color: #000000 !important;
+}
+
+.side-nav.produccion li.panel.active > a,
+.side-nav.produccion li.panel.active > a:focus,
+.side-nav.produccion li.panel.active > a:hover {
+ color: #9d9d9d;
+ background-color: #000000;
+}
+
+.side-nav.produccion li > ul {
+ padding: 0;
+}
+
+.side-nav.produccion li > ul > li > a {
+ display: block;
+ padding: 10px 15px 10px 38px;
+ text-decoration: none;
+ color: #fff;
+ background-color: #000000;
+}
+
+.side-nav.produccion li > ul > li > a:hover {
+ color: #999;
+ background-color: #000000;
+}
+
+.side-nav.produccion.colapsed-menu {
+ width: 0;
+ background: transparent;
+}
+
+.side-nav.desarrollo {
+ background: #006847 top left repeat;
+}
+
+.side-nav.desarrollo li {
+ margin-bottom: 0;
+ background-color: #006847;
+ color: #fff;
+}
+
+.side-nav.desarrollo li > a {
+ width: 225px;
+ color: #fff;
+ background-color: #006847;
+}
+
+.side-nav.desarrollo li a:hover,
+.side-nav.desarrollo li a:focus {
+ outline: none;
+ color: #999;
+ background-color: #006847 !important;
+ border: none;
+}
+
+.side-nav.desarrollo li.panel.active > a,
+.side-nav.desarrollo li.panel.active > a:focus,
+.side-nav.desarrollo li.panel.active > a:hover {
+ color: #9d9d9d;
+ background-color: #006847;
+}
+
+.side-nav.desarrollo li > ul {
+ padding: 0;
+}
+
+.side-nav.desarrollo li > ul > li > a {
+ display: block;
+ padding: 10px 15px 10px 38px;
+ text-decoration: none;
+ color: #fff;
+ background-color: #006847;
+}
+
+.side-nav.desarrollo li > ul > li > a:hover {
+ color: #999;
+ background-color: #006847;
+}
+
+.side-nav.local {
+ background: #2E70A5 top left repeat;
+}
+
+.side-nav.local li {
+ margin-bottom: 0;
+ background-color: #2E70A5;
+ color: #fff;
+}
+
+.side-nav.local li > a {
+ width: 225px;
+ color: #fff;
+ background-color: #2E70A5;
+}
+
+.side-nav.local li a:hover,
+.side-nav.local li a:focus {
+ outline: none;
+ color: #999;
+ background-color: #2E70A5 !important;
+}
+
+.side-nav.local li.panel.active > a,
+.side-nav.local li.panel.active > a:focus,
+.side-nav.local li.panel.active > a:hover {
+ color: #9d9d9d;
+ background-color: #2E70A5;
+}
+
+.side-nav.local li > ul {
+ padding: 0;
+}
+
+.side-nav.local li > ul > li > a {
+ display: block;
+ padding: 10px 15px 10px 38px;
+ text-decoration: none;
+ color: #fff;
+ background-color: #2E70A5;
+}
+
+.side-nav.local li > ul > li > a:hover {
+ color: #999;
+ background-color: #2E70A5;
+}
+
+.side-nav.local.colapsed-menu {
+ background-color: transparent;
+ width: 0;
+}
+
+.side-nav.colapsed-menu {
+ background-color: transparent;
+ width: 0;
+}
+
+@media (max-width: 1171px) {
+ .navbar-inverse .nav > li > a {
+ padding: 15px 10px;
+ }
+}
+
+@media (max-width: 768px) {
+ .side-nav {
+ display: none;
+ }
+}
+
+#page-wrapper pre {
+ overflow-y: scroll;
+}
+
+.navbar-header {
+ color: white;
+}
+
+.navbar-header.produccion {
+ background-color: #000000;
+}
+
+.navbar-header.desarrollo {
+ background-color: gray;
+}
+
+.navbar-header.local {
+ background-color: #2E70A5;
+}
+
+.nav-pills {
+ margin-bottom: 10px;
+}
+
+.nav-pills .with-menssages {
+ font-weight: bolder;
+}
+
+.nav-pills.warning li.active a {
+ background-color: #f0ad4e;
+}
+
+.bootstrap-dialog.type-primary .modal-header {
+ background-color: #373a3d;
+}
+
+.center {
+ text-align: center;
+}
+
+.link-disabled {
+ cursor: default;
+ pointer-events: none;
+}
+
+.select2-container .select2-selection--single {
+ height: 34px;
+}
+
+.spinner {
+ width: 100px;
+}
+
+.spinner input {
+ padding-right: 3px;
+ padding-left: 3px;
+ text-align: right;
+ border-top-left-radius: 4px !important;
+ border-bottom-left-radius: 4px !important;
+}
+
+.input-group-btn-vertical {
+ position: relative;
+ display: table-cell;
+ width: 1%;
+ vertical-align: middle;
+ white-space: nowrap;
+}
+
+.input-group-btn-vertical > .btn {
+ position: relative;
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+ margin-left: -1px;
+ padding: 8px;
+ border-radius: 0;
+}
+
+.input-group-btn-vertical > .btn:first-child {
+ border-top-right-radius: 4px;
+}
+
+.input-group-btn-vertical > .btn:last-child {
+ margin-top: -2px;
+ border-bottom-right-radius: 4px;
+}
+
+.input-group-btn-vertical i {
+ position: absolute;
+ top: 0;
+ left: 4px;
+}
+
+.pedido-files .dropzone-cover {
+ margin-top: 15px;
+}
+
+.pedido-files .resume-upload {
+ height: 40px;
+ margin-top: 5px;
+}
+
+.pedido-files .resume-upload p {
+ display: block;
+ float: left;
+}
+
+.pedido-files .resume-upload button {
+ float: right;
+}
+
+table .Select {
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+
+table.totales-pedido {
+ width: 100%;
+}
+
+table.totales-pedido tr.margen .input,
+table.totales-pedido tr.descuento .input {
+ float: right;
+ padding-right: 0;
+}
+
+table.totales-pedido tr.margen .input input,
+table.totales-pedido tr.descuento .input input {
+ height: 25px;
+}
+
+table.totales-pedido tr.total {
+ font-size: 2em;
+}
+
+table.mostrar-albaran {
+ width: 100%;
+}
+
+table.mostrar-albaran td.boton {
+ padding-right: 2px;
+ width: 48%;
+}
+
+table.papeles-por-defecto tr.c1 td {
+ background-color: rgba(0, 68, 204, 0.15);
+}
+
+table.papeles-por-defecto tr.c2 td {
+ background-color: rgba(128, 128, 128, 0.3);
+}
+
+table tr.presupuesto {
+ background-color: #a6a6a6;
+}
+
+table tr.aceptado {
+ background-color: #74a174;
+}
+
+table tr.validado {
+ background-color: #94bcbc;
+}
+
+table tr.validado.in_production {
+ background-color: #a7c7b4;
+}
+
+table.dataTable {
+ width: 100%;
+ border-collapse: collapse;
+}
+
+table.dataTable thead .table-search {
+ width: 100%;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+table.dataTable thead .table-search .Select {
+ padding: 0;
+}
+
+table.dataTable thead .table-search .Select .Select-control,
+table.dataTable thead .table-search .Select .Select-placeholder,
+table.dataTable thead .table-search .Select .Select-input,
+table.dataTable thead .table-search .Select input {
+ height: 26px;
+}
+
+table.dataTable thead .table-search .Select .Select-placeholder,
+table.dataTable thead .table-search .Select .Select-value {
+ text-align: left;
+}
+
+table.dataTable thead .table-search.form-group,
+table.dataTable thead .table-search .form-group,
+table.dataTable thead .table-search .form-control {
+ width: 100%;
+}
+
+table.dataTable thead .datatable-input-search {
+ font-size: 12px;
+ font-weight: normal;
+ width: 80px;
+ height: 30px;
+ padding: 5px;
+ text-align: center;
+}
+
+table.dataTable thead .datatable-input-search.range {
+ width: 120px;
+}
+
+table.dataTable thead tr.filter th {
+ padding-right: 0;
+ padding-left: 0;
+}
+
+table.dataTable thead tr.filter td {
+ border-bottom: 2px solid #ddd;
+}
+
+table.dataTable thead th.checkbox-table-all {
+ padding-left: 9px;
+}
+
+table.dataTable span.id-maquina {
+ font-size: 13px;
+ font-weight: bolder;
+ position: relative;
+ left: -21px;
+ padding-right: 1px;
+ padding-left: 1px;
+ border: 1px solid black;
+ background-color: white;
+}
+
+table.dataTable span.id-maquina-twice {
+ top: -25px;
+ left: 5px;
+}
+
+table.dataTable td span.edit {
+ cursor: pointer;
+}
+
+table.dataTable td span.edit span:hover {
+ text-decoration: underline;
+}
+
+table.dataTable td span.edit div.form-group {
+ width: 100%;
+}
+
+table.dataTable td span.edit div.form-group div.Select {
+ width: 100%;
+ min-height: 38px;
+ padding: 0;
+}
+
+table.dataTable input.checkbox-table-select {
+ width: 25px;
+}
+
+div.dataTables_wrapper .dataTables_paginate a {
+ height: 30px;
+ padding-top: 4px;
+}
+
+.s2-multi-drop {
+ font-size: 10px;
+}
+
+.s2-multi {
+ font-size: 10px;
+}
+
+body.auth {
+ background: #222 url(../images/darkpattern.png) top left repeat;
+}
+
+body.pedido-detail .panel-body {
+ padding-bottom: 0;
+}
+
+body.pedido-detail .panel-body h4 {
+ margin-top: 0;
+ margin-bottom: 20px;
+ text-decoration: underline;
+ text-transform: uppercase;
+}
+
+body.pedido-detail .panel-body .actions {
+ margin-bottom: 10px;
+}
+
+body.plantilla .panel-heading {
+ background-color: rgba(255, 255, 165, 0.38);
+}
+
+body.papel-compra-detail a.big {
+ font-size: 25px;
+}
+
+body.papel-compra-detail div.generate {
+ padding: 10px;
+ border: 1px solid gray;
+}
+
+body.papel-compra-detail table.formatos td,
+body.papel-compra-detail table.formatos th {
+ text-align: center;
+ vertical-align: middle;
+}
+
+body.papel-compra-detail table.formatos tr.formas {
+ font-size: 10px;
+}
+
+body.papel-compra-detail table.formatos span.size {
+ font-size: 10px;
+}
+
+body.cliente-form .address_comunidad .select2-selection {
+ height: 30px;
+}
+
+body.cliente-form .new-contact .form-group {
+ margin-bottom: 0;
+}
+
+body.cliente-form .new-contact .buttons {
+ margin-top: 31px;
+}
+
+body.config-tamanios-papeles .title {
+ text-decoration: underline;
+}
+
+body.config-tamanios-papeles th p {
+ font-weight: normal;
+ margin-bottom: 0;
+}
+
+body.config-tamanios-papeles .papeles_compra_contenedor p {
+ margin-bottom: 2px;
+ text-align: right;
+}
+
+body.config-tamanios-papeles select {
+ height: 22px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+body.config-tamanios-papeles tr.papeles_compra ul {
+ margin-bottom: 0;
+ margin-left: 0;
+ padding-left: 18px;
+}
+
+body.config-tamanios-papeles tr.papeles_compra ul select {
+ padding: 0;
+}
+
+body.permisos tr.noborder td {
+ border-top: 0;
+}
+
+.chat-body {
+ margin-bottom: 5px;
+ padding-bottom: 5px;
+ border-bottom: 1px solid #ccc;
+}
+
+ul.chat {
+ padding-left: 0;
+ list-style: none;
+}
+
+ul.chat div.header {
+ margin-bottom: 5px;
+}
+
+.mensajes select,
+.mensajes input {
+ width: 100%;
+}
+
+.pedido-mensajes .participants-list .participant {
+ float: left;
+ width: 40px;
+ margin-right: 5px;
+}
+
+.pedido-mensajes .popup-chat {
+ padding: 35px;
+ padding-top: 15px;
+}
+
+.pedido-mensajes .popup-chat h3 {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+
+.pedido-mensajes .panel-body {
+ padding-top: 20px;
+}
+
+.pedido-mensajes .panel-body .messages {
+ margin-bottom: 10px !important;
+}
+
+.pedido-mensajes .panel-body .form-send-message {
+ margin-bottom: 0;
+}
+
+.pedido-mensajes .panel-body .input-send-message {
+ min-height: 90px;
+ max-height: 90px;
+}
+
+.pedido-mensajes .alert-danger {
+ padding: 2px;
+}
+
+.pedido-mensajes .btn-new-message {
+ margin-bottom: 15px;
+}
+
+.header {
+ padding: 5px;
+ margin: 5px;
+ color: black;
+}
+
+.header.rojo {
+ background: red;
+ color: white;
+}
+
+.header.ferro {
+ background: #d2d2d2;
+}
+
+.header.pod {
+ background: #6cff6c;
+}
+
+.header.incidencia {
+ background: #ebc22e;
+}
+
+.header .title-customer.fecha {
+ color: white;
+}
+
+.header .title-customer.sin-fecha {
+ color: #666666;
+}
+
+.header .progreso {
+ font-size: 30px;
+}
+
+.header .goto {
+ text-align: right;
+}
+
+.no-bottom-margin {
+ margin-bottom: 0;
+}
+
+body.panel-control td.facturacion_mes_corriente {
+ font-weight: bolder;
+}
+
+.app-loading,
+.app-alert {
+ font-size: 30px;
+ display: table;
+ width: 400px;
+ height: 300px;
+ text-align: center;
+}
+
+.app-loading span,
+.app-alert span {
+ display: table-cell;
+ vertical-align: middle;
+}
+
+.app-loading span .spinner,
+.app-alert span .spinner {
+ margin-top: 20px;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.app-loading span .spinner .bounce1,
+.app-alert span .spinner .bounce1 {
+ background-color: #999;
+}
+
+.app-loading span .spinner .bounce2,
+.app-alert span .spinner .bounce2 {
+ background-color: #777;
+}
+
+.app-loading span .spinner .bounce3,
+.app-alert span .spinner .bounce3 {
+ background-color: #555;
+}
+
+.app-loading p.q,
+.app-alert p.q {
+ font-size: 20px;
+ margin-top: 30px;
+ margin-left: 10px;
+}
+
+.app-loading .buttons button,
+.app-alert .buttons button {
+ width: 100px;
+ margin-right: 10px;
+}
+
+.app-alert {
+ font-size: 15px;
+ padding: 15px;
+ text-align: left;
+}
+
+.app-alert .buttons {
+ text-align: right;
+}
+
+.app-popup-content {
+ width: 100%;
+ height: 100%;
+ padding: 20px;
+}
+
+.app-popup-content .app-popup-btn {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ padding-right: 10px;
+ padding-bottom: 10px;
+ padding-left: 10px;
+}
+
+.app-popup-content .app-popup-btn .align-rigth {
+ float: right;
+}
+
+.dataTables_wrapper .dt-buttons {
+ float: left;
+ margin-right: 10px;
+}
+
+.dataTables_wrapper .dataTables_length {
+ float: left;
+}
+
+.dataTables_wrapper .dataTables_paginate {
+ float: right;
+ margin-left: 20px;
+}
+
+.dataTables_wrapper .dataTables_filter {
+ float: right;
+ margin-top: 2px;
+}
+
+.btn-colapse-menu {
+ position: fixed;
+ bottom: 0;
+ padding: 5px;
+}
+
+.btn-colapse-menu button {
+ display: block;
+ float: right;
+ color: #ddd;
+ border: 1px solid #ddd;
+ background-color: #1a1a1a;
+}
+
+.colapsed-wrapper {
+ padding-left: 0 !important;
+}
+
+.panel.panel-primary .panel-heading a {
+ color: white;
+}
+
+.panel.panel-login .panel-body {
+ text-align: center;
+}
+
+.panel.panel-login .panel-body img.logo {
+ margin-bottom: 15px;
+}
+
+.react-bs-table {
+ margin-right: 0;
+ margin-left: 0;
+}
+
+.react-file-uploader .uploader-input {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ visibility: hidden;
+ width: 100%;
+ height: 100%;
+}
+
+.react-file-uploader .uploader-label {
+ font-size: 14px;
+ position: relative;
+ display: inline-block;
+ margin-bottom: 10px;
+ padding: 5px 10px;
+ cursor: pointer;
+ color: #383838;
+ border: 1px solid #ddd;
+ border-radius: 3px;
+ background-color: #eee;
+}
+
+.react-file-uploader .uploader-progress {
+ position: relative;
+ display: block;
+ overflow: hidden;
+ border-radius: 5px;
+}
+
+.libro-catalogo-panelcontrol {
+ background-color: #eee;
+ border-radius: 6px;
+ padding: 20px;
+ margin-bottom: 10px;
+}
+
+.libro-catalogo-panelcontrol a {
+ width: 100%;
+ display: block;
+}
+
+.libro-catalogo-panelcontrol a img.cover {
+ width: 75px;
+ height: 100px;
+ margin-left: auto;
+ margin-right: auto;
+ margin-bottom: 20px;
+ display: block;
+}
+
+.libro-catalogo-panelcontrol a p.titulo {
+ margin-bottom: 0;
+}
+
+.float {
+ float: right;
+}
+
+@media (max-width: 1100px) {
+ .navbar-brand {
+ width: 50px;
+ background-image: url('../images/logoerp4.png');
+ }
+}
\ No newline at end of file
diff --git a/httpdocs/themes/vuexy/css/font-pdf.css b/httpdocs/themes/vuexy/css/font-pdf.css
new file mode 100644
index 00000000..726bd4b0
--- /dev/null
+++ b/httpdocs/themes/vuexy/css/font-pdf.css
@@ -0,0 +1,144 @@
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 300;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 300;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2) format('woff2');
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 300;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 300;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2) format('woff2');
+ unicode-range: U+0370-03FF;
+}
+/* hebrew */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 300;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2) format('woff2');
+ unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 300;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2) format('woff2');
+ 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;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 300;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2) format('woff2');
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 300;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2) format('woff2');
+ 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+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2) format('woff2');
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2) format('woff2');
+ unicode-range: U+0370-03FF;
+}
+/* hebrew */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2) format('woff2');
+ unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2) format('woff2');
+ 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;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2) format('woff2');
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ font-stretch: 100%;
+ src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2) format('woff2');
+ 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+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
diff --git a/httpdocs/themes/vuexy/css/pdf.presupuesto.css b/httpdocs/themes/vuexy/css/pdf.presupuesto.css
new file mode 100644
index 00000000..a817b597
--- /dev/null
+++ b/httpdocs/themes/vuexy/css/pdf.presupuesto.css
@@ -0,0 +1,755 @@
+/* Presupuesto Safekat */
+
+body {
+ font-family: 'Open Sans', sans-serif;
+}
+
+body table.logo {
+ width: 100%;
+ color: black;
+}
+
+body table.logo td.logo img {
+ width: 100%;
+}
+
+body table.presupuesto-data {
+ width: 100%;
+ font-size: 12px;
+}
+
+body table.presupuesto-data th {
+ background: black;
+ color: white;
+ padding: 6px;
+}
+
+body table.presupuesto-data th.intro_presupuesto {
+ width: 20%;
+ padding-left: 15px;
+}
+
+body table.presupuesto-data th.num_presupuesto {
+ width: 10%;
+ font-weight: lighter;
+}
+
+body table.presupuesto-data th.intro_cliente {
+ width: 11%;
+ padding-left: 15px;
+}
+
+body table.presupuesto-data th.letra {
+ font-size: 9px;
+}
+
+body table.presupuesto-data th.cliente {
+ width: 38%;
+ font-weight: lighter;
+ text-transform: uppercase;
+}
+
+body table.presupuesto-data th.intro_fecha {
+ width: 10%;
+}
+
+body table.presupuesto-data th.fecha {
+ width: 10%;
+ text-align: right;
+ font-weight: lighter;
+}
+
+body table.presupuesto-data td {
+ background: #e3e4e7;
+ padding-left: 15px;
+}
+
+body table.presupuesto-data td.titulo {
+ padding-top: 5px;
+}
+
+body table.presupuesto-data td div.intro-coleccion,
+body table.presupuesto-data td div.intro_autor {
+ font-weight: bold;
+ padding-bottom: 10px;
+}
+
+body table.presupuesto-data td.coleccion,
+body table.presupuesto-data td.autor {
+ padding-top: 3px;
+ padding-bottom: 10px;
+}
+
+body table.impresion {
+ width: 100%;
+ font-size: 11px;
+ margin-bottom: 9px;
+ margin-top: 8px;
+}
+
+body table.impresion th {
+ color: white;
+ font-size: 12px;
+ font-weight: lighter;
+ background: #8ac948;
+ padding: 3px;
+ padding-left: 8px;
+}
+
+body table.impresion td {
+ border-bottom: 1px dotted black;
+ padding: 3px;
+ font-family: 'Open Sans', sans-serif;
+}
+
+body table.impresion td.t {
+ width: 18%;
+ font-weight: bold;
+ border-right: 1px dotted black;
+}
+
+body table.impresion td.t-first {
+ width: 8%;
+ font-weight: bold;
+ border-left: 1px dotted black;
+ border-right: 1px dotted black;
+}
+
+body table.impresion td.t-second {
+ width: 11%;
+ font-weight: bold;
+ border-left: 1px dotted black;
+ border-right: 1px dotted black;
+}
+
+body table.impresion td.v {
+ width: 12%;
+}
+
+body table.impresion td.v-second {
+ width: 11%;
+}
+
+body table.impresion td.v-first {
+ width: 40%;
+}
+
+body table.cubierta {
+ width: 100%;
+ font-size: 11px;
+ margin-bottom: 9px;
+}
+
+body table.cubierta th {
+ background: #0C2C84;
+ color: white;
+ font-size: 12px;
+ font-weight: lighter;
+ padding: 3px;
+ padding-left: 8px;
+}
+
+body table.cubierta td {
+ border-bottom: 1px dotted black;
+ padding: 3px;
+}
+
+body table.cubierta td.t {
+ width: 18%;
+ font-weight: bold;
+ border-right: 1px dotted black;
+}
+
+body table.cubierta td.t-first,
+body table.cubierta td.t-second,
+body table.cubierta td.t-third,
+body table.cubierta tdv.second {
+ width: 8%;
+ font-weight: bold;
+ border-left: 1px dotted black;
+ border-right: 1px dotted black;
+}
+
+body table.cubierta td.v {
+ width: 10%;
+}
+
+body table.cubierta td.v-third {
+ width: 12%;
+}
+
+body table.cubierta td.v-first {
+ width: 28%;
+}
+
+body table.encuadernacion {
+ width: 100%;
+ font-size: 11px;
+ margin-bottom: 9px;
+}
+
+body table.encuadernacion th {
+ color: white;
+ font-size: 12px;
+ font-weight: lighter;
+ background: #8ac948;
+ padding: 3px;
+ padding-left: 8px;
+}
+
+body table.encuadernacion td {
+ border-bottom: 1px dotted black;
+ padding: 3px;
+}
+
+body table.encuadernacion td.t {
+ width: 18%;
+ font-weight: bold;
+ border-right: 1px dotted black;
+}
+
+body table.encuadernacion td.v {
+ width: 46%;
+}
+
+body table.encuadernacion td.v-first {
+ width: 7%;
+ border-left: 1px dotted black;
+ border-right: 1px dotted black;
+}
+
+body table.encuadernacion tdv.second {
+ width: 8%;
+ border-left: 1px dotted black;
+ border-right: 1px dotted black;
+}
+
+body table.encuadernacion td.t-first {
+ width: 8%;
+ font-weight: bold;
+ border-left: 1px dotted black;
+ border-right: 1px dotted black;
+}
+
+body table.encuadernacion td.t-second {
+ width: 9%;
+ font-weight: bold;
+ border-right: 1px dotted black;
+}
+
+body table.extras {
+ width: 100%;
+ font-size: 11px;
+ margin-bottom: 9px;
+}
+
+body table.extras th {
+ color: white;
+ font-size: 12px;
+ font-weight: lighter;
+ background: #0C2C84;
+ padding: 3px;
+ padding-left: 8px;
+}
+
+body table.extras td {
+ border-bottom: 1px dotted black;
+ padding: 3px;
+}
+
+body table.extras td.t {
+ width: 18%;
+ font-weight: bold;
+ border-right: 1px dotted black;
+}
+
+body table.envio {
+ width: 100%;
+ font-size: 11px;
+ margin-bottom: 9px;
+}
+
+body table.envio th {
+ color: white;
+ font-size: 12px;
+ font-weight: lighter;
+ background: #8ac948;
+ padding: 3px;
+ padding-left: 8px;
+}
+
+body table.envio td {
+ border-bottom: 1px dotted black;
+ padding: 3px;
+}
+
+body table.envio td.v {
+ width: 12%;
+ border-right: 1px dotted black;
+}
+
+body table.envio td.t-ejemplares,
+body table.envio td.t {
+ width: 9%;
+ font-weight: bold;
+ border-right: 1px dotted black;
+}
+
+body table.envio td.t-second {
+ width: 4%;
+ border-right: 1px dotted black;
+ font-weight: bold;
+}
+
+body table.envio td.v-second {
+ width: 5%;
+}
+
+body table.envio td.v-first,
+body table.envio td.v-third {
+ width: 12%;
+ border-right: 1px dotted black;
+}
+
+body table.envio td.v-third {
+ width: 16%;
+ border-right: 1px dotted black;
+}
+
+body table.envio td.t-first,
+body table.envio td.t-third,
+body table.envio td.t-fourth,
+body table.envio td.t-first-direccion,
+body table.envio td.t-first {
+ width: 8%;
+ font-weight: bold;
+ border-left: 1px dotted black;
+ border-right: 1px dotted black;
+}
+
+body table.totales {
+ width: 64%;
+ text-align: center;
+}
+
+body table.totales th {
+ width: 12%;
+ font-weight: bold;
+ font-size: 12px;
+ text-align: center;
+ color: white;
+ background: #0C2C84;
+ padding: 3px;
+}
+
+body table.totales th.u_envio_21 {
+ width: 16%;
+}
+
+body table.totales th.hidden {
+ background: none;
+}
+
+body table.totales td {
+ font-size: 12px;
+ font-weight: bold;
+ text-align: center;
+ border: 1px dotted #4e4e4e;
+ border-top: none;
+ padding: 3px;
+}
+
+body table.totales td.tirada {
+ width: 12%;
+ border-left: none;
+}
+
+body table.totales td.precio,
+body table.totales td.u_impresion_4 {
+ width: 12%;
+}
+
+body table.totales td.precio_ud {
+ width: 12%;
+ border-right: none;
+}
+
+body table.totales td.iva {
+ border: none;
+ text-align: right;
+ font-size: 10px;
+}
+
+body table.totales td.hidden {
+ border: none !important;
+}
+
+/* Presupuesto Manual */
+
+table.presupuesto-data td {
+ background: #e3e4e7;
+ padding-left: 15px;
+}
+
+table.presupuesto-data td.descripcion {
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+table.presupuesto-manual-lineas {
+ width: 100%;
+ margin-top: 20px;
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+
+table.presupuesto-manual-lineas tr.head-lineas-manual {
+ background: #688BC0;
+ color: white;
+}
+
+table.presupuesto-manual-lineas th {
+ font-size: 11pt;
+ font-weight: lighter;
+ padding: 5px !important;
+ color: white;
+ border-right: 1px solid white;
+}
+
+table.presupuesto-manual-lineas td {
+ padding: 10px !important;
+ font-size: 9pt;
+ color: black;
+ border: 1px dotted #4e4e4e;
+ border-top: none;
+}
+
+table.presupuesto-manual-lineas td.num_unidades {
+ border-left: none;
+}
+
+table.presupuesto-manual-lineas td.concepto {
+ border-right: none;
+}
+
+table.presupuesto-manual-lineas td.precio_unidad {
+ text-align: right;
+}
+
+table.presupuesto-manual-lineas td.total {
+ border-right: none;
+ text-align: right;
+}
+
+table.totales-manual {
+ width: 25%;
+ margin-top: 15px;
+ text-align: center;
+ padding: 3px;
+}
+
+table.totales-manual th {
+ font-weight: lighter;
+ font-size: 10pt;
+ padding: 5px;
+ text-align: center;
+ color: white;
+ background: #688BC0;
+ border-right: 1px solid white;
+}
+
+table.totales-manual td {
+ font-size: 9pt;
+ padding: 5px;
+ text-align: center;
+ border: 1px dotted #4e4e4e;
+ border-top: none;
+}
+
+table.totales-manual td.precio {
+ border-left: none;
+ border-right: none;
+}
+
+table.totales-manual td.iva {
+ border: none;
+ text-align: right;
+ font-size: 8pt;
+}
+
+.observaciones {
+ color: #0C2C84;
+ font-weight: bold;
+ margin-bottom: 0px;
+}
+
+div.comentarios {
+ font-size: 9pt;
+ border: 1px solid #ddd;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+div.footer {
+ font-size: 10pt;
+ text-align: left;
+}
+
+div.footer .texto-email {
+ font-weight: bold;
+}
+
+div.footer .texto-asteriscos {
+ font-size: 11px;
+}
+
+div.footer .texto-presupuesto {
+ color: black;
+ margin-top: 10px;
+ font-size: 7pt;
+}
+
+div.footer.servicios {
+ margin-top: 20px;
+}
+
+div.footer.tirada {
+ margin-top: 0px;
+}
+
+div.footer.sin-servicios {
+ margin-top: 82px;
+}
+
+/* Presup. y pedido maquetacion */
+
+table.pedido-maquetacion-lineas {
+ width: 100%;
+}
+
+table.pedido-maquetacion-lineas td {
+ padding: 3px;
+}
+
+table.pedido-maquetacion-totales {
+ margin-top: 10px;
+ margin-bottom: 60px;
+}
+
+table.pedido-maquetacion-totales td.iva_right {
+ font-size: 10px;
+ margin-top: 2px;
+}
+
+#tablacentral {
+ border-top-width: 0;
+ border-left-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 0;
+ text-align: center;
+ font-size: 9pt;
+}
+
+#tablanoborde {
+ border-top-width: 0;
+ border-left-width: 0;
+ border-right-width: 0;
+ border-bottom-width: 0;
+}
+
+#tabla {
+ border-style: solid;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ font-size: 7pt;
+ font-weight: bold;
+}
+
+#tabladato {
+ font-size: 9pt;
+ font-weight: normal;
+ float: center;
+}
+
+#tablaesquina {
+ border-style: solid;
+ border-top-width: 0;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 0;
+}
+
+#tdinteriorabajo {
+ border-top: none;
+ border-bottom: 1px solid;
+ border-left: 1px solid;
+ border-right: 1px solid;
+ text-align: center;
+ font-size: 10px;
+ height: -40px;
+}
+
+#tdinteriorarriba {
+ border-bottom: none;
+ border-top: 1px solid;
+ border-left: 1px solid;
+ border-right: 1px solid;
+ font-weight: bold;
+ font-size: 12px;
+ height: -40px;
+ padding-left: 2px;
+ padding-top: 1px;
+}
+
+#tdinteriorarribacliente {
+ border-top: 1px solid;
+ border-left: 1px solid;
+ border-bottom: 1px solid;
+ border-right: none;
+ font-weight: bold;
+ font-size: 12px;
+ height: -40px;
+ padding-left: 2px;
+ padding-top: 1px;
+}
+
+#tdinteriorarribaclientedato {
+ border-top: 1px solid;
+ border-left: none;
+ border-bottom: 1px solid;
+ border-right: 1px solid;
+ font-size: 12px;
+ height: -40px;
+ padding-left: 2px;
+ padding-top: 1px;
+}
+
+#tdniarribaniabajo {
+ border-bottom: none;
+ border-top: none;
+ border-left: 1px solid;
+ border-right: 1px solid;
+ font-size: 12px;
+ text-align: center;
+}
+
+#tdniarribaniabajoopciones {
+ border-bottom: none;
+ border-top: none;
+ border-left: 1px solid;
+ border-right: 1px solid;
+ font-size: 10px;
+}
+
+#tdniarribaniabajo2 {
+ border-bottom: none;
+ border-top: 1px solid;
+ border-left: 1px solid;
+ border-right: 1px solid;
+ font-size: 12px;
+ text-align: center;
+ font-weight: bold;
+}
+
+#tdniarribaniabajo3 {
+ border-bottom: 1px solid;
+ border-top: none;
+ border-left: 1px solid;
+ border-right: 1px solid;
+ font-size: 12px;
+ text-align: center;
+}
+
+#subtdabajocentro {
+ border-bottom: 1px solid;
+ border-top: none;
+ border-left: 1px solid;
+ border-right: 1px solid;
+ text-align: center;
+ font-size: 9pt;
+}
+
+#subtd {
+ border-top: none;
+ border-bottom: 1px solid;
+ border-left: 1px solid;
+ border-right: 1px solid;
+ text-align: center;
+ font-size: 12px;
+}
+
+#subtdcen {
+ border-top: none;
+ border-bottom: 1px solid #919191;
+ border-left: 1px solid #919191;
+ border-right: 1px solid #919191;
+ text-align: center;
+ font-size: 12px;
+ background-color: #77B2D0;
+ color: white;
+}
+
+#subtdizq {
+ border-top: none;
+ border-bottom: 1px solid #919191;
+ border-right: 1px solid #919191;
+ text-align: center;
+ font-size: 12px;
+ color: white;
+ background-color: #77B2D0;
+}
+
+#subtdder {
+ border-top: none;
+ border-bottom: 1px solid #919191;
+ border-left: 1px solid #919191;
+ text-align: center;
+ font-size: 12px;
+ color: white;
+ background-color: #77B2D0;
+}
+
+#tdarriba {
+ border-bottom: none;
+ border-top: 1px solid;
+ border-left: 1px solid;
+ border-right: 1px solid;
+ font-size: 12px;
+}
+
+#tdarribaopciones {
+ border-bottom: none;
+ border-top: 1px solid;
+ border-left: 1px solid;
+ border-right: 1px solid;
+ font-size: 10px;
+}
+
+#tdabajo {
+ border-bottom: 1px solid;
+ border-top: none;
+ border-left: 1px solid;
+ border-right: 1px solid;
+ font-size: 12px;
+}
+
+#dato {
+ text-align: center;
+ font-size: 9pt;
+}
+
+#subrayado {
+ font-size: 9pt;
+ border-bottom: 1px solid;
+}
+
+#td {
+ font-size: 12px;
+}
+
+#tdopciones {
+ font-size: 10px;
+}
\ No newline at end of file
diff --git a/httpdocs/themes/vuexy/css/sk-datatables.css b/httpdocs/themes/vuexy/css/sk-datatables.css
index 00678af4..391c2e1c 100644
--- a/httpdocs/themes/vuexy/css/sk-datatables.css
+++ b/httpdocs/themes/vuexy/css/sk-datatables.css
@@ -40,4 +40,59 @@ table.dataTable.table-hover>tbody>tr.selected:hover>* {
.comparator-table td.dt-result-value {
text-align: left;
-}
\ No newline at end of file
+}
+
+
+.lp-cell {
+ padding-left: 1px;
+ padding-right: 1px;
+ margin:0;
+}
+
+.lp-input {
+ text-align: center;
+ min-width: 50px;
+ width: 100%;
+ border-radius: 0.25rem !important;
+}
+
+.lp-select {
+ padding-top: 2px;
+ padding-bottom: 2px;
+ width: 100%;
+ font-size:0.7rem !important;
+}
+
+.lp-td {
+ padding-left: 1px;
+ padding-right: 1px;
+ margin:0 !important;
+}
+
+.lp-header {
+ text-align: center !important;
+ padding-left: 1px !important;
+ padding-right: 1px !important;
+ padding-top: 1px !important;
+ padding-bottom: 5px !important;
+ margin:0 !important;
+}
+
+.lp-cell-disabled {
+ background-color: Gainsboro;
+}
+
+.lp-button{
+ font-size: 1.1em;
+ padding-left: 3px;
+ padding-right: 3px;
+ width: 100%;
+ height: 25px;
+ margin-top: 6px;
+}
+
+div.draw-shapes {
+ width: 95%;
+ height: 500px;
+ margin: 2.5% auto;
+}
diff --git a/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_bn.png b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_bn.png
new file mode 100644
index 00000000..06760f58
Binary files /dev/null and b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_bn.png differ
diff --git a/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_bnhq.png b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_bnhq.png
new file mode 100644
index 00000000..048d8f5c
Binary files /dev/null and b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_bnhq.png differ
diff --git a/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_color.png b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_color.png
new file mode 100644
index 00000000..f6998df1
Binary files /dev/null and b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_color.png differ
diff --git a/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_colorhq.png b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_colorhq.png
new file mode 100644
index 00000000..ded1346f
Binary files /dev/null and b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_colorhq.png differ
diff --git a/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_cubierta.png b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_cubierta.png
new file mode 100644
index 00000000..04eecc28
Binary files /dev/null and b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_cubierta.png differ
diff --git a/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_rotativa_bn.png b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_rotativa_bn.png
new file mode 100644
index 00000000..5ddc5005
Binary files /dev/null and b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_rotativa_bn.png differ
diff --git a/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_rotativa_color.png b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_rotativa_color.png
new file mode 100644
index 00000000..5eed3901
Binary files /dev/null and b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_rotativa_color.png differ
diff --git a/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_sobrecubierta.png b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_sobrecubierta.png
new file mode 100644
index 00000000..910a26ca
Binary files /dev/null and b/httpdocs/themes/vuexy/img/safekat/presupuestos/icon_sobrecubierta.png differ
diff --git a/httpdocs/themes/vuexy/vendor/libs/two/two.js b/httpdocs/themes/vuexy/vendor/libs/two/two.js
new file mode 100644
index 00000000..72a57d29
--- /dev/null
+++ b/httpdocs/themes/vuexy/vendor/libs/two/two.js
@@ -0,0 +1,10675 @@
+/*
+MIT License
+
+Copyright (c) 2012 - 2021 @jonobr1 / http://jono.fyi
+
+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.
+*/
+var Two = (() => {
+ var __defProp = Object.defineProperty;
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames = Object.getOwnPropertyNames;
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+ var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+ };
+ var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+ };
+ var __toCommonJS = (mod2) => __copyProps(__defProp({}, "__esModule", { value: true }), mod2);
+ var __publicField = (obj, key, value) => {
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
+ return value;
+ };
+
+ // src/two.js
+ var two_exports = {};
+ __export(two_exports, {
+ default: () => Two
+ });
+
+ // src/utils/path-commands.js
+ var Commands = {
+ move: "M",
+ line: "L",
+ curve: "C",
+ arc: "A",
+ close: "Z"
+ };
+
+ // src/utils/math.js
+ var math_exports = {};
+ __export(math_exports, {
+ HALF_PI: () => HALF_PI,
+ NumArray: () => NumArray,
+ TWO_PI: () => TWO_PI,
+ decomposeMatrix: () => decomposeMatrix,
+ getComputedMatrix: () => getComputedMatrix,
+ getPoT: () => getPoT,
+ lerp: () => lerp,
+ mod: () => mod,
+ setMatrix: () => setMatrix,
+ toFixed: () => toFixed
+ });
+
+ // src/utils/root.js
+ var root;
+ if (typeof window !== "undefined") {
+ root = window;
+ } else if (typeof global !== "undefined") {
+ root = global;
+ } else if (typeof self !== "undefined") {
+ root = self;
+ }
+
+ // src/utils/math.js
+ var Matrix;
+ var TWO_PI = Math.PI * 2;
+ var HALF_PI = Math.PI * 0.5;
+ function decomposeMatrix(matrix, b, c, d, e, f) {
+ let a;
+ if (arguments.length <= 1) {
+ a = matrix.a;
+ b = matrix.b;
+ c = matrix.c;
+ d = matrix.d;
+ e = matrix.e;
+ f = matrix.f;
+ } else {
+ a = matrix;
+ }
+ return {
+ translateX: e,
+ translateY: f,
+ scaleX: Math.sqrt(a * a + b * b),
+ scaleY: Math.sqrt(c * c + d * d),
+ rotation: 180 * Math.atan2(b, a) / Math.PI
+ };
+ }
+ function setMatrix(matrix) {
+ Matrix = matrix;
+ }
+ function getComputedMatrix(object, matrix) {
+ matrix = matrix && matrix.identity() || new Matrix();
+ let parent = object;
+ const matrices = [];
+ while (parent && parent._matrix) {
+ matrices.push(parent._matrix);
+ parent = parent.parent;
+ }
+ matrices.reverse();
+ for (let i = 0; i < matrices.length; i++) {
+ const m = matrices[i];
+ const e = m.elements;
+ matrix.multiply(
+ e[0],
+ e[1],
+ e[2],
+ e[3],
+ e[4],
+ e[5],
+ e[6],
+ e[7],
+ e[8],
+ e[9]
+ );
+ }
+ return matrix;
+ }
+ function lerp(a, b, t) {
+ return t * (b - a) + a;
+ }
+ var pots = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096];
+ function getPoT(value) {
+ let i = 0;
+ while (pots[i] && pots[i] < value) {
+ i++;
+ }
+ return pots[i];
+ }
+ function mod(v, l) {
+ while (v < 0) {
+ v += l;
+ }
+ return v % l;
+ }
+ var NumArray = root.Float32Array || Array;
+ var floor = Math.floor;
+ function toFixed(v) {
+ return floor(v * 1e6) / 1e6;
+ }
+
+ // src/utils/curves.js
+ var curves_exports = {};
+ __export(curves_exports, {
+ Curve: () => Curve,
+ getAnchorsFromArcData: () => getAnchorsFromArcData,
+ getComponentOnCubicBezier: () => getComponentOnCubicBezier,
+ getControlPoints: () => getControlPoints,
+ getCurveBoundingBox: () => getCurveBoundingBox,
+ getCurveFromPoints: () => getCurveFromPoints,
+ getCurveLength: () => getCurveLength,
+ getReflection: () => getReflection,
+ integrate: () => integrate,
+ subdivide: () => subdivide
+ });
+
+ // src/events.js
+ var Events = class {
+ _events = {};
+ _bound = false;
+ constructor() {
+ }
+ addEventListener(name, handler) {
+ const list = this._events[name] || (this._events[name] = []);
+ list.push(handler);
+ this._bound = true;
+ return this;
+ }
+ on() {
+ return this.addEventListener.apply(this, arguments);
+ }
+ bind() {
+ return this.addEventListener.apply(this, arguments);
+ }
+ removeEventListener(name, handler) {
+ if (!this._events) {
+ return this;
+ }
+ if (!name && !handler) {
+ this._events = {};
+ this._bound = false;
+ return this;
+ }
+ const names = name ? [name] : Object.keys(this._events);
+ for (let i = 0, l = names.length; i < l; i++) {
+ name = names[i];
+ let list = this._events[name];
+ if (list) {
+ let events = [];
+ if (handler) {
+ for (let j = 0, k = list.length; j < k; j++) {
+ let e = list[j];
+ e = e.handler ? e.handler : e;
+ if (handler !== e) {
+ events.push(e);
+ }
+ }
+ }
+ this._events[name] = events;
+ }
+ }
+ return this;
+ }
+ off() {
+ return this.removeEventListener.apply(this, arguments);
+ }
+ unbind() {
+ return this.removeEventListener.apply(this, arguments);
+ }
+ dispatchEvent(name) {
+ if (!this._events) {
+ return this;
+ }
+ const args = Array.prototype.slice.call(arguments, 1);
+ const events = this._events[name];
+ if (events) {
+ for (let i = 0; i < events.length; i++) {
+ events[i].call(this, ...args);
+ }
+ }
+ return this;
+ }
+ trigger() {
+ return this.dispatchEvent.apply(this, arguments);
+ }
+ listen(obj, name, handler) {
+ const scope = this;
+ if (obj) {
+ e.obj = obj;
+ e.name = name;
+ e.handler = handler;
+ obj.on(name, e);
+ }
+ function e() {
+ handler.apply(scope, arguments);
+ }
+ return scope;
+ }
+ ignore(obj, name, handler) {
+ obj.off(name, handler);
+ return this;
+ }
+ };
+ __publicField(Events, "Types", {
+ play: "play",
+ pause: "pause",
+ update: "update",
+ render: "render",
+ resize: "resize",
+ change: "change",
+ remove: "remove",
+ insert: "insert",
+ order: "order",
+ load: "load"
+ });
+ __publicField(Events, "Methods", [
+ "addEventListener",
+ "on",
+ "removeEventListener",
+ "off",
+ "unbind",
+ "dispatchEvent",
+ "trigger",
+ "listen",
+ "ignore"
+ ]);
+
+ // src/vector.js
+ var proto = {
+ x: {
+ enumerable: true,
+ get: function() {
+ return this._x;
+ },
+ set: function(v) {
+ if (this._x !== v) {
+ this._x = v;
+ if (this._bound) {
+ this.dispatchEvent(Events.Types.change);
+ }
+ }
+ }
+ },
+ y: {
+ enumerable: true,
+ get: function() {
+ return this._y;
+ },
+ set: function(v) {
+ if (this._y !== v) {
+ this._y = v;
+ if (this._bound) {
+ this.dispatchEvent(Events.Types.change);
+ }
+ }
+ }
+ }
+ };
+ var _Vector = class extends Events {
+ _x = 0;
+ _y = 0;
+ constructor(x = 0, y = 0) {
+ super();
+ for (let prop in proto) {
+ Object.defineProperty(this, prop, proto[prop]);
+ }
+ this.x = x;
+ this.y = y;
+ }
+ static add(v1, v2) {
+ return new _Vector(v1.x + v2.x, v1.y + v2.y);
+ }
+ static sub(v1, v2) {
+ return new _Vector(v1.x - v2.x, v1.y - v2.y);
+ }
+ static subtract(v1, v2) {
+ return _Vector.sub(v1, v2);
+ }
+ static ratioBetween(v1, v2) {
+ return (v1.x * v2.x + v1.y * v2.y) / (v1.length() * v2.length());
+ }
+ static angleBetween(v1, v2) {
+ if (arguments.length >= 4) {
+ const dx2 = arguments[0] - arguments[2];
+ const dy2 = arguments[1] - arguments[3];
+ return Math.atan2(dy2, dx2);
+ }
+ const dx = v1.x - v2.x;
+ const dy = v1.y - v2.y;
+ return Math.atan2(dy, dx);
+ }
+ static distanceBetween(v1, v2) {
+ return Math.sqrt(_Vector.distanceBetweenSquared(v1, v2));
+ }
+ static distanceBetweenSquared(v1, v2) {
+ const dx = v1.x - v2.x;
+ const dy = v1.y - v2.y;
+ return dx * dx + dy * dy;
+ }
+ set(x, y) {
+ this.x = x;
+ this.y = y;
+ return this;
+ }
+ copy(v) {
+ this.x = v.x;
+ this.y = v.y;
+ return this;
+ }
+ clear() {
+ this.x = 0;
+ this.y = 0;
+ return this;
+ }
+ clone() {
+ return new _Vector(this.x, this.y);
+ }
+ add(x, y) {
+ if (arguments.length <= 0) {
+ return this;
+ } else if (arguments.length <= 1) {
+ if (typeof x === "number") {
+ this.x += x;
+ this.y += x;
+ } else if (x && typeof x.x === "number" && typeof x.y === "number") {
+ this.x += x.x;
+ this.y += x.y;
+ }
+ } else {
+ this.x += x;
+ this.y += y;
+ }
+ return this;
+ }
+ addSelf(v) {
+ return this.add.apply(this, arguments);
+ }
+ sub(x, y) {
+ if (arguments.length <= 0) {
+ return this;
+ } else if (arguments.length <= 1) {
+ if (typeof x === "number") {
+ this.x -= x;
+ this.y -= x;
+ } else if (x && typeof x.x === "number" && typeof x.y === "number") {
+ this.x -= x.x;
+ this.y -= x.y;
+ }
+ } else {
+ this.x -= x;
+ this.y -= y;
+ }
+ return this;
+ }
+ subtract() {
+ return this.sub.apply(this, arguments);
+ }
+ subSelf(v) {
+ return this.sub.apply(this, arguments);
+ }
+ subtractSelf(v) {
+ return this.sub.apply(this, arguments);
+ }
+ multiply(x, y) {
+ if (arguments.length <= 0) {
+ return this;
+ } else if (arguments.length <= 1) {
+ if (typeof x === "number") {
+ this.x *= x;
+ this.y *= x;
+ } else if (x && typeof x.x === "number" && typeof x.y === "number") {
+ this.x *= x.x;
+ this.y *= x.y;
+ }
+ } else {
+ this.x *= x;
+ this.y *= y;
+ }
+ return this;
+ }
+ multiplySelf(v) {
+ return this.multiply.apply(this, arguments);
+ }
+ multiplyScalar(s) {
+ return this.multiply(s);
+ }
+ divide(x, y) {
+ if (arguments.length <= 0) {
+ return this;
+ } else if (arguments.length <= 1) {
+ if (typeof x === "number") {
+ this.x /= x;
+ this.y /= x;
+ } else if (x && typeof x.x === "number" && typeof x.y === "number") {
+ this.x /= x.x;
+ this.y /= x.y;
+ }
+ } else {
+ this.x /= x;
+ this.y /= y;
+ }
+ if (isNaN(this.x)) {
+ this.x = 0;
+ }
+ if (isNaN(this.y)) {
+ this.y = 0;
+ }
+ return this;
+ }
+ divideSelf(v) {
+ return this.divide.apply(this, arguments);
+ }
+ divideScalar(s) {
+ return this.divide(s);
+ }
+ negate() {
+ return this.multiply(-1);
+ }
+ dot(v) {
+ return this.x * v.x + this.y * v.y;
+ }
+ length() {
+ return Math.sqrt(this.lengthSquared());
+ }
+ lengthSquared() {
+ return this.x * this.x + this.y * this.y;
+ }
+ normalize() {
+ return this.divideScalar(this.length());
+ }
+ distanceTo(v) {
+ return Math.sqrt(this.distanceToSquared(v));
+ }
+ distanceToSquared(v) {
+ const dx = this.x - v.x;
+ const dy = this.y - v.y;
+ return dx * dx + dy * dy;
+ }
+ setLength(l) {
+ return this.normalize().multiplyScalar(l);
+ }
+ equals(v, eps) {
+ eps = typeof eps === "undefined" ? 1e-4 : eps;
+ return this.distanceTo(v) < eps;
+ }
+ lerp(v, t) {
+ const x = (v.x - this.x) * t + this.x;
+ const y = (v.y - this.y) * t + this.y;
+ return this.set(x, y);
+ }
+ isZero(eps) {
+ eps = typeof eps === "undefined" ? 1e-4 : eps;
+ return this.length() < eps;
+ }
+ toString() {
+ return this.x + ", " + this.y;
+ }
+ toObject() {
+ return { x: this.x, y: this.y };
+ }
+ rotate(radians) {
+ const x = this.x;
+ const y = this.y;
+ const cos7 = Math.cos(radians);
+ const sin7 = Math.sin(radians);
+ this.x = x * cos7 - y * sin7;
+ this.y = x * sin7 + y * cos7;
+ return this;
+ }
+ };
+ var Vector = _Vector;
+ __publicField(Vector, "zero", new _Vector());
+ __publicField(Vector, "left", new _Vector(-1, 0));
+ __publicField(Vector, "right", new _Vector(1, 0));
+ __publicField(Vector, "up", new _Vector(0, -1));
+ __publicField(Vector, "down", new _Vector(0, 1));
+
+ // src/anchor.js
+ var Anchor = class extends Vector {
+ controls = {
+ left: new Vector(),
+ right: new Vector()
+ };
+ _command = Commands.move;
+ _relative = true;
+ _rx = 0;
+ _ry = 0;
+ _xAxisRotation = 0;
+ _largeArcFlag = 0;
+ _sweepFlag = 1;
+ constructor(x = 0, y = 0, ax = 0, ay = 0, bx = 0, by = 0, command = Commands.move) {
+ super(x, y);
+ for (let prop in proto2) {
+ Object.defineProperty(this, prop, proto2[prop]);
+ }
+ this.command = command;
+ this.relative = true;
+ const broadcast = Anchor.makeBroadcast(this);
+ this.controls.left.set(ax, ay).addEventListener(Events.Types.change, broadcast);
+ this.controls.right.set(bx, by).addEventListener(Events.Types.change, broadcast);
+ }
+ static makeBroadcast(scope) {
+ return broadcast;
+ function broadcast() {
+ if (scope._bound) {
+ scope.dispatchEvent(Events.Types.change);
+ }
+ }
+ }
+ copy(v) {
+ this.x = v.x;
+ this.y = v.y;
+ if (typeof v.command === "string") {
+ this.command = v.command;
+ }
+ if (v.controls) {
+ if (v.controls.left) {
+ this.controls.left.copy(v.controls.left);
+ }
+ if (v.controls.right) {
+ this.controls.right.copy(v.controls.right);
+ }
+ }
+ if (typeof v.relative === "boolean") {
+ this.relative = v.relative;
+ }
+ if (typeof v.rx === "number") {
+ this.rx = v.rx;
+ }
+ if (typeof v.ry === "number") {
+ this.ry = v.ry;
+ }
+ if (typeof v.xAxisRotation === "number") {
+ this.xAxisRotation = v.xAxisRotation;
+ }
+ if (typeof v.largeArcFlag === "number") {
+ this.largeArcFlag = v.largeArcFlag;
+ }
+ if (typeof v.sweepFlag === "number") {
+ this.sweepFlag = v.sweepFlag;
+ }
+ return this;
+ }
+ clone() {
+ return new Anchor().copy(this);
+ }
+ toObject() {
+ return {
+ x: this.x,
+ y: this.y,
+ command: this.command,
+ relative: this.relative,
+ controls: {
+ left: this.controls.left.toObject(),
+ right: this.controls.right.toObject()
+ },
+ rx: this.rx,
+ ry: this.ry,
+ xAxisRotation: this.xAxisRotation,
+ largeArcFlag: this.largeArcFlag,
+ sweepFlag: this.sweepFlag
+ };
+ }
+ toString() {
+ return JSON.stringify(this.toObject());
+ }
+ };
+ var proto2 = {
+ command: {
+ enumerable: true,
+ get: function() {
+ return this._command;
+ },
+ set: function(command) {
+ if (this._command !== command) {
+ this._command = command;
+ if (this._bound) {
+ this.dispatchEvent(Events.Types.change);
+ }
+ }
+ }
+ },
+ relative: {
+ enumerable: true,
+ get: function() {
+ return this._relative;
+ },
+ set: function(relative) {
+ if (this._relative !== !!relative) {
+ this._relative = !!relative;
+ if (this._bound) {
+ this.dispatchEvent(Events.Types.change);
+ }
+ }
+ }
+ },
+ rx: {
+ enumerable: true,
+ get: function() {
+ return this._rx;
+ },
+ set: function(rx) {
+ if (this._rx !== rx) {
+ this._rx = rx;
+ if (this._bound) {
+ this.dispatchEvent(Events.Types.change);
+ }
+ }
+ }
+ },
+ ry: {
+ enumerable: true,
+ get: function() {
+ return this._ry;
+ },
+ set: function(ry) {
+ if (this._ry !== ry) {
+ this._ry = ry;
+ if (this._bound) {
+ this.dispatchEvent(Events.Types.change);
+ }
+ }
+ }
+ },
+ xAxisRotation: {
+ enumerable: true,
+ get: function() {
+ return this._xAxisRotation;
+ },
+ set: function(xAxisRotation) {
+ if (this._xAxisRotation !== xAxisRotation) {
+ this._xAxisRotation = xAxisRotation;
+ if (this._bound) {
+ this.dispatchEvent(Events.Types.change);
+ }
+ }
+ }
+ },
+ largeArcFlag: {
+ enumerable: true,
+ get: function() {
+ return this._largeArcFlag;
+ },
+ set: function(largeArcFlag) {
+ if (this._largeArcFlag !== largeArcFlag) {
+ this._largeArcFlag = largeArcFlag;
+ if (this._bound) {
+ this.dispatchEvent(Events.Types.change);
+ }
+ }
+ }
+ },
+ sweepFlag: {
+ get: function() {
+ return this._sweepFlag;
+ },
+ set: function(sweepFlag) {
+ if (this._sweepFlag !== sweepFlag) {
+ this._sweepFlag = sweepFlag;
+ if (this._bound) {
+ this.dispatchEvent(Events.Types.change);
+ }
+ }
+ }
+ }
+ };
+
+ // src/constants.js
+ var count = 0;
+ var Constants = {
+ nextFrameID: null,
+ Types: {
+ webgl: "WebGLRenderer",
+ svg: "SVGRenderer",
+ canvas: "CanvasRenderer"
+ },
+ Version: "v0.8.12",
+ PublishDate: "2023-10-16T17:55:26.551Z",
+ Identifier: "two-",
+ Resolution: 12,
+ AutoCalculateImportedMatrices: true,
+ Instances: [],
+ uniqueId: function() {
+ return count++;
+ }
+ };
+
+ // src/utils/curves.js
+ var Curve = {
+ CollinearityEpsilon: Math.pow(10, -30),
+ RecursionLimit: 16,
+ CuspLimit: 0,
+ Tolerance: {
+ distance: 0.25,
+ angle: 0,
+ epsilon: Number.EPSILON
+ },
+ abscissas: [
+ [0.5773502691896257],
+ [0, 0.7745966692414834],
+ [0.33998104358485626, 0.8611363115940526],
+ [0, 0.5384693101056831, 0.906179845938664],
+ [0.2386191860831969, 0.6612093864662645, 0.932469514203152],
+ [0, 0.4058451513773972, 0.7415311855993945, 0.9491079123427585],
+ [0.1834346424956498, 0.525532409916329, 0.7966664774136267, 0.9602898564975363],
+ [0, 0.3242534234038089, 0.6133714327005904, 0.8360311073266358, 0.9681602395076261],
+ [0.14887433898163122, 0.4333953941292472, 0.6794095682990244, 0.8650633666889845, 0.9739065285171717],
+ [0, 0.26954315595234496, 0.5190961292068118, 0.7301520055740494, 0.8870625997680953, 0.978228658146057],
+ [0.1252334085114689, 0.3678314989981802, 0.5873179542866175, 0.7699026741943047, 0.9041172563704749, 0.9815606342467192],
+ [0, 0.2304583159551348, 0.44849275103644687, 0.6423493394403402, 0.8015780907333099, 0.9175983992229779, 0.9841830547185881],
+ [0.10805494870734367, 0.31911236892788974, 0.5152486363581541, 0.6872929048116855, 0.827201315069765, 0.9284348836635735, 0.9862838086968123],
+ [0, 0.20119409399743451, 0.3941513470775634, 0.5709721726085388, 0.7244177313601701, 0.8482065834104272, 0.937273392400706, 0.9879925180204854],
+ [0.09501250983763744, 0.2816035507792589, 0.45801677765722737, 0.6178762444026438, 0.755404408355003, 0.8656312023878318, 0.9445750230732326, 0.9894009349916499]
+ ],
+ weights: [
+ [1],
+ [0.8888888888888888, 0.5555555555555556],
+ [0.6521451548625461, 0.34785484513745385],
+ [0.5688888888888889, 0.47862867049936647, 0.23692688505618908],
+ [0.46791393457269104, 0.3607615730481386, 0.17132449237917036],
+ [0.4179591836734694, 0.3818300505051189, 0.27970539148927664, 0.1294849661688697],
+ [0.362683783378362, 0.31370664587788727, 0.22238103445337448, 0.10122853629037626],
+ [0.3302393550012598, 0.31234707704000286, 0.26061069640293544, 0.1806481606948574, 0.08127438836157441],
+ [0.29552422471475287, 0.26926671930999635, 0.21908636251598204, 0.1494513491505806, 0.06667134430868814],
+ [0.2729250867779006, 0.26280454451024665, 0.23319376459199048, 0.18629021092773426, 0.1255803694649046, 0.05566856711617366],
+ [0.24914704581340277, 0.2334925365383548, 0.20316742672306592, 0.16007832854334622, 0.10693932599531843, 0.04717533638651183],
+ [0.2325515532308739, 0.22628318026289723, 0.2078160475368885, 0.17814598076194574, 0.13887351021978725, 0.09212149983772845, 0.04048400476531588],
+ [0.2152638534631578, 0.2051984637212956, 0.18553839747793782, 0.15720316715819355, 0.12151857068790319, 0.08015808715976021, 0.03511946033175186],
+ [0.2025782419255613, 0.19843148532711158, 0.1861610000155622, 0.16626920581699392, 0.13957067792615432, 0.10715922046717194, 0.07036604748810812, 0.03075324199611727],
+ [0.1894506104550685, 0.18260341504492358, 0.16915651939500254, 0.14959598881657674, 0.12462897125553388, 0.09515851168249279, 0.062253523938647894, 0.027152459411754096]
+ ]
+ };
+ function getComponentOnCubicBezier(t, a, b, c, d) {
+ const k = 1 - t;
+ return k * k * k * a + 3 * k * k * t * b + 3 * k * t * t * c + t * t * t * d;
+ }
+ function subdivide(x1, y1, x2, y2, x3, y3, x4, y4, limit) {
+ limit = limit || Curve.RecursionLimit;
+ const amount = limit + 1;
+ if (Math.abs(x1 - x4) < 1e-3 && Math.abs(y1 - y4) < 1e-3) {
+ return [new Anchor(x4, y4)];
+ }
+ const result = [];
+ for (let i = 0; i < amount; i++) {
+ const t = i / amount;
+ const x = getComponentOnCubicBezier(t, x1, x2, x3, x4);
+ const y = getComponentOnCubicBezier(t, y1, y2, y3, y4);
+ result.push(new Anchor(x, y));
+ }
+ return result;
+ }
+ function getCurveLength(x1, y1, x2, y2, x3, y3, x4, y4, limit) {
+ if (x1 === x2 && y1 === y2 && x3 === x4 && y3 === y4) {
+ const dx = x4 - x1;
+ const dy = y4 - y1;
+ return Math.sqrt(dx * dx + dy * dy);
+ }
+ const ax = 9 * (x2 - x3) + 3 * (x4 - x1), bx = 6 * (x1 + x3) - 12 * x2, cx = 3 * (x2 - x1), ay = 9 * (y2 - y3) + 3 * (y4 - y1), by = 6 * (y1 + y3) - 12 * y2, cy = 3 * (y2 - y1);
+ function integrand(t) {
+ const dx = (ax * t + bx) * t + cx, dy = (ay * t + by) * t + cy;
+ return Math.sqrt(dx * dx + dy * dy);
+ }
+ return integrate(
+ integrand,
+ 0,
+ 1,
+ limit || Curve.RecursionLimit
+ );
+ }
+ function getCurveBoundingBox(x1, y1, x2, y2, x3, y3, x4, y4) {
+ const tvalues = [];
+ const bounds = [[], []];
+ let a, b, c, t, t1, t2, b2ac, sqrtb2ac;
+ for (let i = 0; i < 2; ++i) {
+ if (i == 0) {
+ b = 6 * x1 - 12 * x2 + 6 * x3;
+ a = -3 * x1 + 9 * x2 - 9 * x3 + 3 * x4;
+ c = 3 * x2 - 3 * x1;
+ } else {
+ b = 6 * y1 - 12 * y2 + 6 * y3;
+ a = -3 * y1 + 9 * y2 - 9 * y3 + 3 * y4;
+ c = 3 * y2 - 3 * y1;
+ }
+ if (Math.abs(a) < 1e-12) {
+ if (Math.abs(b) < 1e-12) {
+ continue;
+ }
+ t = -c / b;
+ if (0 < t && t < 1) {
+ tvalues.push(t);
+ }
+ continue;
+ }
+ b2ac = b * b - 4 * c * a;
+ sqrtb2ac = Math.sqrt(b2ac);
+ if (b2ac < 0) {
+ continue;
+ }
+ t1 = (-b + sqrtb2ac) / (2 * a);
+ if (0 < t1 && t1 < 1) {
+ tvalues.push(t1);
+ }
+ t2 = (-b - sqrtb2ac) / (2 * a);
+ if (0 < t2 && t2 < 1) {
+ tvalues.push(t2);
+ }
+ }
+ let j = tvalues.length;
+ let jlen = j;
+ let mt;
+ while (j--) {
+ t = tvalues[j];
+ mt = 1 - t;
+ bounds[0][j] = mt * mt * mt * x1 + 3 * mt * mt * t * x2 + 3 * mt * t * t * x3 + t * t * t * x4;
+ bounds[1][j] = mt * mt * mt * y1 + 3 * mt * mt * t * y2 + 3 * mt * t * t * y3 + t * t * t * y4;
+ }
+ bounds[0][jlen] = x1;
+ bounds[1][jlen] = y1;
+ bounds[0][jlen + 1] = x4;
+ bounds[1][jlen + 1] = y4;
+ bounds[0].length = bounds[1].length = jlen + 2;
+ return {
+ min: { x: Math.min.apply(0, bounds[0]), y: Math.min.apply(0, bounds[1]) },
+ max: { x: Math.max.apply(0, bounds[0]), y: Math.max.apply(0, bounds[1]) }
+ };
+ }
+ function integrate(f, a, b, n) {
+ let x = Curve.abscissas[n - 2], w = Curve.weights[n - 2], A = 0.5 * (b - a), B = A + a, i = 0, m = n + 1 >> 1, sum = n & 1 ? w[i++] * f(B) : 0;
+ while (i < m) {
+ const Ax = A * x[i];
+ sum += w[i++] * (f(B + Ax) + f(B - Ax));
+ }
+ return A * sum;
+ }
+ function getCurveFromPoints(points, closed2) {
+ const l = points.length, last = l - 1;
+ for (let i = 0; i < l; i++) {
+ const point = points[i];
+ const prev = closed2 ? mod(i - 1, l) : Math.max(i - 1, 0);
+ const next = closed2 ? mod(i + 1, l) : Math.min(i + 1, last);
+ const a = points[prev];
+ const b = point;
+ const c = points[next];
+ getControlPoints(a, b, c);
+ b.command = i === 0 ? Commands.move : Commands.curve;
+ }
+ }
+ function getControlPoints(a, b, c) {
+ const a1 = Vector.angleBetween(a, b);
+ const a2 = Vector.angleBetween(c, b);
+ let d1 = Vector.distanceBetween(a, b);
+ let d2 = Vector.distanceBetween(c, b);
+ let mid = (a1 + a2) / 2;
+ if (d1 < 1e-4 || d2 < 1e-4) {
+ if (typeof b.relative === "boolean" && !b.relative) {
+ b.controls.left.copy(b);
+ b.controls.right.copy(b);
+ }
+ return b;
+ }
+ d1 *= 0.33;
+ d2 *= 0.33;
+ if (a2 < a1) {
+ mid += HALF_PI;
+ } else {
+ mid -= HALF_PI;
+ }
+ b.controls.left.x = Math.cos(mid) * d1;
+ b.controls.left.y = Math.sin(mid) * d1;
+ mid -= Math.PI;
+ b.controls.right.x = Math.cos(mid) * d2;
+ b.controls.right.y = Math.sin(mid) * d2;
+ if (typeof b.relative === "boolean" && !b.relative) {
+ b.controls.left.x += b.x;
+ b.controls.left.y += b.y;
+ b.controls.right.x += b.x;
+ b.controls.right.y += b.y;
+ }
+ return b;
+ }
+ function getReflection(a, b, relative) {
+ return new Vector(
+ 2 * a.x - (b.x + a.x) - (relative ? a.x : 0),
+ 2 * a.y - (b.y + a.y) - (relative ? a.y : 0)
+ );
+ }
+ function getAnchorsFromArcData(center, xAxisRotation, rx, ry, ts, td, ccw) {
+ const resolution = Constants.Resolution;
+ const anchors = [];
+ for (let i = 0; i < resolution; i++) {
+ let pct = (i + 1) / resolution;
+ if (ccw) {
+ pct = 1 - pct;
+ }
+ const theta = pct * td + ts;
+ const x = rx * Math.cos(theta);
+ const y = ry * Math.sin(theta);
+ const anchor2 = new Anchor(x, y);
+ anchor2.command = Commands.line;
+ anchors.push(anchor2);
+ }
+ }
+
+ // src/utils/device-pixel-ratio.js
+ var devicePixelRatio = root.devicePixelRatio || 1;
+ function getBackingStoreRatio(ctx) {
+ return ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;
+ }
+ function getRatio(ctx) {
+ return devicePixelRatio / getBackingStoreRatio(ctx);
+ }
+
+ // src/utils/underscore.js
+ var slice = Array.prototype.slice;
+ function isArrayLike(collection) {
+ if (collection === null || collection === void 0)
+ return false;
+ const length = collection.length;
+ return typeof length == "number" && length >= 0 && length < 4294967296;
+ }
+ var _ = {
+ isNaN: function(obj) {
+ return typeof obj === "number" && obj !== +obj;
+ },
+ isElement: function(obj) {
+ return !!(obj && obj.nodeType === 1);
+ },
+ isObject: function(obj) {
+ const type = typeof obj;
+ return type === "function" || type === "object" && !!obj;
+ },
+ extend: function(base) {
+ const sources = slice.call(arguments, 1);
+ for (let i = 0; i < sources.length; i++) {
+ const obj = sources[i];
+ for (let k in obj) {
+ base[k] = obj[k];
+ }
+ }
+ return base;
+ },
+ defaults: function(base) {
+ const sources = slice.call(arguments, 1);
+ for (let i = 0; i < sources.length; i++) {
+ const obj = sources[i];
+ for (let k in obj) {
+ if (base[k] === void 0) {
+ base[k] = obj[k];
+ }
+ }
+ }
+ return base;
+ },
+ each: function(obj, iteratee, context) {
+ const ctx = context || this;
+ const keys = !isArrayLike(obj) && Object.keys(obj);
+ const length = (keys || obj).length;
+ for (let i = 0; i < length; i++) {
+ const k = keys ? keys[i] : i;
+ iteratee.call(ctx, obj[k], k, obj);
+ }
+ return obj;
+ },
+ performance: root.performance && root.performance.now ? root.performance : Date
+ };
+
+ // src/element.js
+ var Element = class extends Events {
+ _flagId = false;
+ _flagClassName = false;
+ _renderer = {};
+ _id = "";
+ _className = "";
+ classList = [];
+ constructor() {
+ super();
+ for (let prop in proto3) {
+ Object.defineProperty(this, prop, proto3[prop]);
+ }
+ }
+ flagReset() {
+ this._flagId = this._flagClassName = false;
+ }
+ };
+ var proto3 = {
+ renderer: {
+ enumerable: false,
+ get: function() {
+ return this._renderer;
+ }
+ },
+ id: {
+ enumerable: true,
+ get: function() {
+ return this._id;
+ },
+ set: function(v) {
+ const id = this._id;
+ if (v === this._id) {
+ return;
+ }
+ this._id = v;
+ this._flagId = true;
+ if (this.parent) {
+ delete this.parent.children.ids[id];
+ this.parent.children.ids[this._id] = this;
+ }
+ }
+ },
+ className: {
+ enumerable: true,
+ get: function() {
+ return this._className;
+ },
+ set: function(v) {
+ if (this._className !== v) {
+ this._flagClassName = true;
+ this.classList = v.split(/\s+?/);
+ this._className = v;
+ }
+ }
+ }
+ };
+
+ // src/matrix.js
+ var cos = Math.cos;
+ var sin = Math.sin;
+ var tan = Math.tan;
+ var array = [];
+ var _Matrix = class extends Events {
+ elements = new NumArray(9);
+ manual = false;
+ constructor(a, b, c, d, e, f) {
+ super();
+ let elements = a;
+ if (!Array.isArray(elements)) {
+ elements = Array.prototype.slice.call(arguments);
+ }
+ this.identity();
+ if (elements.length > 0) {
+ this.set(elements);
+ }
+ }
+ static Multiply(A, B, C) {
+ if (B.length <= 3) {
+ const e = A;
+ let x, y, z;
+ const a = B[0] || 0, b = B[1] || 0, c = B[2] || 0;
+ x = e[0] * a + e[1] * b + e[2] * c;
+ y = e[3] * a + e[4] * b + e[5] * c;
+ z = e[6] * a + e[7] * b + e[8] * c;
+ return [x, y, z];
+ }
+ const A0 = A[0], A1 = A[1], A2 = A[2];
+ const A3 = A[3], A4 = A[4], A5 = A[5];
+ const A6 = A[6], A7 = A[7], A8 = A[8];
+ const B0 = B[0], B1 = B[1], B2 = B[2];
+ const B3 = B[3], B4 = B[4], B5 = B[5];
+ const B6 = B[6], B7 = B[7], B8 = B[8];
+ C = C || new NumArray(9);
+ C[0] = A0 * B0 + A1 * B3 + A2 * B6;
+ C[1] = A0 * B1 + A1 * B4 + A2 * B7;
+ C[2] = A0 * B2 + A1 * B5 + A2 * B8;
+ C[3] = A3 * B0 + A4 * B3 + A5 * B6;
+ C[4] = A3 * B1 + A4 * B4 + A5 * B7;
+ C[5] = A3 * B2 + A4 * B5 + A5 * B8;
+ C[6] = A6 * B0 + A7 * B3 + A8 * B6;
+ C[7] = A6 * B1 + A7 * B4 + A8 * B7;
+ C[8] = A6 * B2 + A7 * B5 + A8 * B8;
+ return C;
+ }
+ set(a, b, c, d, e, f, g, h, i) {
+ if (typeof b === "undefined") {
+ const elements = a;
+ a = elements[0];
+ b = elements[1];
+ c = elements[2];
+ d = elements[3];
+ e = elements[4];
+ f = elements[5];
+ g = elements[6];
+ h = elements[7];
+ i = elements[8];
+ }
+ this.elements[0] = a;
+ this.elements[1] = b;
+ this.elements[2] = c;
+ this.elements[3] = d;
+ this.elements[4] = e;
+ this.elements[5] = f;
+ this.elements[6] = g;
+ this.elements[7] = h;
+ this.elements[8] = i;
+ return this.trigger(Events.Types.change);
+ }
+ copy(m) {
+ this.elements[0] = m.elements[0];
+ this.elements[1] = m.elements[1];
+ this.elements[2] = m.elements[2];
+ this.elements[3] = m.elements[3];
+ this.elements[4] = m.elements[4];
+ this.elements[5] = m.elements[5];
+ this.elements[6] = m.elements[6];
+ this.elements[7] = m.elements[7];
+ this.elements[8] = m.elements[8];
+ this.manual = m.manual;
+ return this.trigger(Events.Types.change);
+ }
+ identity() {
+ this.elements[0] = _Matrix.Identity[0];
+ this.elements[1] = _Matrix.Identity[1];
+ this.elements[2] = _Matrix.Identity[2];
+ this.elements[3] = _Matrix.Identity[3];
+ this.elements[4] = _Matrix.Identity[4];
+ this.elements[5] = _Matrix.Identity[5];
+ this.elements[6] = _Matrix.Identity[6];
+ this.elements[7] = _Matrix.Identity[7];
+ this.elements[8] = _Matrix.Identity[8];
+ return this.trigger(Events.Types.change);
+ }
+ multiply(a, b, c, d, e, f, g, h, i) {
+ if (typeof b === "undefined") {
+ this.elements[0] *= a;
+ this.elements[1] *= a;
+ this.elements[2] *= a;
+ this.elements[3] *= a;
+ this.elements[4] *= a;
+ this.elements[5] *= a;
+ this.elements[6] *= a;
+ this.elements[7] *= a;
+ this.elements[8] *= a;
+ return this.trigger(Events.Types.change);
+ }
+ if (typeof c === "undefined") {
+ c = 1;
+ }
+ if (typeof d === "undefined") {
+ a = a || 0;
+ b = b || 0;
+ c = c || 0;
+ e = this.elements;
+ const x = e[0] * a + e[1] * b + e[2] * c;
+ const y = e[3] * a + e[4] * b + e[5] * c;
+ const z = e[6] * a + e[7] * b + e[8] * c;
+ return [x, y, z];
+ }
+ const A = this.elements;
+ const B = [a, b, c, d, e, f, g, h, i];
+ const A0 = A[0], A1 = A[1], A2 = A[2];
+ const A3 = A[3], A4 = A[4], A5 = A[5];
+ const A6 = A[6], A7 = A[7], A8 = A[8];
+ const B0 = B[0], B1 = B[1], B2 = B[2];
+ const B3 = B[3], B4 = B[4], B5 = B[5];
+ const B6 = B[6], B7 = B[7], B8 = B[8];
+ this.elements[0] = A0 * B0 + A1 * B3 + A2 * B6;
+ this.elements[1] = A0 * B1 + A1 * B4 + A2 * B7;
+ this.elements[2] = A0 * B2 + A1 * B5 + A2 * B8;
+ this.elements[3] = A3 * B0 + A4 * B3 + A5 * B6;
+ this.elements[4] = A3 * B1 + A4 * B4 + A5 * B7;
+ this.elements[5] = A3 * B2 + A4 * B5 + A5 * B8;
+ this.elements[6] = A6 * B0 + A7 * B3 + A8 * B6;
+ this.elements[7] = A6 * B1 + A7 * B4 + A8 * B7;
+ this.elements[8] = A6 * B2 + A7 * B5 + A8 * B8;
+ return this.trigger(Events.Types.change);
+ }
+ inverse(out) {
+ const a = this.elements;
+ out = out || new _Matrix();
+ const a00 = a[0], a01 = a[1], a02 = a[2];
+ const a10 = a[3], a11 = a[4], a12 = a[5];
+ const a20 = a[6], a21 = a[7], a22 = a[8];
+ const b01 = a22 * a11 - a12 * a21;
+ const b11 = -a22 * a10 + a12 * a20;
+ const b21 = a21 * a10 - a11 * a20;
+ let det = a00 * b01 + a01 * b11 + a02 * b21;
+ if (!det) {
+ return null;
+ }
+ det = 1 / det;
+ out.elements[0] = b01 * det;
+ out.elements[1] = (-a22 * a01 + a02 * a21) * det;
+ out.elements[2] = (a12 * a01 - a02 * a11) * det;
+ out.elements[3] = b11 * det;
+ out.elements[4] = (a22 * a00 - a02 * a20) * det;
+ out.elements[5] = (-a12 * a00 + a02 * a10) * det;
+ out.elements[6] = b21 * det;
+ out.elements[7] = (-a21 * a00 + a01 * a20) * det;
+ out.elements[8] = (a11 * a00 - a01 * a10) * det;
+ return out;
+ }
+ scale(sx, sy) {
+ const l = arguments.length;
+ if (l <= 1) {
+ sy = sx;
+ }
+ return this.multiply(sx, 0, 0, 0, sy, 0, 0, 0, 1);
+ }
+ rotate(Number2) {
+ const c = cos(Number2);
+ const s = sin(Number2);
+ return this.multiply(c, -s, 0, s, c, 0, 0, 0, 1);
+ }
+ translate(x, y) {
+ return this.multiply(1, 0, x, 0, 1, y, 0, 0, 1);
+ }
+ skewX(Number2) {
+ const a = tan(Number2);
+ return this.multiply(1, a, 0, 0, 1, 0, 0, 0, 1);
+ }
+ skewY(Number2) {
+ const a = tan(Number2);
+ return this.multiply(1, 0, 0, a, 1, 0, 0, 0, 1);
+ }
+ toString(fullMatrix) {
+ array.length = 0;
+ this.toTransformArray(fullMatrix, array);
+ return array.map(toFixed).join(" ");
+ }
+ toTransformArray(fullMatrix, output) {
+ const elements = this.elements;
+ const hasOutput = !!output;
+ const a = elements[0];
+ const b = elements[1];
+ const c = elements[2];
+ const d = elements[3];
+ const e = elements[4];
+ const f = elements[5];
+ if (fullMatrix) {
+ const g = elements[6];
+ const h = elements[7];
+ const i = elements[8];
+ if (hasOutput) {
+ output[0] = a;
+ output[1] = d;
+ output[2] = g;
+ output[3] = b;
+ output[4] = e;
+ output[5] = h;
+ output[6] = c;
+ output[7] = f;
+ output[8] = i;
+ return;
+ }
+ return [
+ a,
+ d,
+ g,
+ b,
+ e,
+ h,
+ c,
+ f,
+ i
+ ];
+ }
+ if (hasOutput) {
+ output[0] = a;
+ output[1] = d;
+ output[2] = b;
+ output[3] = e;
+ output[4] = c;
+ output[5] = f;
+ return;
+ }
+ return [
+ a,
+ d,
+ b,
+ e,
+ c,
+ f
+ ];
+ }
+ toArray(fullMatrix, output) {
+ const elements = this.elements;
+ const hasOutput = !!output;
+ const a = elements[0];
+ const b = elements[1];
+ const c = elements[2];
+ const d = elements[3];
+ const e = elements[4];
+ const f = elements[5];
+ if (fullMatrix) {
+ const g = elements[6];
+ const h = elements[7];
+ const i = elements[8];
+ if (hasOutput) {
+ output[0] = a;
+ output[1] = b;
+ output[2] = c;
+ output[3] = d;
+ output[4] = e;
+ output[5] = f;
+ output[6] = g;
+ output[7] = h;
+ output[8] = i;
+ return;
+ }
+ return [
+ a,
+ b,
+ c,
+ d,
+ e,
+ f,
+ g,
+ h,
+ i
+ ];
+ }
+ if (hasOutput) {
+ output[0] = a;
+ output[1] = b;
+ output[2] = c;
+ output[3] = d;
+ output[4] = e;
+ output[5] = f;
+ return;
+ }
+ return [
+ a,
+ b,
+ c,
+ d,
+ e,
+ f
+ ];
+ }
+ toObject() {
+ return {
+ elements: this.toArray(true),
+ manual: !!this.manual
+ };
+ }
+ clone() {
+ return new _Matrix().copy(this);
+ }
+ };
+ var Matrix2 = _Matrix;
+ __publicField(Matrix2, "Identity", [
+ 1,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1
+ ]);
+ setMatrix(Matrix2);
+
+ // src/shape.js
+ var Shape = class extends Element {
+ _flagMatrix = true;
+ _flagScale = false;
+ _matrix = null;
+ _worldMatrix = null;
+ _position = null;
+ _rotation = 0;
+ _scale = 1;
+ _skewX = 0;
+ _skewY = 0;
+ constructor() {
+ super();
+ for (let prop in proto4) {
+ Object.defineProperty(this, prop, proto4[prop]);
+ }
+ this._renderer.flagMatrix = FlagMatrix.bind(this);
+ this.isShape = true;
+ this.id = Constants.Identifier + Constants.uniqueId();
+ this.matrix = new Matrix2();
+ this.worldMatrix = new Matrix2();
+ this.position = new Vector();
+ this.rotation = 0;
+ this.scale = 1;
+ this.skewX = 0;
+ this.skewY = 0;
+ }
+ get renderer() {
+ return this._renderer;
+ }
+ set renderer(v) {
+ this._renderer = v;
+ }
+ get translation() {
+ return proto4.position.get.apply(this, arguments);
+ }
+ set translation(v) {
+ proto4.position.set.apply(this, arguments);
+ }
+ addTo(group) {
+ group.add(this);
+ return this;
+ }
+ remove() {
+ if (!this.parent) {
+ return this;
+ }
+ this.parent.remove(this);
+ return this;
+ }
+ clone(parent) {
+ const clone = new Shape();
+ clone.position.copy(this.position);
+ clone.rotation = this.rotation;
+ clone.scale = this.scale;
+ clone.skewX = this.skewX;
+ clone.skewY = this.skewY;
+ if (this.matrix.manual) {
+ clone.matrix.copy(this.matrix);
+ }
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone._update();
+ }
+ _update(bubbles) {
+ if (!this._matrix.manual && this._flagMatrix) {
+ this._matrix.identity().translate(this.position.x, this.position.y);
+ if (this._scale instanceof Vector) {
+ this._matrix.scale(this._scale.x, this._scale.y);
+ } else {
+ this._matrix.scale(this._scale);
+ }
+ this._matrix.rotate(this.rotation);
+ this._matrix.skewX(this.skewX);
+ this._matrix.skewY(this.skewY);
+ }
+ if (bubbles) {
+ if (this.parent && this.parent._update) {
+ this.parent._update();
+ }
+ }
+ return this;
+ }
+ flagReset() {
+ this._flagMatrix = this._flagScale = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ };
+ var proto4 = {
+ position: {
+ enumerable: true,
+ get: function() {
+ return this._position;
+ },
+ set: function(v) {
+ if (this._position) {
+ this._position.unbind(Events.Types.change, this._renderer.flagMatrix);
+ }
+ this._position = v;
+ this._position.bind(Events.Types.change, this._renderer.flagMatrix);
+ FlagMatrix.call(this);
+ }
+ },
+ rotation: {
+ enumerable: true,
+ get: function() {
+ return this._rotation;
+ },
+ set: function(v) {
+ this._rotation = v;
+ this._flagMatrix = true;
+ }
+ },
+ scale: {
+ enumerable: true,
+ get: function() {
+ return this._scale;
+ },
+ set: function(v) {
+ if (this._scale instanceof Vector) {
+ this._scale.unbind(Events.Types.change, this._renderer.flagMatrix);
+ }
+ this._scale = v;
+ if (this._scale instanceof Vector) {
+ this._scale.bind(Events.Types.change, this._renderer.flagMatrix);
+ }
+ this._flagMatrix = true;
+ this._flagScale = true;
+ }
+ },
+ skewX: {
+ enumerable: true,
+ get: function() {
+ return this._skewX;
+ },
+ set: function(v) {
+ this._skewX = v;
+ this._flagMatrix = true;
+ }
+ },
+ skewY: {
+ enumerable: true,
+ get: function() {
+ return this._skewY;
+ },
+ set: function(v) {
+ this._skewY = v;
+ this._flagMatrix = true;
+ }
+ },
+ matrix: {
+ enumerable: true,
+ get: function() {
+ return this._matrix;
+ },
+ set: function(v) {
+ this._matrix = v;
+ this._flagMatrix = true;
+ }
+ },
+ worldMatrix: {
+ enumerable: true,
+ get: function() {
+ getComputedMatrix(this, this._worldMatrix);
+ return this._worldMatrix;
+ },
+ set: function(v) {
+ this._worldMatrix = v;
+ }
+ }
+ };
+ function FlagMatrix() {
+ this._flagMatrix = true;
+ }
+
+ // src/collection.js
+ var Collection = class extends Array {
+ _events = new Events();
+ get _bound() {
+ return this._events._bound;
+ }
+ set _bound(v) {
+ this._events._bound = v;
+ }
+ addEventListener() {
+ return this._events.addEventListener.apply(this, arguments);
+ }
+ on() {
+ return this._events.on.apply(this, arguments);
+ }
+ bind() {
+ return this._events.bind.apply(this, arguments);
+ }
+ removeEventListener() {
+ return this._events.removeEventListener.apply(this, arguments);
+ }
+ off() {
+ return this._events.off.apply(this, arguments);
+ }
+ unbind() {
+ return this._events.unbind.apply(this, arguments);
+ }
+ dispatchEvent() {
+ return this._events.dispatchEvent.apply(this, arguments);
+ }
+ trigger() {
+ return this._events.trigger.apply(this, arguments);
+ }
+ listen() {
+ return this._events.listen.apply(this, arguments);
+ }
+ ignore() {
+ return this._events.ignore.apply(this, arguments);
+ }
+ constructor() {
+ super();
+ if (arguments[0] && Array.isArray(arguments[0])) {
+ if (arguments[0].length > 0) {
+ this.push.apply(this, arguments[0]);
+ }
+ } else if (arguments.length > 0) {
+ this.push.apply(this, arguments);
+ }
+ }
+ pop() {
+ const popped = super.pop.apply(this, arguments);
+ this.trigger(Events.Types.remove, [popped]);
+ return popped;
+ }
+ shift() {
+ const shifted = super.shift.apply(this, arguments);
+ this.trigger(Events.Types.remove, [shifted]);
+ return shifted;
+ }
+ push() {
+ const pushed = super.push.apply(this, arguments);
+ this.trigger(Events.Types.insert, arguments);
+ return pushed;
+ }
+ unshift() {
+ const unshifted = super.unshift.apply(this, arguments);
+ this.trigger(Events.Types.insert, arguments);
+ return unshifted;
+ }
+ splice() {
+ const spliced = super.splice.apply(this, arguments);
+ this.trigger(Events.Types.remove, spliced);
+ if (arguments.length > 2) {
+ const inserted = this.slice(arguments[0], arguments[0] + arguments.length - 2);
+ this.trigger(Events.Types.insert, inserted);
+ this.trigger(Events.Types.order);
+ }
+ return spliced;
+ }
+ sort() {
+ super.sort.apply(this, arguments);
+ this.trigger(Events.Types.order);
+ return this;
+ }
+ reverse() {
+ super.reverse.apply(this, arguments);
+ this.trigger(Events.Types.order);
+ return this;
+ }
+ indexOf() {
+ return super.indexOf.apply(this, arguments);
+ }
+ map(func, scope) {
+ const results = [];
+ for (let key = 0; key < this.length; key++) {
+ const value = this[key];
+ let result;
+ if (scope) {
+ result = func.call(scope, value, key);
+ } else {
+ result = func(value, key);
+ }
+ results.push(result);
+ }
+ return results;
+ }
+ };
+
+ // src/children.js
+ var Children = class extends Collection {
+ ids = {};
+ constructor(children) {
+ children = Array.isArray(children) ? children : Array.prototype.slice.call(arguments);
+ super(children);
+ this.attach(children);
+ this.on(Events.Types.insert, this.attach);
+ this.on(Events.Types.remove, this.detach);
+ }
+ attach(children) {
+ for (let i = 0; i < children.length; i++) {
+ const child = children[i];
+ if (child && child.id) {
+ this.ids[child.id] = child;
+ }
+ }
+ return this;
+ }
+ detach(children) {
+ for (let i = 0; i < children.length; i++) {
+ delete this.ids[children[i].id];
+ }
+ return this;
+ }
+ };
+
+ // src/group.js
+ var min = Math.min;
+ var max = Math.max;
+ var _Group = class extends Shape {
+ _flagAdditions = false;
+ _flagSubtractions = false;
+ _flagOrder = false;
+ _flagOpacity = true;
+ _flagBeginning = false;
+ _flagEnding = false;
+ _flagLength = false;
+ _flagMask = false;
+ _fill = "#fff";
+ _stroke = "#000";
+ _linewidth = 1;
+ _opacity = 1;
+ _visible = true;
+ _cap = "round";
+ _join = "round";
+ _miter = 4;
+ _closed = true;
+ _curved = false;
+ _automatic = true;
+ _beginning = 0;
+ _ending = 1;
+ _length = 0;
+ _mask = null;
+ constructor(children) {
+ super();
+ for (let prop in proto5) {
+ Object.defineProperty(this, prop, proto5[prop]);
+ }
+ this._renderer.type = "group";
+ this.additions = [];
+ this.subtractions = [];
+ this.children = Array.isArray(children) ? children : Array.prototype.slice.call(arguments);
+ }
+ static InsertChildren(children) {
+ for (let i = 0; i < children.length; i++) {
+ replaceParent.call(this, children[i], this);
+ }
+ }
+ static RemoveChildren(children) {
+ for (let i = 0; i < children.length; i++) {
+ replaceParent.call(this, children[i]);
+ }
+ }
+ static OrderChildren(children) {
+ this._flagOrder = true;
+ }
+ clone(parent) {
+ const clone = new _Group();
+ const children = this.children.map(function(child) {
+ return child.clone();
+ });
+ clone.add(children);
+ clone.opacity = this.opacity;
+ if (this.mask) {
+ clone.mask = this.mask;
+ }
+ clone.translation.copy(this.translation);
+ clone.rotation = this.rotation;
+ clone.scale = this.scale;
+ clone.className = this.className;
+ if (this.matrix.manual) {
+ clone.matrix.copy(this.matrix);
+ }
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone._update();
+ }
+ toObject() {
+ const result = {
+ children: [],
+ translation: this.translation.toObject(),
+ rotation: this.rotation,
+ scale: this.scale instanceof Vector ? this.scale.toObject() : this.scale,
+ opacity: this.opacity,
+ className: this.className,
+ mask: this.mask ? this.mask.toObject() : null
+ };
+ if (this.matrix.manual) {
+ result.matrix = this.matrix.toObject();
+ }
+ _.each(this.children, function(child, i) {
+ result.children[i] = child.toObject();
+ }, this);
+ return result;
+ }
+ corner() {
+ const rect = this.getBoundingClientRect(true);
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ child.translation.x -= rect.left;
+ child.translation.y -= rect.top;
+ }
+ if (this.mask) {
+ this.mask.translation.x -= rect.left;
+ this.mask.translation.y -= rect.top;
+ }
+ return this;
+ }
+ center() {
+ const rect = this.getBoundingClientRect(true);
+ const cx = rect.left + rect.width / 2 - this.translation.x;
+ const cy = rect.top + rect.height / 2 - this.translation.y;
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ if (child.isShape) {
+ child.translation.x -= cx;
+ child.translation.y -= cy;
+ }
+ }
+ if (this.mask) {
+ this.mask.translation.x -= cx;
+ this.mask.translation.y -= cy;
+ }
+ return this;
+ }
+ getById(id) {
+ let found = null;
+ function search(node) {
+ if (node.id === id) {
+ return node;
+ } else if (node.children) {
+ for (let i = 0; i < node.children.length; i++) {
+ found = search(node.children[i]);
+ if (found) {
+ return found;
+ }
+ }
+ }
+ return null;
+ }
+ return search(this);
+ }
+ getByClassName(className) {
+ const found = [];
+ function search(node) {
+ if (Array.prototype.indexOf.call(node.classList, className) >= 0) {
+ found.push(node);
+ }
+ if (node.children) {
+ for (let i = 0; i < node.children.length; i++) {
+ const child = node.children[i];
+ search(child);
+ }
+ }
+ return found;
+ }
+ return search(this);
+ }
+ getByType(type) {
+ const found = [];
+ function search(node) {
+ if (node instanceof type) {
+ found.push(node);
+ }
+ if (node.children) {
+ for (let i = 0; i < node.children.length; i++) {
+ const child = node.children[i];
+ search(child);
+ }
+ }
+ return found;
+ }
+ return search(this);
+ }
+ add(objects) {
+ if (!(objects instanceof Array)) {
+ objects = Array.prototype.slice.call(arguments);
+ } else {
+ objects = objects.slice();
+ }
+ for (let i = 0; i < objects.length; i++) {
+ const child = objects[i];
+ if (!(child && child.id)) {
+ continue;
+ }
+ const index = Array.prototype.indexOf.call(this.children, child);
+ if (index >= 0) {
+ this.children.splice(index, 1);
+ }
+ this.children.push(child);
+ }
+ return this;
+ }
+ remove(objects) {
+ const l = arguments.length, grandparent = this.parent;
+ if (l <= 0 && grandparent) {
+ grandparent.remove(this);
+ return this;
+ }
+ if (!(objects instanceof Array)) {
+ objects = Array.prototype.slice.call(arguments);
+ } else {
+ objects = objects.slice();
+ }
+ for (let i = 0; i < objects.length; i++) {
+ const object = objects[i];
+ if (!object || !this.children.ids[object.id]) {
+ continue;
+ }
+ const index = this.children.indexOf(object);
+ if (index >= 0) {
+ this.children.splice(index, 1);
+ }
+ }
+ return this;
+ }
+ getBoundingClientRect(shallow) {
+ let rect, matrix, tc, lc, rc, bc;
+ this._update(true);
+ let left = Infinity, right = -Infinity, top = Infinity, bottom = -Infinity;
+ const regex3 = /texture|gradient/i;
+ matrix = shallow ? this.matrix : this.worldMatrix;
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ if (!child.visible || regex3.test(child._renderer.type)) {
+ continue;
+ }
+ rect = child.getBoundingClientRect(shallow);
+ tc = typeof rect.top !== "number" || _.isNaN(rect.top) || !isFinite(rect.top);
+ lc = typeof rect.left !== "number" || _.isNaN(rect.left) || !isFinite(rect.left);
+ rc = typeof rect.right !== "number" || _.isNaN(rect.right) || !isFinite(rect.right);
+ bc = typeof rect.bottom !== "number" || _.isNaN(rect.bottom) || !isFinite(rect.bottom);
+ if (tc || lc || rc || bc) {
+ continue;
+ }
+ if (shallow) {
+ const [ax, ay] = matrix.multiply(rect.left, rect.top);
+ const [bx, by] = matrix.multiply(rect.right, rect.top);
+ const [cx, cy] = matrix.multiply(rect.left, rect.bottom);
+ const [dx, dy] = matrix.multiply(rect.right, rect.bottom);
+ top = min(ay, by, cy, dy);
+ left = min(ax, bx, cx, dx);
+ right = max(ax, bx, cx, dx);
+ bottom = max(ay, by, cy, dy);
+ } else {
+ top = min(rect.top, top);
+ left = min(rect.left, left);
+ right = max(rect.right, right);
+ bottom = max(rect.bottom, bottom);
+ }
+ }
+ return {
+ top,
+ left,
+ right,
+ bottom,
+ width: right - left,
+ height: bottom - top
+ };
+ }
+ noFill() {
+ this.children.forEach(function(child) {
+ child.noFill();
+ });
+ return this;
+ }
+ noStroke() {
+ this.children.forEach(function(child) {
+ child.noStroke();
+ });
+ return this;
+ }
+ subdivide() {
+ const args = arguments;
+ this.children.forEach(function(child) {
+ child.subdivide.apply(child, args);
+ });
+ return this;
+ }
+ _update() {
+ let i, l, child;
+ if (this._flagBeginning || this._flagEnding) {
+ const beginning = Math.min(this._beginning, this._ending);
+ const ending = Math.max(this._beginning, this._ending);
+ const length = this.length;
+ let sum = 0;
+ const bd = beginning * length;
+ const ed = ending * length;
+ for (i = 0; i < this.children.length; i++) {
+ child = this.children[i];
+ l = child.length;
+ if (bd > sum + l) {
+ child.beginning = 1;
+ child.ending = 1;
+ } else if (ed < sum) {
+ child.beginning = 0;
+ child.ending = 0;
+ } else if (bd > sum && bd < sum + l) {
+ child.beginning = (bd - sum) / l;
+ child.ending = 1;
+ } else if (ed > sum && ed < sum + l) {
+ child.beginning = 0;
+ child.ending = (ed - sum) / l;
+ } else {
+ child.beginning = 0;
+ child.ending = 1;
+ }
+ sum += l;
+ }
+ }
+ return super._update.apply(this, arguments);
+ }
+ flagReset() {
+ if (this._flagAdditions) {
+ this.additions.length = 0;
+ this._flagAdditions = false;
+ }
+ if (this._flagSubtractions) {
+ this.subtractions.length = 0;
+ this._flagSubtractions = false;
+ }
+ this._flagOrder = this._flagMask = this._flagOpacity = this._flagBeginning = this._flagEnding = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ };
+ var Group = _Group;
+ __publicField(Group, "Children", Children);
+ __publicField(Group, "Properties", [
+ "fill",
+ "stroke",
+ "linewidth",
+ "cap",
+ "join",
+ "miter",
+ "closed",
+ "curved",
+ "automatic"
+ ]);
+ var proto5 = {
+ visible: {
+ enumerable: true,
+ get: function() {
+ return this._visible;
+ },
+ set: function(v) {
+ this._flagVisible = this._visible !== v || this._flagVisible;
+ this._visible = v;
+ }
+ },
+ opacity: {
+ enumerable: true,
+ get: function() {
+ return this._opacity;
+ },
+ set: function(v) {
+ this._flagOpacity = this._opacity !== v || this._flagOpacity;
+ this._opacity = v;
+ }
+ },
+ beginning: {
+ enumerable: true,
+ get: function() {
+ return this._beginning;
+ },
+ set: function(v) {
+ this._flagBeginning = this._beginning !== v || this._flagBeginning;
+ this._beginning = v;
+ }
+ },
+ ending: {
+ enumerable: true,
+ get: function() {
+ return this._ending;
+ },
+ set: function(v) {
+ this._flagEnding = this._ending !== v || this._flagEnding;
+ this._ending = v;
+ }
+ },
+ length: {
+ enumerable: true,
+ get: function() {
+ if (this._flagLength || this._length <= 0) {
+ this._length = 0;
+ if (!this.children) {
+ return this._length;
+ }
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ this._length += child.length;
+ }
+ }
+ return this._length;
+ }
+ },
+ fill: {
+ enumerable: true,
+ get: function() {
+ return this._fill;
+ },
+ set: function(v) {
+ this._fill = v;
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ child.fill = v;
+ }
+ }
+ },
+ stroke: {
+ enumerable: true,
+ get: function() {
+ return this._stroke;
+ },
+ set: function(v) {
+ this._stroke = v;
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ child.stroke = v;
+ }
+ }
+ },
+ linewidth: {
+ enumerable: true,
+ get: function() {
+ return this._linewidth;
+ },
+ set: function(v) {
+ this._linewidth = v;
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ child.linewidth = v;
+ }
+ }
+ },
+ join: {
+ enumerable: true,
+ get: function() {
+ return this._join;
+ },
+ set: function(v) {
+ this._join = v;
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ child.join = v;
+ }
+ }
+ },
+ miter: {
+ enumerable: true,
+ get: function() {
+ return this._miter;
+ },
+ set: function(v) {
+ this._miter = v;
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ child.miter = v;
+ }
+ }
+ },
+ cap: {
+ enumerable: true,
+ get: function() {
+ return this._cap;
+ },
+ set: function(v) {
+ this._cap = v;
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ child.cap = v;
+ }
+ }
+ },
+ closed: {
+ enumerable: true,
+ get: function() {
+ return this._closed;
+ },
+ set: function(v) {
+ this._closed = v;
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ child.closed = v;
+ }
+ }
+ },
+ curved: {
+ enumerable: true,
+ get: function() {
+ return this._curved;
+ },
+ set: function(v) {
+ this._curved = v;
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ child.curved = v;
+ }
+ }
+ },
+ automatic: {
+ enumerable: true,
+ get: function() {
+ return this._automatic;
+ },
+ set: function(v) {
+ this._automatic = v;
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ child.automatic = v;
+ }
+ }
+ },
+ children: {
+ enumerable: true,
+ get: function() {
+ return this._children;
+ },
+ set: function(children) {
+ const insertChildren = Group.InsertChildren.bind(this);
+ const removeChildren = Group.RemoveChildren.bind(this);
+ const orderChildren = Group.OrderChildren.bind(this);
+ if (this._children) {
+ this._children.unbind();
+ if (this._children.length > 0) {
+ removeChildren(this._children);
+ }
+ }
+ this._children = new Children(children);
+ this._children.bind(Events.Types.insert, insertChildren);
+ this._children.bind(Events.Types.remove, removeChildren);
+ this._children.bind(Events.Types.order, orderChildren);
+ if (children.length > 0) {
+ insertChildren(children);
+ }
+ }
+ },
+ mask: {
+ enumerable: true,
+ get: function() {
+ return this._mask;
+ },
+ set: function(v) {
+ this._mask = v;
+ this._flagMask = true;
+ if (_.isObject(v) && !v.clip) {
+ v.clip = true;
+ }
+ }
+ }
+ };
+ function replaceParent(child, newParent) {
+ const parent = child.parent;
+ let index;
+ if (parent === newParent) {
+ add();
+ return;
+ }
+ if (parent && parent.children.ids[child.id]) {
+ index = Array.prototype.indexOf.call(parent.children, child);
+ parent.children.splice(index, 1);
+ splice();
+ }
+ if (newParent) {
+ add();
+ return;
+ }
+ splice();
+ if (parent._flagAdditions && parent.additions.length === 0) {
+ parent._flagAdditions = false;
+ }
+ if (parent._flagSubtractions && parent.subtractions.length === 0) {
+ parent._flagSubtractions = false;
+ }
+ delete child.parent;
+ function add() {
+ if (newParent.subtractions.length > 0) {
+ index = Array.prototype.indexOf.call(newParent.subtractions, child);
+ if (index >= 0) {
+ newParent.subtractions.splice(index, 1);
+ }
+ }
+ if (newParent.additions.length > 0) {
+ index = Array.prototype.indexOf.call(newParent.additions, child);
+ if (index >= 0) {
+ newParent.additions.splice(index, 1);
+ }
+ }
+ child.parent = newParent;
+ newParent.additions.push(child);
+ newParent._flagAdditions = true;
+ }
+ function splice() {
+ index = Array.prototype.indexOf.call(parent.additions, child);
+ if (index >= 0) {
+ parent.additions.splice(index, 1);
+ }
+ index = Array.prototype.indexOf.call(parent.subtractions, child);
+ if (index < 0) {
+ parent.subtractions.push(child);
+ parent._flagSubtractions = true;
+ }
+ }
+ }
+
+ // src/renderers/canvas.js
+ var emptyArray = [];
+ var max2 = Math.max;
+ var min2 = Math.min;
+ var abs = Math.abs;
+ var sin2 = Math.sin;
+ var cos2 = Math.cos;
+ var acos = Math.acos;
+ var sqrt = Math.sqrt;
+ var canvas = {
+ isHidden: /(undefined|none|transparent)/i,
+ alignments: {
+ left: "start",
+ middle: "center",
+ right: "end"
+ },
+ shim: function(elem, name) {
+ elem.tagName = elem.nodeName = name || "canvas";
+ elem.nodeType = 1;
+ elem.getAttribute = function(prop) {
+ return this[prop];
+ };
+ elem.setAttribute = function(prop, val) {
+ this[prop] = val;
+ return this;
+ };
+ return elem;
+ },
+ group: {
+ renderChild: function(child) {
+ canvas[child._renderer.type].render.call(child, this.ctx, true, this.clip);
+ },
+ render: function(ctx) {
+ if (!this._visible) {
+ return this;
+ }
+ this._update();
+ const matrix = this._matrix.elements;
+ const parent = this.parent;
+ this._renderer.opacity = this._opacity * (parent && parent._renderer ? parent._renderer.opacity : 1);
+ const mask = this._mask;
+ const defaultMatrix = isDefaultMatrix(matrix);
+ const shouldIsolate = !defaultMatrix || !!mask;
+ if (!this._renderer.context) {
+ this._renderer.context = {};
+ }
+ this._renderer.context.ctx = ctx;
+ if (shouldIsolate) {
+ ctx.save();
+ if (!defaultMatrix) {
+ ctx.transform(
+ matrix[0],
+ matrix[3],
+ matrix[1],
+ matrix[4],
+ matrix[2],
+ matrix[5]
+ );
+ }
+ }
+ if (mask) {
+ canvas[mask._renderer.type].render.call(mask, ctx, true);
+ }
+ if (this._opacity > 0 && this._scale !== 0) {
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ canvas[child._renderer.type].render.call(child, ctx);
+ }
+ }
+ if (shouldIsolate) {
+ ctx.restore();
+ }
+ return this.flagReset();
+ }
+ },
+ path: {
+ render: function(ctx, forced, parentClipped) {
+ let matrix, stroke, linewidth, fill, opacity, visible, cap, join, miter, closed2, commands, length, last, prev, a, b, c, d, ux, uy, vx, vy, ar, bl, br, cl, x, y, mask, clip, defaultMatrix, isOffset, dashes, po;
+ po = this.parent && this.parent._renderer ? this.parent._renderer.opacity : 1;
+ mask = this._mask;
+ clip = this._clip;
+ opacity = this._opacity * (po || 1);
+ visible = this._visible;
+ if (!forced && (!visible || clip || opacity === 0)) {
+ return this;
+ }
+ this._update();
+ matrix = this._matrix.elements;
+ stroke = this._stroke;
+ linewidth = this._linewidth;
+ fill = this._fill;
+ cap = this._cap;
+ join = this._join;
+ miter = this._miter;
+ closed2 = this._closed;
+ commands = this._renderer.vertices;
+ length = commands.length;
+ last = length - 1;
+ defaultMatrix = isDefaultMatrix(matrix);
+ dashes = this.dashes;
+ if (!defaultMatrix) {
+ ctx.save();
+ ctx.transform(matrix[0], matrix[3], matrix[1], matrix[4], matrix[2], matrix[5]);
+ }
+ if (mask) {
+ canvas[mask._renderer.type].render.call(mask, ctx, true);
+ }
+ if (fill) {
+ if (typeof fill === "string") {
+ ctx.fillStyle = fill;
+ } else {
+ canvas[fill._renderer.type].render.call(fill, ctx, this);
+ ctx.fillStyle = fill._renderer.effect;
+ }
+ }
+ if (stroke) {
+ if (typeof stroke === "string") {
+ ctx.strokeStyle = stroke;
+ } else {
+ canvas[stroke._renderer.type].render.call(stroke, ctx, this);
+ ctx.strokeStyle = stroke._renderer.effect;
+ }
+ if (linewidth) {
+ ctx.lineWidth = linewidth;
+ }
+ if (miter) {
+ ctx.miterLimit = miter;
+ }
+ if (join) {
+ ctx.lineJoin = join;
+ }
+ if (!closed2 && cap) {
+ ctx.lineCap = cap;
+ }
+ }
+ if (typeof opacity === "number") {
+ ctx.globalAlpha = opacity;
+ }
+ if (dashes && dashes.length > 0) {
+ ctx.lineDashOffset = dashes.offset || 0;
+ ctx.setLineDash(dashes);
+ }
+ ctx.beginPath();
+ let rx, ry, xAxisRotation, largeArcFlag, sweepFlag, ax, ay;
+ for (let i = 0; i < length; i++) {
+ b = commands[i];
+ x = b.x;
+ y = b.y;
+ switch (b.command) {
+ case Commands.close:
+ ctx.closePath();
+ break;
+ case Commands.arc:
+ rx = b.rx;
+ ry = b.ry;
+ xAxisRotation = b.xAxisRotation;
+ largeArcFlag = b.largeArcFlag;
+ sweepFlag = b.sweepFlag;
+ prev = closed2 ? mod(i - 1, length) : max2(i - 1, 0);
+ a = commands[prev];
+ ax = a.x;
+ ay = a.y;
+ canvas.renderSvgArcCommand(
+ ctx,
+ ax,
+ ay,
+ rx,
+ ry,
+ largeArcFlag,
+ sweepFlag,
+ xAxisRotation,
+ x,
+ y
+ );
+ break;
+ case Commands.curve:
+ prev = closed2 ? mod(i - 1, length) : Math.max(i - 1, 0);
+ a = commands[prev];
+ ar = a.controls && a.controls.right || Vector.zero;
+ bl = b.controls && b.controls.left || Vector.zero;
+ if (a._relative) {
+ vx = ar.x + a.x;
+ vy = ar.y + a.y;
+ } else {
+ vx = ar.x;
+ vy = ar.y;
+ }
+ if (b._relative) {
+ ux = bl.x + b.x;
+ uy = bl.y + b.y;
+ } else {
+ ux = bl.x;
+ uy = bl.y;
+ }
+ ctx.bezierCurveTo(vx, vy, ux, uy, x, y);
+ if (i >= last && closed2) {
+ c = d;
+ br = b.controls && b.controls.right || Vector.zero;
+ cl = c.controls && c.controls.left || Vector.zero;
+ if (b._relative) {
+ vx = br.x + b.x;
+ vy = br.y + b.y;
+ } else {
+ vx = br.x;
+ vy = br.y;
+ }
+ if (c._relative) {
+ ux = cl.x + c.x;
+ uy = cl.y + c.y;
+ } else {
+ ux = cl.x;
+ uy = cl.y;
+ }
+ x = c.x;
+ y = c.y;
+ ctx.bezierCurveTo(vx, vy, ux, uy, x, y);
+ }
+ break;
+ case Commands.line:
+ ctx.lineTo(x, y);
+ break;
+ case Commands.move:
+ d = b;
+ ctx.moveTo(x, y);
+ break;
+ }
+ }
+ if (closed2) {
+ ctx.closePath();
+ }
+ if (!clip && !parentClipped) {
+ if (!canvas.isHidden.test(fill)) {
+ isOffset = fill._renderer && fill._renderer.offset;
+ if (isOffset) {
+ ctx.save();
+ ctx.translate(
+ -fill._renderer.offset.x,
+ -fill._renderer.offset.y
+ );
+ ctx.scale(fill._renderer.scale.x, fill._renderer.scale.y);
+ }
+ ctx.fill();
+ if (isOffset) {
+ ctx.restore();
+ }
+ }
+ if (!canvas.isHidden.test(stroke)) {
+ isOffset = stroke._renderer && stroke._renderer.offset;
+ if (isOffset) {
+ ctx.save();
+ ctx.translate(
+ -stroke._renderer.offset.x,
+ -stroke._renderer.offset.y
+ );
+ ctx.scale(stroke._renderer.scale.x, stroke._renderer.scale.y);
+ ctx.lineWidth = linewidth / stroke._renderer.scale.x;
+ }
+ ctx.stroke();
+ if (isOffset) {
+ ctx.restore();
+ }
+ }
+ }
+ if (!defaultMatrix) {
+ ctx.restore();
+ }
+ if (clip && !parentClipped) {
+ ctx.clip();
+ }
+ if (dashes && dashes.length > 0) {
+ ctx.setLineDash(emptyArray);
+ }
+ return this.flagReset();
+ }
+ },
+ points: {
+ render: function(ctx, forced, parentClipped) {
+ let me, stroke, linewidth, fill, opacity, visible, size, commands, length, b, x, y, defaultMatrix, isOffset, dashes, po;
+ po = this.parent && this.parent._renderer ? this.parent._renderer.opacity : 1;
+ opacity = this._opacity * (po || 1);
+ visible = this._visible;
+ if (!forced && (!visible || opacity === 0)) {
+ return this;
+ }
+ this._update();
+ me = this._matrix.elements;
+ stroke = this._stroke;
+ linewidth = this._linewidth;
+ fill = this._fill;
+ commands = this._renderer.collection;
+ length = commands.length;
+ defaultMatrix = isDefaultMatrix(me);
+ dashes = this.dashes;
+ size = this._size;
+ if (!defaultMatrix) {
+ ctx.save();
+ ctx.transform(me[0], me[3], me[1], me[4], me[2], me[5]);
+ }
+ if (fill) {
+ if (typeof fill === "string") {
+ ctx.fillStyle = fill;
+ } else {
+ canvas[fill._renderer.type].render.call(fill, ctx, this);
+ ctx.fillStyle = fill._renderer.effect;
+ }
+ }
+ if (stroke) {
+ if (typeof stroke === "string") {
+ ctx.strokeStyle = stroke;
+ } else {
+ canvas[stroke._renderer.type].render.call(stroke, ctx, this);
+ ctx.strokeStyle = stroke._renderer.effect;
+ }
+ if (linewidth) {
+ ctx.lineWidth = linewidth;
+ }
+ }
+ if (typeof opacity === "number") {
+ ctx.globalAlpha = opacity;
+ }
+ if (dashes && dashes.length > 0) {
+ ctx.lineDashOffset = dashes.offset || 0;
+ ctx.setLineDash(dashes);
+ }
+ ctx.beginPath();
+ let radius = size * 0.5, m;
+ if (!this._sizeAttenuation) {
+ m = this.worldMatrix.elements;
+ m = decomposeMatrix(m[0], m[3], m[1], m[4], m[2], m[5]);
+ radius /= Math.max(m.scaleX, m.scaleY);
+ }
+ for (let i = 0; i < length; i++) {
+ b = commands[i];
+ x = b.x;
+ y = b.y;
+ ctx.moveTo(x + radius, y);
+ ctx.arc(x, y, radius, 0, TWO_PI);
+ }
+ if (!parentClipped) {
+ if (!canvas.isHidden.test(fill)) {
+ isOffset = fill._renderer && fill._renderer.offset;
+ if (isOffset) {
+ ctx.save();
+ ctx.translate(
+ -fill._renderer.offset.x,
+ -fill._renderer.offset.y
+ );
+ ctx.scale(fill._renderer.scale.x, fill._renderer.scale.y);
+ }
+ ctx.fill();
+ if (isOffset) {
+ ctx.restore();
+ }
+ }
+ if (!canvas.isHidden.test(stroke)) {
+ isOffset = stroke._renderer && stroke._renderer.offset;
+ if (isOffset) {
+ ctx.save();
+ ctx.translate(
+ -stroke._renderer.offset.x,
+ -stroke._renderer.offset.y
+ );
+ ctx.scale(stroke._renderer.scale.x, stroke._renderer.scale.y);
+ ctx.lineWidth = linewidth / stroke._renderer.scale.x;
+ }
+ ctx.stroke();
+ if (isOffset) {
+ ctx.restore();
+ }
+ }
+ }
+ if (!defaultMatrix) {
+ ctx.restore();
+ }
+ if (dashes && dashes.length > 0) {
+ ctx.setLineDash(emptyArray);
+ }
+ return this.flagReset();
+ }
+ },
+ text: {
+ render: function(ctx, forced, parentClipped) {
+ const po = this.parent && this.parent._renderer ? this.parent._renderer.opacity : 1;
+ const opacity = this._opacity * po;
+ const visible = this._visible;
+ const mask = this._mask;
+ const clip = this._clip;
+ if (!forced && (!visible || clip || opacity === 0)) {
+ return this;
+ }
+ this._update();
+ const matrix = this._matrix.elements;
+ const stroke = this._stroke;
+ const linewidth = this._linewidth;
+ const fill = this._fill;
+ const decoration = this._decoration;
+ const defaultMatrix = isDefaultMatrix(matrix);
+ const isOffset = fill._renderer && fill._renderer.offset && stroke._renderer && stroke._renderer.offset;
+ const dashes = this.dashes;
+ const alignment = canvas.alignments[this._alignment] || this._alignment;
+ const baseline = this._baseline;
+ let a, b, c, d, e, sx, sy, x1, y1, x2, y2;
+ if (!defaultMatrix) {
+ ctx.save();
+ ctx.transform(matrix[0], matrix[3], matrix[1], matrix[4], matrix[2], matrix[5]);
+ }
+ if (mask) {
+ canvas[mask._renderer.type].render.call(mask, ctx, true);
+ }
+ if (!isOffset) {
+ ctx.font = [this._style, this._weight, this._size + "px/" + this._leading + "px", this._family].join(" ");
+ }
+ ctx.textAlign = alignment;
+ ctx.textBaseline = baseline;
+ if (fill) {
+ if (typeof fill === "string") {
+ ctx.fillStyle = fill;
+ } else {
+ canvas[fill._renderer.type].render.call(fill, ctx, this);
+ ctx.fillStyle = fill._renderer.effect;
+ }
+ }
+ if (stroke) {
+ if (typeof stroke === "string") {
+ ctx.strokeStyle = stroke;
+ } else {
+ canvas[stroke._renderer.type].render.call(stroke, ctx, this);
+ ctx.strokeStyle = stroke._renderer.effect;
+ }
+ if (linewidth) {
+ ctx.lineWidth = linewidth;
+ }
+ }
+ if (typeof opacity === "number") {
+ ctx.globalAlpha = opacity;
+ }
+ if (dashes && dashes.length > 0) {
+ ctx.lineDashOffset = dashes.offset || 0;
+ ctx.setLineDash(dashes);
+ }
+ if (!clip && !parentClipped) {
+ if (!canvas.isHidden.test(fill)) {
+ if (fill._renderer && fill._renderer.offset) {
+ sx = fill._renderer.scale.x;
+ sy = fill._renderer.scale.y;
+ ctx.save();
+ ctx.translate(
+ -fill._renderer.offset.x,
+ -fill._renderer.offset.y
+ );
+ ctx.scale(sx, sy);
+ a = this._size / fill._renderer.scale.y;
+ b = this._leading / fill._renderer.scale.y;
+ ctx.font = [
+ this._style,
+ this._weight,
+ a + "px/",
+ b + "px",
+ this._family
+ ].join(" ");
+ c = fill._renderer.offset.x / fill._renderer.scale.x;
+ d = fill._renderer.offset.y / fill._renderer.scale.y;
+ ctx.fillText(this.value, c, d);
+ ctx.restore();
+ } else {
+ ctx.fillText(this.value, 0, 0);
+ }
+ }
+ if (!canvas.isHidden.test(stroke)) {
+ if (stroke._renderer && stroke._renderer.offset) {
+ sx = stroke._renderer.scale.x;
+ sy = stroke._renderer.scale.y;
+ ctx.save();
+ ctx.translate(
+ -stroke._renderer.offset.x,
+ -stroke._renderer.offset.y
+ );
+ ctx.scale(sx, sy);
+ a = this._size / stroke._renderer.scale.y;
+ b = this._leading / stroke._renderer.scale.y;
+ ctx.font = [
+ this._style,
+ this._weight,
+ a + "px/",
+ b + "px",
+ this._family
+ ].join(" ");
+ c = stroke._renderer.offset.x / stroke._renderer.scale.x;
+ d = stroke._renderer.offset.y / stroke._renderer.scale.y;
+ e = linewidth / stroke._renderer.scale.x;
+ ctx.lineWidth = e;
+ ctx.strokeText(this.value, c, d);
+ ctx.restore();
+ } else {
+ ctx.strokeText(this.value, 0, 0);
+ }
+ }
+ }
+ if (/(underline|strikethrough)/i.test(decoration)) {
+ const metrics = ctx.measureText(this.value);
+ let scalar = 1;
+ switch (decoration) {
+ case "underline":
+ y1 = metrics.actualBoundingBoxAscent;
+ y2 = metrics.actualBoundingBoxAscent;
+ break;
+ case "strikethrough":
+ y1 = 0;
+ y2 = 0;
+ scalar = 0.5;
+ break;
+ }
+ switch (baseline) {
+ case "top":
+ y1 += this._size * scalar;
+ y2 += this._size * scalar;
+ break;
+ case "baseline":
+ case "bottom":
+ y1 -= this._size * scalar;
+ y2 -= this._size * scalar;
+ break;
+ }
+ switch (alignment) {
+ case "left":
+ case "start":
+ x1 = 0;
+ x2 = metrics.width;
+ break;
+ case "right":
+ case "end":
+ x1 = -metrics.width;
+ x2 = 0;
+ break;
+ default:
+ x1 = -metrics.width / 2;
+ x2 = metrics.width / 2;
+ }
+ ctx.lineWidth = Math.max(Math.floor(this._size / 15), 1);
+ ctx.strokeStyle = ctx.fillStyle;
+ ctx.beginPath();
+ ctx.moveTo(x1, y1);
+ ctx.lineTo(x2, y2);
+ ctx.stroke();
+ }
+ if (!defaultMatrix) {
+ ctx.restore();
+ }
+ if (clip && !parentClipped) {
+ ctx.clip();
+ }
+ if (dashes && dashes.length > 0) {
+ ctx.setLineDash(emptyArray);
+ }
+ return this.flagReset();
+ }
+ },
+ "linear-gradient": {
+ render: function(ctx, parent) {
+ if (!parent) {
+ return;
+ }
+ this._update();
+ if (!this._renderer.effect || this._flagEndPoints || this._flagStops || this._flagUnits) {
+ let rect;
+ let lx = this.left._x;
+ let ly = this.left._y;
+ let rx = this.right._x;
+ let ry = this.right._y;
+ if (/objectBoundingBox/i.test(this._units)) {
+ rect = parent.getBoundingClientRect(true);
+ lx = (lx - 0.5) * rect.width;
+ ly = (ly - 0.5) * rect.height;
+ rx = (rx - 0.5) * rect.width;
+ ry = (ry - 0.5) * rect.height;
+ }
+ this._renderer.effect = ctx.createLinearGradient(lx, ly, rx, ry);
+ for (let i = 0; i < this.stops.length; i++) {
+ const stop = this.stops[i];
+ this._renderer.effect.addColorStop(stop._offset, stop._color);
+ }
+ }
+ return this.flagReset();
+ }
+ },
+ "radial-gradient": {
+ render: function(ctx, parent) {
+ if (!parent) {
+ return;
+ }
+ this._update();
+ if (!this._renderer.effect || this._flagCenter || this._flagFocal || this._flagRadius || this._flagStops || this._flagUnits) {
+ let rect;
+ let cx = this.center._x;
+ let cy = this.center._y;
+ let fx = this.focal._x;
+ let fy = this.focal._y;
+ let radius = this._radius;
+ if (/objectBoundingBox/i.test(this._units)) {
+ rect = parent.getBoundingClientRect(true);
+ cx = cx * rect.width * 0.5;
+ cy = cy * rect.height * 0.5;
+ fx = fx * rect.width * 0.5;
+ fy = fy * rect.height * 0.5;
+ radius *= Math.min(rect.width, rect.height) * 0.5;
+ }
+ this._renderer.effect = ctx.createRadialGradient(
+ cx,
+ cy,
+ 0,
+ fx,
+ fy,
+ radius
+ );
+ for (let i = 0; i < this.stops.length; i++) {
+ const stop = this.stops[i];
+ this._renderer.effect.addColorStop(stop._offset, stop._color);
+ }
+ }
+ return this.flagReset();
+ }
+ },
+ texture: {
+ render: function(ctx) {
+ this._update();
+ const image = this.image;
+ if (!this._renderer.effect || (this._flagLoaded || this._flagImage || this._flagVideo || this._flagRepeat) && this.loaded) {
+ this._renderer.effect = ctx.createPattern(this.image, this._repeat);
+ }
+ if (this._flagOffset || this._flagLoaded || this._flagScale) {
+ if (!(this._renderer.offset instanceof Vector)) {
+ this._renderer.offset = new Vector();
+ }
+ this._renderer.offset.x = -this._offset.x;
+ this._renderer.offset.y = -this._offset.y;
+ if (image) {
+ this._renderer.offset.x += image.width / 2;
+ this._renderer.offset.y += image.height / 2;
+ if (this._scale instanceof Vector) {
+ this._renderer.offset.x *= this._scale.x;
+ this._renderer.offset.y *= this._scale.y;
+ } else {
+ this._renderer.offset.x *= this._scale;
+ this._renderer.offset.y *= this._scale;
+ }
+ }
+ }
+ if (this._flagScale || this._flagLoaded) {
+ if (!(this._renderer.scale instanceof Vector)) {
+ this._renderer.scale = new Vector();
+ }
+ if (this._scale instanceof Vector) {
+ this._renderer.scale.copy(this._scale);
+ } else {
+ this._renderer.scale.set(this._scale, this._scale);
+ }
+ }
+ return this.flagReset();
+ }
+ },
+ renderSvgArcCommand: function(ctx, ax, ay, rx, ry, largeArcFlag, sweepFlag, xAxisRotation, x, y) {
+ xAxisRotation = xAxisRotation * Math.PI / 180;
+ rx = abs(rx);
+ ry = abs(ry);
+ const dx2 = (ax - x) / 2;
+ const dy2 = (ay - y) / 2;
+ const x1p = cos2(xAxisRotation) * dx2 + sin2(xAxisRotation) * dy2;
+ const y1p = -sin2(xAxisRotation) * dx2 + cos2(xAxisRotation) * dy2;
+ const x1ps = x1p * x1p;
+ const y1ps = y1p * y1p;
+ let rxs = rx * rx;
+ let rys = ry * ry;
+ const cr = x1ps / rxs + y1ps / rys;
+ if (cr > 1) {
+ const s = sqrt(cr);
+ rx = s * rx;
+ ry = s * ry;
+ rxs = rx * rx;
+ rys = ry * ry;
+ }
+ const dq = rxs * y1ps + rys * x1ps;
+ const pq = (rxs * rys - dq) / dq;
+ let q = sqrt(max2(0, pq));
+ if (largeArcFlag === sweepFlag)
+ q = -q;
+ const cxp = q * rx * y1p / ry;
+ const cyp = -q * ry * x1p / rx;
+ const cx = cos2(xAxisRotation) * cxp - sin2(xAxisRotation) * cyp + (ax + x) / 2;
+ const cy = sin2(xAxisRotation) * cxp + cos2(xAxisRotation) * cyp + (ay + y) / 2;
+ const startAngle = svgAngle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry);
+ const delta = svgAngle(
+ (x1p - cxp) / rx,
+ (y1p - cyp) / ry,
+ (-x1p - cxp) / rx,
+ (-y1p - cyp) / ry
+ ) % TWO_PI;
+ const endAngle = startAngle + delta;
+ const clockwise = sweepFlag === 0;
+ renderArcEstimate(
+ ctx,
+ cx,
+ cy,
+ rx,
+ ry,
+ startAngle,
+ endAngle,
+ clockwise,
+ xAxisRotation
+ );
+ }
+ };
+ var Renderer = class extends Events {
+ constructor(params) {
+ super();
+ const smoothing = params.smoothing !== false;
+ this.domElement = params.domElement || document.createElement("canvas");
+ this.ctx = this.domElement.getContext("2d");
+ this.overdraw = params.overdraw || false;
+ if (typeof this.ctx.imageSmoothingEnabled !== "undefined") {
+ this.ctx.imageSmoothingEnabled = smoothing;
+ }
+ this.scene = new Group();
+ this.scene.parent = this;
+ }
+ setSize(width, height, ratio) {
+ this.width = width;
+ this.height = height;
+ this.ratio = typeof ratio === "undefined" ? getRatio(this.ctx) : ratio;
+ this.domElement.width = width * this.ratio;
+ this.domElement.height = height * this.ratio;
+ if (this.domElement.style) {
+ _.extend(this.domElement.style, {
+ width: width + "px",
+ height: height + "px"
+ });
+ }
+ return this.trigger(Events.Types.resize, width, height, ratio);
+ }
+ render() {
+ const isOne = this.ratio === 1;
+ if (!isOne) {
+ this.ctx.save();
+ this.ctx.scale(this.ratio, this.ratio);
+ }
+ if (!this.overdraw) {
+ this.ctx.clearRect(0, 0, this.width, this.height);
+ }
+ canvas.group.render.call(this.scene, this.ctx);
+ if (!isOne) {
+ this.ctx.restore();
+ }
+ return this;
+ }
+ };
+ __publicField(Renderer, "Utils", canvas);
+ function renderArcEstimate(ctx, ox, oy, rx, ry, startAngle, endAngle, clockwise, xAxisRotation) {
+ const delta = endAngle - startAngle;
+ const epsilon = Curve.Tolerance.epsilon;
+ const samePoints = Math.abs(delta) < epsilon;
+ let deltaAngle = mod(delta, TWO_PI);
+ if (deltaAngle < epsilon) {
+ if (samePoints) {
+ deltaAngle = 0;
+ } else {
+ deltaAngle = TWO_PI;
+ }
+ }
+ if (clockwise === true && !samePoints) {
+ if (deltaAngle === TWO_PI) {
+ deltaAngle = -TWO_PI;
+ } else {
+ deltaAngle = deltaAngle - TWO_PI;
+ }
+ }
+ for (let i = 0; i < Constants.Resolution; i++) {
+ const t = i / (Constants.Resolution - 1);
+ const angle = startAngle + t * deltaAngle;
+ let x = ox + rx * Math.cos(angle);
+ let y = oy + ry * Math.sin(angle);
+ if (xAxisRotation !== 0) {
+ const cos7 = Math.cos(xAxisRotation);
+ const sin7 = Math.sin(xAxisRotation);
+ const tx = x - ox;
+ const ty = y - oy;
+ x = tx * cos7 - ty * sin7 + ox;
+ y = tx * sin7 + ty * cos7 + oy;
+ }
+ ctx.lineTo(x, y);
+ }
+ }
+ function svgAngle(ux, uy, vx, vy) {
+ const dot = ux * vx + uy * vy;
+ const len = sqrt(ux * ux + uy * uy) * sqrt(vx * vx + vy * vy);
+ let ang = acos(max2(-1, min2(1, dot / len)));
+ if (ux * vy - uy * vx < 0) {
+ ang = -ang;
+ }
+ return ang;
+ }
+ function isDefaultMatrix(m) {
+ return m[0] == 1 && m[3] == 0 && m[1] == 0 && m[4] == 1 && m[2] == 0 && m[5] == 0;
+ }
+
+ // src/utils/canvas-shim.js
+ var CanvasShim = {
+ Image: null,
+ isHeadless: false,
+ shim: function(canvas3, Image) {
+ Renderer.Utils.shim(canvas3);
+ if (typeof Image !== "undefined") {
+ CanvasShim.Image = Image;
+ }
+ CanvasShim.isHeadless = true;
+ return canvas3;
+ }
+ };
+
+ // src/utils/dom.js
+ var dom = {
+ hasEventListeners: typeof root.addEventListener === "function",
+ bind: function(elem, event, func, bool) {
+ if (this.hasEventListeners) {
+ elem.addEventListener(event, func, !!bool);
+ } else {
+ elem.attachEvent("on" + event, func);
+ }
+ return dom;
+ },
+ unbind: function(elem, event, func, bool) {
+ if (dom.hasEventListeners) {
+ elem.removeEventListeners(event, func, !!bool);
+ } else {
+ elem.detachEvent("on" + event, func);
+ }
+ return dom;
+ },
+ getRequestAnimationFrame: function() {
+ const vendors = ["ms", "moz", "webkit", "o"];
+ let lastTime = 0;
+ let request = root.requestAnimationFrame;
+ if (!request) {
+ for (let i = 0; i < vendors.length; i++) {
+ request = root[vendors[i] + "RequestAnimationFrame"] || request;
+ }
+ request = request || fallbackRequest;
+ }
+ function fallbackRequest(callback, element) {
+ const currTime = new Date().getTime();
+ const timeToCall = Math.max(0, 16 - (currTime - lastTime));
+ const id = root.setTimeout(nextRequest, timeToCall);
+ lastTime = currTime + timeToCall;
+ function nextRequest() {
+ callback(currTime + timeToCall);
+ }
+ return id;
+ }
+ return request;
+ }
+ };
+ var temp = root.document ? root.document.createElement("div") : {};
+ temp.id = "help-two-load";
+ Object.defineProperty(dom, "temp", {
+ enumerable: true,
+ get: function() {
+ if (_.isElement(temp) && !root.document.head.contains(temp)) {
+ temp.style.display = "none";
+ root.document.head.appendChild(temp);
+ }
+ return temp;
+ }
+ });
+
+ // src/utils/error.js
+ var TwoError = class extends Error {
+ name = "Two.js";
+ message;
+ constructor(message) {
+ super();
+ this.message = message;
+ }
+ };
+
+ // src/registry.js
+ var Registry = class {
+ map = {};
+ constructor() {
+ }
+ add(id, obj) {
+ this.map[id] = obj;
+ return this;
+ }
+ remove(id) {
+ delete this.map[id];
+ return this;
+ }
+ get(id) {
+ return this.map[id];
+ }
+ contains(id) {
+ return id in this.map;
+ }
+ };
+
+ // src/utils/shape.js
+ function contains(path, t) {
+ if (t === 0 || t === 1) {
+ return true;
+ }
+ const length = path._length;
+ const target = length * t;
+ let elapsed = 0;
+ for (let i = 0; i < path._lengths.length; i++) {
+ const dist = path._lengths[i];
+ if (elapsed >= target) {
+ return target - elapsed >= 0;
+ }
+ elapsed += dist;
+ }
+ return false;
+ }
+ function getIdByLength(path, target) {
+ const total = path._length;
+ if (target <= 0) {
+ return 0;
+ } else if (target >= total) {
+ return path._lengths.length - 1;
+ }
+ for (let i = 0, sum = 0; i < path._lengths.length; i++) {
+ if (sum + path._lengths[i] >= target) {
+ target -= sum;
+ return Math.max(i - 1, 0) + target / path._lengths[i];
+ }
+ sum += path._lengths[i];
+ }
+ return -1;
+ }
+ function getCurveLength2(a, b, limit) {
+ let x1, x2, x3, x4, y1, y2, y3, y4;
+ const right = b.controls && b.controls.right;
+ const left = a.controls && a.controls.left;
+ x1 = b.x;
+ y1 = b.y;
+ x2 = (right || b).x;
+ y2 = (right || b).y;
+ x3 = (left || a).x;
+ y3 = (left || a).y;
+ x4 = a.x;
+ y4 = a.y;
+ if (right && b._relative) {
+ x2 += b.x;
+ y2 += b.y;
+ }
+ if (left && a._relative) {
+ x3 += a.x;
+ y3 += a.y;
+ }
+ return getCurveLength(x1, y1, x2, y2, x3, y3, x4, y4, limit);
+ }
+ function getSubdivisions(a, b, limit) {
+ let x1, x2, x3, x4, y1, y2, y3, y4;
+ const right = b.controls && b.controls.right;
+ const left = a.controls && a.controls.left;
+ x1 = b.x;
+ y1 = b.y;
+ x2 = (right || b).x;
+ y2 = (right || b).y;
+ x3 = (left || a).x;
+ y3 = (left || a).y;
+ x4 = a.x;
+ y4 = a.y;
+ if (right && b._relative) {
+ x2 += b.x;
+ y2 += b.y;
+ }
+ if (left && a._relative) {
+ x3 += a.x;
+ y3 += a.y;
+ }
+ return subdivide(x1, y1, x2, y2, x3, y3, x4, y4, limit);
+ }
+
+ // src/effects/stop.js
+ var _Stop = class extends Element {
+ _flagOffset = true;
+ _flagOpacity = true;
+ _flagColor = true;
+ _offset = 0;
+ _opacity = 1;
+ _color = "#fff";
+ constructor(offset, color, opacity) {
+ super();
+ for (let prop in proto6) {
+ Object.defineProperty(this, prop, proto6[prop]);
+ }
+ this._renderer.type = "stop";
+ this.offset = typeof offset === "number" ? offset : _Stop.Index <= 0 ? 0 : 1;
+ this.opacity = typeof opacity === "number" ? opacity : 1;
+ this.color = typeof color === "string" ? color : _Stop.Index <= 0 ? "#fff" : "#000";
+ _Stop.Index = (_Stop.Index + 1) % 2;
+ }
+ clone(parent) {
+ const clone = new _Stop();
+ _.each(_Stop.Properties, function(property) {
+ clone[property] = this[property];
+ }, this);
+ if (parent && parent.stops) {
+ parent.stops.push(clone);
+ }
+ return clone;
+ }
+ toObject() {
+ const result = {};
+ _.each(_Stop.Properties, function(k) {
+ result[k] = this[k];
+ }, this);
+ return result;
+ }
+ flagReset() {
+ this._flagOffset = this._flagColor = this._flagOpacity = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ };
+ var Stop = _Stop;
+ __publicField(Stop, "Index", 0);
+ __publicField(Stop, "Properties", ["offset", "opacity", "color"]);
+ var proto6 = {
+ offset: {
+ enumerable: true,
+ get: function() {
+ return this._offset;
+ },
+ set: function(v) {
+ this._offset = v;
+ this._flagOffset = true;
+ if (this.parent) {
+ this.parent._flagStops = true;
+ }
+ }
+ },
+ opacity: {
+ enumerable: true,
+ get: function() {
+ return this._opacity;
+ },
+ set: function(v) {
+ this._opacity = v;
+ this._flagOpacity = true;
+ if (this.parent) {
+ this.parent._flagStops = true;
+ }
+ }
+ },
+ color: {
+ enumerable: true,
+ get: function() {
+ return this._color;
+ },
+ set: function(v) {
+ this._color = v;
+ this._flagColor = true;
+ if (this.parent) {
+ this.parent._flagStops = true;
+ }
+ }
+ }
+ };
+
+ // src/effects/gradient.js
+ var _Gradient = class extends Element {
+ _flagStops = false;
+ _flagSpread = false;
+ _flagUnits = false;
+ _spread = "";
+ _units = "";
+ constructor(stops) {
+ super();
+ for (let prop in proto7) {
+ Object.defineProperty(this, prop, proto7[prop]);
+ }
+ this._renderer.type = "gradient";
+ this.id = Constants.Identifier + Constants.uniqueId();
+ this.classList = [];
+ this._renderer.flagStops = FlagStops.bind(this);
+ this._renderer.bindStops = BindStops.bind(this);
+ this._renderer.unbindStops = UnbindStops.bind(this);
+ this.spread = "pad";
+ this.units = "objectBoundingBox";
+ if (stops) {
+ this.stops = stops;
+ }
+ }
+ clone(parent) {
+ const stops = this.stops.map(function(s) {
+ return s.clone();
+ });
+ const clone = new _Gradient(stops);
+ _.each(_Gradient.Properties, function(k) {
+ clone[k] = this[k];
+ }, this);
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone;
+ }
+ toObject() {
+ const result = {
+ stops: this.stops.map(function(s) {
+ return s.toObject();
+ })
+ };
+ _.each(_Gradient.Properties, function(k) {
+ result[k] = this[k];
+ }, this);
+ return result;
+ }
+ _update() {
+ if (this._flagSpread || this._flagStops) {
+ this.trigger(Events.Types.change);
+ }
+ return this;
+ }
+ flagReset() {
+ this._flagSpread = this._flagUnits = this._flagStops = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ };
+ var Gradient = _Gradient;
+ __publicField(Gradient, "Stop", Stop);
+ __publicField(Gradient, "Properties", ["spread", "stops", "renderer", "units"]);
+ var proto7 = {
+ spread: {
+ enumerable: true,
+ get: function() {
+ return this._spread;
+ },
+ set: function(v) {
+ this._spread = v;
+ this._flagSpread = true;
+ }
+ },
+ units: {
+ enumerable: true,
+ get: function() {
+ return this._units;
+ },
+ set: function(v) {
+ this._units = v;
+ this._flagUnits = true;
+ }
+ },
+ stops: {
+ enumerable: true,
+ get: function() {
+ return this._stops;
+ },
+ set: function(stops) {
+ const bindStops = this._renderer.bindStops;
+ const unbindStops = this._renderer.unbindStops;
+ if (this._stops) {
+ this._stops.unbind(Events.Types.insert, bindStops).unbind(Events.Types.remove, unbindStops);
+ }
+ this._stops = new Collection((stops || []).slice(0));
+ this._stops.bind(Events.Types.insert, bindStops).bind(Events.Types.remove, unbindStops);
+ bindStops(this._stops);
+ }
+ }
+ };
+ function FlagStops() {
+ this._flagStops = true;
+ }
+ function BindStops(items) {
+ let i = items.length;
+ while (i--) {
+ items[i].bind(Events.Types.change, this._renderer.flagStops);
+ items[i].parent = this;
+ }
+ this._renderer.flagStops();
+ }
+ function UnbindStops(items) {
+ let i = items.length;
+ while (i--) {
+ items[i].unbind(Events.Types.change, this._renderer.flagStops);
+ delete items[i].parent;
+ }
+ this._renderer.flagStops();
+ }
+
+ // src/effects/linear-gradient.js
+ var _LinearGradient = class extends Gradient {
+ _flagEndPoints = false;
+ _left = null;
+ _right = null;
+ constructor(x1, y1, x2, y2, stops) {
+ super(stops);
+ for (let prop in proto8) {
+ Object.defineProperty(this, prop, proto8[prop]);
+ }
+ this._renderer.type = "linear-gradient";
+ this._renderer.flagEndPoints = FlagEndPoints.bind(this);
+ this.left = new Vector();
+ this.right = new Vector();
+ if (typeof x1 === "number") {
+ this.left.x = x1;
+ }
+ if (typeof y1 === "number") {
+ this.left.y = y1;
+ }
+ if (typeof x2 === "number") {
+ this.right.x = x2;
+ }
+ if (typeof y2 === "number") {
+ this.right.y = y2;
+ }
+ }
+ clone(parent) {
+ const stops = this.stops.map(function(stop) {
+ return stop.clone();
+ });
+ const clone = new _LinearGradient(
+ this.left._x,
+ this.left._y,
+ this.right._x,
+ this.right._y,
+ stops
+ );
+ _.each(Gradient.Properties, function(k) {
+ clone[k] = this[k];
+ }, this);
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone;
+ }
+ toObject() {
+ const result = super.toObject.call(this);
+ result.left = this.left.toObject();
+ result.right = this.right.toObject();
+ return result;
+ }
+ _update() {
+ if (this._flagEndPoints || this._flagSpread || this._flagStops) {
+ this.trigger(Events.Types.change);
+ }
+ return this;
+ }
+ flagReset() {
+ this._flagEndPoints = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ };
+ var LinearGradient = _LinearGradient;
+ __publicField(LinearGradient, "Properties", ["left", "right"]);
+ __publicField(LinearGradient, "Stop", Stop);
+ var proto8 = {
+ left: {
+ enumerable: true,
+ get: function() {
+ return this._left;
+ },
+ set: function(v) {
+ if (this._left instanceof Vector) {
+ this._left.unbind(Events.Types.change, this._renderer.flagEndPoints);
+ }
+ this._left = v;
+ this._left.bind(Events.Types.change, this._renderer.flagEndPoints);
+ this._flagEndPoints = true;
+ }
+ },
+ right: {
+ enumerable: true,
+ get: function() {
+ return this._right;
+ },
+ set: function(v) {
+ if (this._right instanceof Vector) {
+ this._right.unbind(Events.Types.change, this._renderer.flagEndPoints);
+ }
+ this._right = v;
+ this._right.bind(Events.Types.change, this._renderer.flagEndPoints);
+ this._flagEndPoints = true;
+ }
+ }
+ };
+ function FlagEndPoints() {
+ this._flagEndPoints = true;
+ }
+
+ // src/effects/radial-gradient.js
+ var _RadialGradient = class extends Gradient {
+ _flagRadius = false;
+ _flagCenter = false;
+ _flagFocal = false;
+ _radius = 0;
+ _center = null;
+ _focal = null;
+ constructor(cx, cy, r, stops, fx, fy) {
+ super(stops);
+ for (let prop in proto9) {
+ Object.defineProperty(this, prop, proto9[prop]);
+ }
+ this._renderer.type = "radial-gradient";
+ this._renderer.flagCenter = FlagCenter.bind(this);
+ this._renderer.flagFocal = FlagFocal.bind(this);
+ this.center = new Vector();
+ this.radius = typeof r === "number" ? r : 1;
+ this.focal = new Vector();
+ if (typeof cx === "number") {
+ this.center.x = cx;
+ }
+ if (typeof cy === "number") {
+ this.center.y = cy;
+ }
+ this.focal.copy(this.center);
+ if (typeof fx === "number") {
+ this.focal.x = fx;
+ }
+ if (typeof fy === "number") {
+ this.focal.y = fy;
+ }
+ }
+ clone(parent) {
+ const stops = this.stops.map(function(stop) {
+ return stop.clone();
+ });
+ const clone = new _RadialGradient(
+ this.center._x,
+ this.center._y,
+ this._radius,
+ stops,
+ this.focal._x,
+ this.focal._y
+ );
+ _.each(Gradient.Properties.concat(_RadialGradient.Properties), function(k) {
+ clone[k] = this[k];
+ }, this);
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone;
+ }
+ toObject() {
+ const result = super.toObject.call(this);
+ _.each(_RadialGradient.Properties, function(k) {
+ result[k] = this[k];
+ }, this);
+ result.center = this.center.toObject();
+ result.focal = this.focal.toObject();
+ return result;
+ }
+ _update() {
+ if (this._flagRadius || this._flatCenter || this._flagFocal || this._flagSpread || this._flagStops) {
+ this.trigger(Events.Types.change);
+ }
+ return this;
+ }
+ flagReset() {
+ this._flagRadius = this._flagCenter = this._flagFocal = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ };
+ var RadialGradient = _RadialGradient;
+ __publicField(RadialGradient, "Stop", Stop);
+ __publicField(RadialGradient, "Properties", ["center", "radius", "focal"]);
+ var proto9 = {
+ radius: {
+ enumerable: true,
+ get: function() {
+ return this._radius;
+ },
+ set: function(v) {
+ this._radius = v;
+ this._flagRadius = true;
+ }
+ },
+ center: {
+ enumerable: true,
+ get: function() {
+ return this._center;
+ },
+ set: function(v) {
+ if (this._center) {
+ this._center.unbind(Events.Types.change, this._renderer.flagCenter);
+ }
+ this._center = v;
+ this._center.bind(Events.Types.change, this._renderer.flagCenter);
+ this._flagCenter = true;
+ }
+ },
+ focal: {
+ enumerable: true,
+ get: function() {
+ return this._focal;
+ },
+ set: function(v) {
+ if (this._focal) {
+ this._focal.unbind(Events.Types.change, this._renderer.flagFocal);
+ }
+ this._focal = v;
+ this._focal.bind(Events.Types.change, this._renderer.flagFocal);
+ this._flagFocal = true;
+ }
+ }
+ };
+ function FlagCenter() {
+ this._flagCenter = true;
+ }
+ function FlagFocal() {
+ this._flagFocal = true;
+ }
+
+ // src/effects/texture.js
+ var anchor;
+ var regex = {
+ video: /\.(mp4|webm|ogg)$/i,
+ image: /\.(jpe?g|png|gif|tiff|webp)$/i,
+ effect: /texture|gradient/i
+ };
+ if (root.document) {
+ anchor = document.createElement("a");
+ }
+ var _Texture = class extends Element {
+ _flagSrc = false;
+ _flagImage = false;
+ _flagVideo = false;
+ _flagLoaded = false;
+ _flagRepeat = false;
+ _flagOffset = false;
+ _flagScale = false;
+ _src = "";
+ _image = null;
+ _loaded = false;
+ _repeat = "no-repeat";
+ _scale = 1;
+ _offset = null;
+ constructor(src, callback) {
+ super();
+ this._renderer = {};
+ for (let prop in proto10) {
+ Object.defineProperty(this, prop, proto10[prop]);
+ }
+ this._renderer.type = "texture";
+ this._renderer.flagOffset = FlagOffset.bind(this);
+ this._renderer.flagScale = FlagScale.bind(this);
+ this.id = Constants.Identifier + Constants.uniqueId();
+ this.classList = [];
+ this.loaded = false;
+ this.repeat = "no-repeat";
+ this.offset = new Vector();
+ if (typeof callback === "function") {
+ const loaded = function() {
+ this.unbind(Events.Types.load, loaded);
+ if (typeof callback === "function") {
+ callback();
+ }
+ }.bind(this);
+ this.bind(Events.Types.load, loaded);
+ }
+ if (typeof src === "string") {
+ this.src = src;
+ } else if (typeof src === "object") {
+ const elemString = Object.prototype.toString.call(src);
+ if (elemString === "[object HTMLImageElement]" || elemString === "[object HTMLCanvasElement]" || elemString === "[object HTMLVideoElement]" || elemString === "[object Image]") {
+ this.image = src;
+ }
+ }
+ this._update();
+ }
+ static getAbsoluteURL(path) {
+ if (!anchor) {
+ return path;
+ }
+ anchor.href = path;
+ return anchor.href;
+ }
+ static loadHeadlessBuffer(texture, loaded) {
+ texture.image.onload = loaded;
+ texture.image.src = texture.src;
+ }
+ static getTag(image) {
+ return image && image.nodeName && image.nodeName.toLowerCase() || "img";
+ }
+ static getImage(src) {
+ const absoluteSrc = _Texture.getAbsoluteURL(src);
+ if (_Texture.ImageRegistry.contains(absoluteSrc)) {
+ return _Texture.ImageRegistry.get(absoluteSrc);
+ }
+ let image;
+ if (CanvasShim.Image) {
+ image = new CanvasShim.Image();
+ Renderer.Utils.shim(image, "img");
+ } else if (root.document) {
+ if (regex.video.test(absoluteSrc)) {
+ image = document.createElement("video");
+ } else {
+ image = document.createElement("img");
+ }
+ } else {
+ console.warn("Two.js: no prototypical image defined for Two.Texture");
+ }
+ image.crossOrigin = "anonymous";
+ image.referrerPolicy = "no-referrer";
+ return image;
+ }
+ static load(texture, callback) {
+ let image = texture.image;
+ let tag = _Texture.getTag(image);
+ if (texture._flagImage) {
+ if (/canvas/i.test(tag)) {
+ _Texture.Register.canvas(texture, callback);
+ } else {
+ texture._src = !CanvasShim.isHeadless && image.getAttribute("two-src") || image.src;
+ _Texture.Register[tag](texture, callback);
+ }
+ }
+ if (texture._flagSrc) {
+ if (!image) {
+ image = _Texture.getImage(texture.src);
+ texture.image = image;
+ }
+ tag = _Texture.getTag(image);
+ _Texture.Register[tag](texture, callback);
+ }
+ }
+ clone() {
+ const clone = new _Texture(this.src);
+ clone.repeat = this.repeat;
+ clone.offset.copy(this.origin);
+ clone.scale = this.scale;
+ return clone;
+ }
+ toObject() {
+ return {
+ src: this.src,
+ repeat: this.repeat,
+ origin: this.origin.toObject(),
+ scale: typeof this.scale === "number" ? this.scale : this.scale.toObject()
+ };
+ }
+ _update() {
+ if (this._flagSrc || this._flagImage) {
+ this.trigger(Events.Types.change);
+ if (this._flagSrc || this._flagImage) {
+ this.loaded = false;
+ _Texture.load(this, function() {
+ this.loaded = true;
+ this.trigger(Events.Types.change).trigger(Events.Types.load);
+ }.bind(this));
+ }
+ }
+ if (this._image && this._image.readyState >= 4) {
+ this._flagVideo = true;
+ }
+ return this;
+ }
+ flagReset() {
+ this._flagSrc = this._flagImage = this._flagLoaded = this._flagRepeat = this._flagVideo = this._flagScale = this._flagOffset = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ };
+ var Texture = _Texture;
+ __publicField(Texture, "Properties", [
+ "src",
+ "loaded",
+ "repeat",
+ "scale",
+ "offset",
+ "image"
+ ]);
+ __publicField(Texture, "RegularExpressions", regex);
+ __publicField(Texture, "ImageRegistry", new Registry());
+ __publicField(Texture, "Register", {
+ canvas: function(texture, callback) {
+ texture._src = "#" + texture.id;
+ _Texture.ImageRegistry.add(texture.src, texture.image);
+ if (typeof callback === "function") {
+ callback();
+ }
+ },
+ img: function(texture, callback) {
+ const image = texture.image;
+ const loaded = function(e) {
+ if (!CanvasShim.isHeadless && image.removeEventListener && typeof image.removeEventListener === "function") {
+ image.removeEventListener("load", loaded, false);
+ image.removeEventListener("error", error, false);
+ }
+ if (typeof callback === "function") {
+ callback();
+ }
+ };
+ const error = function(e) {
+ if (!CanvasShim.isHeadless && typeof image.removeEventListener === "function") {
+ image.removeEventListener("load", loaded, false);
+ image.removeEventListener("error", error, false);
+ }
+ throw new TwoError("unable to load " + texture.src);
+ };
+ if (typeof image.width === "number" && image.width > 0 && typeof image.height === "number" && image.height > 0) {
+ loaded();
+ } else if (!CanvasShim.isHeadless && typeof image.addEventListener === "function") {
+ image.addEventListener("load", loaded, false);
+ image.addEventListener("error", error, false);
+ }
+ texture._src = _Texture.getAbsoluteURL(texture._src);
+ if (!CanvasShim.isHeadless && image && image.getAttribute("two-src")) {
+ return;
+ }
+ if (!CanvasShim.isHeadless) {
+ image.setAttribute("two-src", texture.src);
+ }
+ _Texture.ImageRegistry.add(texture.src, image);
+ if (CanvasShim.isHeadless) {
+ _Texture.loadHeadlessBuffer(texture, loaded);
+ } else {
+ texture.image.src = texture.src;
+ }
+ },
+ video: function(texture, callback) {
+ if (CanvasShim.isHeadless) {
+ throw new TwoError("video textures are not implemented in headless environments.");
+ }
+ const loaded = function(e) {
+ texture.image.removeEventListener("canplaythrough", loaded, false);
+ texture.image.removeEventListener("error", error, false);
+ texture.image.width = texture.image.videoWidth;
+ texture.image.height = texture.image.videoHeight;
+ if (typeof callback === "function") {
+ callback();
+ }
+ };
+ const error = function(e) {
+ texture.image.removeEventListener("canplaythrough", loaded, false);
+ texture.image.removeEventListener("error", error, false);
+ throw new TwoError("unable to load " + texture.src);
+ };
+ texture._src = _Texture.getAbsoluteURL(texture._src);
+ if (!texture.image.getAttribute("two-src")) {
+ texture.image.setAttribute("two-src", texture.src);
+ _Texture.ImageRegistry.add(texture.src, texture.image);
+ }
+ if (texture.image.readyState >= 4) {
+ loaded();
+ } else {
+ texture.image.addEventListener("canplaythrough", loaded, false);
+ texture.image.addEventListener("error", error, false);
+ texture.image.src = texture.src;
+ texture.image.load();
+ }
+ }
+ });
+ var proto10 = {
+ src: {
+ enumerable: true,
+ get: function() {
+ return this._src;
+ },
+ set: function(v) {
+ this._src = v;
+ this._flagSrc = true;
+ }
+ },
+ loaded: {
+ enumerable: true,
+ get: function() {
+ return this._loaded;
+ },
+ set: function(v) {
+ this._loaded = v;
+ this._flagLoaded = true;
+ }
+ },
+ repeat: {
+ enumerable: true,
+ get: function() {
+ return this._repeat;
+ },
+ set: function(v) {
+ this._repeat = v;
+ this._flagRepeat = true;
+ }
+ },
+ image: {
+ enumerable: true,
+ get: function() {
+ return this._image;
+ },
+ set: function(image) {
+ const tag = Texture.getTag(image);
+ let index;
+ switch (tag) {
+ case "canvas":
+ index = "#" + image.id;
+ break;
+ default:
+ index = image.src;
+ }
+ if (Texture.ImageRegistry.contains(index)) {
+ this._image = Texture.ImageRegistry.get(image.src);
+ } else {
+ this._image = image;
+ }
+ this._flagImage = true;
+ }
+ },
+ offset: {
+ enumerable: true,
+ get: function() {
+ return this._offset;
+ },
+ set: function(v) {
+ if (this._offset) {
+ this._offset.unbind(Events.Types.change, this._renderer.flagOffset);
+ }
+ this._offset = v;
+ this._offset.bind(Events.Types.change, this._renderer.flagOffset);
+ this._flagOffset = true;
+ }
+ },
+ scale: {
+ enumerable: true,
+ get: function() {
+ return this._scale;
+ },
+ set: function(v) {
+ if (this._scale instanceof Vector) {
+ this._scale.unbind(Events.Types.change, this._renderer.flagScale);
+ }
+ this._scale = v;
+ if (this._scale instanceof Vector) {
+ this._scale.bind(Events.Types.change, this._renderer.flagScale);
+ }
+ this._flagScale = true;
+ }
+ }
+ };
+ function FlagOffset() {
+ this._flagOffset = true;
+ }
+ function FlagScale() {
+ this._flagScale = true;
+ }
+
+ // src/path.js
+ var min3 = Math.min;
+ var max3 = Math.max;
+ var ceil = Math.ceil;
+ var floor2 = Math.floor;
+ var vector = new Vector();
+ var _Path = class extends Shape {
+ _flagVertices = true;
+ _flagLength = true;
+ _flagFill = true;
+ _flagStroke = true;
+ _flagLinewidth = true;
+ _flagOpacity = true;
+ _flagVisible = true;
+ _flagCap = true;
+ _flagJoin = true;
+ _flagMiter = true;
+ _flagMask = false;
+ _flagClip = false;
+ _length = 0;
+ _fill = "#fff";
+ _stroke = "#000";
+ _linewidth = 1;
+ _opacity = 1;
+ _visible = true;
+ _cap = "round";
+ _join = "round";
+ _miter = 4;
+ _closed = true;
+ _curved = false;
+ _automatic = true;
+ _beginning = 0;
+ _ending = 1;
+ _mask = null;
+ _clip = false;
+ _dashes = null;
+ constructor(vertices, closed2, curved, manual) {
+ super();
+ for (let prop in proto11) {
+ Object.defineProperty(this, prop, proto11[prop]);
+ }
+ this._renderer.type = "path";
+ this._renderer.flagVertices = FlagVertices.bind(this);
+ this._renderer.bindVertices = BindVertices.bind(this);
+ this._renderer.unbindVertices = UnbindVertices.bind(this);
+ this._renderer.flagFill = FlagFill.bind(this);
+ this._renderer.flagStroke = FlagStroke.bind(this);
+ this._renderer.vertices = [];
+ this._renderer.collection = [];
+ this.closed = !!closed2;
+ this.curved = !!curved;
+ this.beginning = 0;
+ this.ending = 1;
+ this.fill = "#fff";
+ this.stroke = "#000";
+ this.linewidth = 1;
+ this.opacity = 1;
+ this.className = "";
+ this.visible = true;
+ this.cap = "butt";
+ this.join = "miter";
+ this.miter = 4;
+ this.vertices = vertices;
+ this.automatic = !manual;
+ this.dashes = [];
+ this.dashes.offset = 0;
+ }
+ clone(parent) {
+ const clone = new _Path();
+ for (let j = 0; j < this.vertices.length; j++) {
+ clone.vertices.push(this.vertices[j].clone());
+ }
+ for (let i = 0; i < _Path.Properties.length; i++) {
+ const k = _Path.Properties[i];
+ clone[k] = this[k];
+ }
+ clone.className = this.className;
+ clone.translation.copy(this.translation);
+ clone.rotation = this.rotation;
+ clone.scale = this.scale;
+ clone.skewX = this.skewX;
+ clone.skewY = this.skewY;
+ if (this.matrix.manual) {
+ clone.matrix.copy(this.matrix);
+ }
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone._update();
+ }
+ toObject() {
+ const result = {
+ vertices: this.vertices.map(function(v) {
+ return v.toObject();
+ })
+ };
+ _.each(_Path.Properties, function(k) {
+ if (typeof this[k] !== "undefined") {
+ if (this[k].toObject) {
+ result[k] = this[k].toObject();
+ } else {
+ result[k] = this[k];
+ }
+ }
+ }, this);
+ result.className = this.className;
+ result.translation = this.translation.toObject();
+ result.rotation = this.rotation;
+ result.scale = this.scale instanceof Vector ? this.scale.toObject() : this.scale;
+ result.skewX = this.skewX;
+ result.skewY = this.skewY;
+ if (this.matrix.manual) {
+ result.matrix = this.matrix.toObject();
+ }
+ return result;
+ }
+ noFill() {
+ this.fill = "none";
+ return this;
+ }
+ noStroke() {
+ this.stroke = "none";
+ return this;
+ }
+ corner() {
+ const rect = this.getBoundingClientRect(true);
+ const hw = rect.width / 2;
+ const hh = rect.height / 2;
+ const cx = rect.left + rect.width / 2;
+ const cy = rect.top + rect.height / 2;
+ for (let i = 0; i < this.vertices.length; i++) {
+ const v = this.vertices[i];
+ v.x -= cx;
+ v.y -= cy;
+ v.x += hw;
+ v.y += hh;
+ }
+ if (this.mask) {
+ this.mask.translation.x -= cx;
+ this.mask.translation.x += hw;
+ this.mask.translation.y -= cy;
+ this.mask.translation.y += hh;
+ }
+ return this;
+ }
+ center() {
+ const rect = this.getBoundingClientRect(true);
+ const cx = rect.left + rect.width / 2 - this.translation.x;
+ const cy = rect.top + rect.height / 2 - this.translation.y;
+ for (let i = 0; i < this.vertices.length; i++) {
+ const v = this.vertices[i];
+ v.x -= cx;
+ v.y -= cy;
+ }
+ if (this.mask) {
+ this.mask.translation.x -= cx;
+ this.mask.translation.y -= cy;
+ }
+ return this;
+ }
+ getBoundingClientRect(shallow) {
+ let matrix, border, l, i, v0, v1;
+ let left = Infinity, right = -Infinity, top = Infinity, bottom = -Infinity;
+ this._update(true);
+ matrix = shallow ? this.matrix : this.worldMatrix;
+ border = (this.linewidth || 0) / 2;
+ l = this._renderer.vertices.length;
+ if (this.linewidth > 0 || this.stroke && !/(transparent|none)/i.test(this.stroke)) {
+ if (this.matrix.manual) {
+ const { scaleX, scaleY } = decomposeMatrix(
+ matrix.elements[0],
+ matrix.elements[3],
+ matrix.elements[1],
+ matrix.elements[4],
+ matrix.elements[2],
+ matrix.elements[5]
+ );
+ if (typeof scaleX === "number" && typeof scaleY === "number") {
+ border = Math.max(scaleX, scaleY) * (this.linewidth || 0) / 2;
+ }
+ } else {
+ border *= typeof this.scale === "number" ? this.scale : Math.max(this.scale.x, this.scale.y);
+ }
+ }
+ if (l <= 0) {
+ return {
+ width: 0,
+ height: 0
+ };
+ }
+ for (i = 0; i < l; i++) {
+ v1 = this._renderer.vertices[i];
+ v0 = this._renderer.vertices[(i + l - 1) % l];
+ const [v0x, v0y] = matrix.multiply(v0.x, v0.y);
+ const [v1x, v1y] = matrix.multiply(v1.x, v1.y);
+ if (v0.controls && v1.controls) {
+ let rx = v0.controls.right.x;
+ let ry = v0.controls.right.y;
+ if (v0.relative) {
+ rx += v0.x;
+ ry += v0.y;
+ }
+ let [c0x, c0y] = matrix.multiply(rx, ry);
+ let lx = v1.controls.left.x;
+ let ly = v1.controls.left.y;
+ if (v1.relative) {
+ lx += v1.x;
+ ly += v1.y;
+ }
+ let [c1x, c1y] = matrix.multiply(lx, ly);
+ const bb = getCurveBoundingBox(
+ v0x,
+ v0y,
+ c0x,
+ c0y,
+ c1x,
+ c1y,
+ v1x,
+ v1y
+ );
+ top = min3(bb.min.y - border, top);
+ left = min3(bb.min.x - border, left);
+ right = max3(bb.max.x + border, right);
+ bottom = max3(bb.max.y + border, bottom);
+ } else {
+ if (i <= 1) {
+ top = min3(v0y - border, top);
+ left = min3(v0x - border, left);
+ right = max3(v0x + border, right);
+ bottom = max3(v0y + border, bottom);
+ }
+ top = min3(v1y - border, top);
+ left = min3(v1x - border, left);
+ right = max3(v1x + border, right);
+ bottom = max3(v1y + border, bottom);
+ }
+ }
+ return {
+ top,
+ left,
+ right,
+ bottom,
+ width: right - left,
+ height: bottom - top
+ };
+ }
+ getPointAt(t, obj) {
+ let ia, ib, result;
+ let x, x1, x2, x3, x4, y, y1, y2, y3, y4, left, right;
+ let target = this.length * Math.min(Math.max(t, 0), 1);
+ const length = this.vertices.length;
+ const last = length - 1;
+ let a = null;
+ let b = null;
+ for (let i = 0, l = this._lengths.length, sum = 0; i < l; i++) {
+ if (sum + this._lengths[i] >= target) {
+ if (this._closed) {
+ ia = mod(i, length);
+ ib = mod(i - 1, length);
+ if (i === 0) {
+ ia = ib;
+ ib = i;
+ }
+ } else {
+ ia = i;
+ ib = Math.min(Math.max(i - 1, 0), last);
+ }
+ a = this.vertices[ia];
+ b = this.vertices[ib];
+ target -= sum;
+ if (this._lengths[i] !== 0) {
+ t = target / this._lengths[i];
+ } else {
+ t = 0;
+ }
+ break;
+ }
+ sum += this._lengths[i];
+ }
+ if (a === null || b === null) {
+ return null;
+ }
+ if (!a) {
+ return b;
+ } else if (!b) {
+ return a;
+ }
+ right = b.controls && b.controls.right;
+ left = a.controls && a.controls.left;
+ x1 = b.x;
+ y1 = b.y;
+ x2 = (right || b).x;
+ y2 = (right || b).y;
+ x3 = (left || a).x;
+ y3 = (left || a).y;
+ x4 = a.x;
+ y4 = a.y;
+ if (right && b.relative) {
+ x2 += b.x;
+ y2 += b.y;
+ }
+ if (left && a.relative) {
+ x3 += a.x;
+ y3 += a.y;
+ }
+ x = getComponentOnCubicBezier(t, x1, x2, x3, x4);
+ y = getComponentOnCubicBezier(t, y1, y2, y3, y4);
+ const t1x = lerp(x1, x2, t);
+ const t1y = lerp(y1, y2, t);
+ const t2x = lerp(x2, x3, t);
+ const t2y = lerp(y2, y3, t);
+ const t3x = lerp(x3, x4, t);
+ const t3y = lerp(y3, y4, t);
+ const brx = lerp(t1x, t2x, t);
+ const bry = lerp(t1y, t2y, t);
+ const alx = lerp(t2x, t3x, t);
+ const aly = lerp(t2y, t3y, t);
+ if (_.isObject(obj)) {
+ obj.x = x;
+ obj.y = y;
+ if (obj instanceof Anchor) {
+ obj.controls.left.x = brx;
+ obj.controls.left.y = bry;
+ obj.controls.right.x = alx;
+ obj.controls.right.y = aly;
+ if (!(typeof obj.relative === "boolean") || obj.relative) {
+ obj.controls.left.x -= x;
+ obj.controls.left.y -= y;
+ obj.controls.right.x -= x;
+ obj.controls.right.y -= y;
+ }
+ }
+ obj.t = t;
+ return obj;
+ }
+ result = new Anchor(
+ x,
+ y,
+ brx - x,
+ bry - y,
+ alx - x,
+ aly - y,
+ this._curved ? Commands.curve : Commands.line
+ );
+ result.t = t;
+ return result;
+ }
+ plot() {
+ if (this.curved) {
+ getCurveFromPoints(this._collection, this.closed);
+ return this;
+ }
+ for (let i = 0; i < this._collection.length; i++) {
+ this._collection[i].command = i === 0 ? Commands.move : Commands.line;
+ }
+ return this;
+ }
+ subdivide(limit) {
+ this._update();
+ const last = this.vertices.length - 1;
+ const closed2 = this._closed || this.vertices[last]._command === Commands.close;
+ let b = this.vertices[last];
+ let points = [], verts;
+ _.each(this.vertices, function(a, i) {
+ if (i <= 0 && !closed2) {
+ b = a;
+ return;
+ }
+ if (a.command === Commands.move) {
+ points.push(new Anchor(b.x, b.y));
+ if (i > 0) {
+ points[points.length - 1].command = Commands.line;
+ }
+ b = a;
+ return;
+ }
+ verts = getSubdivisions(a, b, limit);
+ points = points.concat(verts);
+ _.each(verts, function(v, i2) {
+ if (i2 <= 0 && b.command === Commands.move) {
+ v.command = Commands.move;
+ } else {
+ v.command = Commands.line;
+ }
+ });
+ if (i >= last) {
+ if (this._closed && this._automatic) {
+ b = a;
+ verts = getSubdivisions(a, b, limit);
+ points = points.concat(verts);
+ _.each(verts, function(v, i2) {
+ if (i2 <= 0 && b.command === Commands.move) {
+ v.command = Commands.move;
+ } else {
+ v.command = Commands.line;
+ }
+ });
+ } else if (closed2) {
+ points.push(new Anchor(a.x, a.y));
+ }
+ points[points.length - 1].command = closed2 ? Commands.close : Commands.line;
+ }
+ b = a;
+ }, this);
+ this._automatic = false;
+ this._curved = false;
+ this.vertices = points;
+ return this;
+ }
+ _updateLength(limit, silent) {
+ if (!silent) {
+ this._update();
+ }
+ const length = this.vertices.length;
+ const last = length - 1;
+ const closed2 = false;
+ let b = this.vertices[last];
+ let sum = 0;
+ if (typeof this._lengths === "undefined") {
+ this._lengths = [];
+ }
+ _.each(this.vertices, function(a, i) {
+ if (i <= 0 && !closed2 || a.command === Commands.move) {
+ b = a;
+ this._lengths[i] = 0;
+ return;
+ }
+ this._lengths[i] = getCurveLength2(a, b, limit);
+ sum += this._lengths[i];
+ if (i >= last && closed2) {
+ b = this.vertices[(i + 1) % length];
+ this._lengths[i + 1] = getCurveLength2(a, b, limit);
+ sum += this._lengths[i + 1];
+ }
+ b = a;
+ }, this);
+ this._length = sum;
+ this._flagLength = false;
+ return this;
+ }
+ _update() {
+ if (this._flagVertices) {
+ if (this._automatic) {
+ this.plot();
+ }
+ if (this._flagLength) {
+ this._updateLength(void 0, true);
+ }
+ const l = this._collection.length;
+ const closed2 = this._closed;
+ const beginning = Math.min(this._beginning, this._ending);
+ const ending = Math.max(this._beginning, this._ending);
+ const bid = getIdByLength(this, beginning * this._length);
+ const eid = getIdByLength(this, ending * this._length);
+ const low = ceil(bid);
+ const high = floor2(eid);
+ let left, right, prev, next, v, i;
+ this._renderer.vertices.length = 0;
+ for (i = 0; i < l; i++) {
+ if (this._renderer.collection.length <= i) {
+ this._renderer.collection.push(new Anchor());
+ }
+ if (i > high && !right) {
+ v = this._renderer.collection[i].copy(this._collection[i]);
+ this.getPointAt(ending, v);
+ v.command = this._renderer.collection[i].command;
+ this._renderer.vertices.push(v);
+ right = v;
+ prev = this._collection[i - 1];
+ if (prev && prev.controls) {
+ if (v.relative) {
+ v.controls.right.clear();
+ } else {
+ v.controls.right.copy(v);
+ }
+ if (prev.relative) {
+ this._renderer.collection[i - 1].controls.right.copy(prev.controls.right).lerp(Vector.zero, 1 - v.t);
+ } else {
+ this._renderer.collection[i - 1].controls.right.copy(prev.controls.right).lerp(prev, 1 - v.t);
+ }
+ }
+ } else if (i >= low && i <= high) {
+ v = this._renderer.collection[i].copy(this._collection[i]);
+ this._renderer.vertices.push(v);
+ if (i === high && contains(this, ending)) {
+ right = v;
+ if (!closed2 && right.controls) {
+ if (right.relative) {
+ right.controls.right.clear();
+ } else {
+ right.controls.right.copy(right);
+ }
+ }
+ } else if (i === low && contains(this, beginning)) {
+ left = v;
+ left.command = Commands.move;
+ if (!closed2 && left.controls) {
+ if (left.relative) {
+ left.controls.left.clear();
+ } else {
+ left.controls.left.copy(left);
+ }
+ }
+ }
+ }
+ }
+ if (low > 0 && !left) {
+ i = low - 1;
+ v = this._renderer.collection[i].copy(this._collection[i]);
+ this.getPointAt(beginning, v);
+ v.command = Commands.move;
+ this._renderer.vertices.unshift(v);
+ next = this._collection[i + 1];
+ if (next && next.controls) {
+ v.controls.left.clear();
+ if (next.relative) {
+ this._renderer.collection[i + 1].controls.left.copy(next.controls.left).lerp(Vector.zero, v.t);
+ } else {
+ vector.copy(next);
+ this._renderer.collection[i + 1].controls.left.copy(next.controls.left).lerp(next, v.t);
+ }
+ }
+ }
+ }
+ Shape.prototype._update.apply(this, arguments);
+ return this;
+ }
+ flagReset() {
+ this._flagVertices = this._flagLength = this._flagFill = this._flagStroke = this._flagLinewidth = this._flagOpacity = this._flagVisible = this._flagCap = this._flagJoin = this._flagMiter = this._flagClip = false;
+ Shape.prototype.flagReset.call(this);
+ return this;
+ }
+ };
+ var Path = _Path;
+ __publicField(Path, "Properties", [
+ "fill",
+ "stroke",
+ "linewidth",
+ "opacity",
+ "visible",
+ "cap",
+ "join",
+ "miter",
+ "closed",
+ "curved",
+ "automatic",
+ "beginning",
+ "ending"
+ ]);
+ __publicField(Path, "Utils", {
+ getCurveLength: getCurveLength2
+ });
+ var proto11 = {
+ linewidth: {
+ enumerable: true,
+ get: function() {
+ return this._linewidth;
+ },
+ set: function(v) {
+ this._linewidth = v;
+ this._flagLinewidth = true;
+ }
+ },
+ opacity: {
+ enumerable: true,
+ get: function() {
+ return this._opacity;
+ },
+ set: function(v) {
+ this._opacity = v;
+ this._flagOpacity = true;
+ }
+ },
+ visible: {
+ enumerable: true,
+ get: function() {
+ return this._visible;
+ },
+ set: function(v) {
+ this._visible = v;
+ this._flagVisible = true;
+ }
+ },
+ cap: {
+ enumerable: true,
+ get: function() {
+ return this._cap;
+ },
+ set: function(v) {
+ this._cap = v;
+ this._flagCap = true;
+ }
+ },
+ join: {
+ enumerable: true,
+ get: function() {
+ return this._join;
+ },
+ set: function(v) {
+ this._join = v;
+ this._flagJoin = true;
+ }
+ },
+ miter: {
+ enumerable: true,
+ get: function() {
+ return this._miter;
+ },
+ set: function(v) {
+ this._miter = v;
+ this._flagMiter = true;
+ }
+ },
+ fill: {
+ enumerable: true,
+ get: function() {
+ return this._fill;
+ },
+ set: function(f) {
+ if (this._fill instanceof Gradient || this._fill instanceof LinearGradient || this._fill instanceof RadialGradient || this._fill instanceof Texture) {
+ this._fill.unbind(Events.Types.change, this._renderer.flagFill);
+ }
+ this._fill = f;
+ this._flagFill = true;
+ if (this._fill instanceof Gradient || this._fill instanceof LinearGradient || this._fill instanceof RadialGradient || this._fill instanceof Texture) {
+ this._fill.bind(Events.Types.change, this._renderer.flagFill);
+ }
+ }
+ },
+ stroke: {
+ enumerable: true,
+ get: function() {
+ return this._stroke;
+ },
+ set: function(f) {
+ if (this._stroke instanceof Gradient || this._stroke instanceof LinearGradient || this._stroke instanceof RadialGradient || this._stroke instanceof Texture) {
+ this._stroke.unbind(Events.Types.change, this._renderer.flagStroke);
+ }
+ this._stroke = f;
+ this._flagStroke = true;
+ if (this._stroke instanceof Gradient || this._stroke instanceof LinearGradient || this._stroke instanceof RadialGradient || this._stroke instanceof Texture) {
+ this._stroke.bind(Events.Types.change, this._renderer.flagStroke);
+ }
+ }
+ },
+ length: {
+ get: function() {
+ if (this._flagLength) {
+ this._updateLength();
+ }
+ return this._length;
+ }
+ },
+ closed: {
+ enumerable: true,
+ get: function() {
+ return this._closed;
+ },
+ set: function(v) {
+ this._closed = !!v;
+ this._flagVertices = true;
+ }
+ },
+ curved: {
+ enumerable: true,
+ get: function() {
+ return this._curved;
+ },
+ set: function(v) {
+ this._curved = !!v;
+ this._flagVertices = true;
+ }
+ },
+ automatic: {
+ enumerable: true,
+ get: function() {
+ return this._automatic;
+ },
+ set: function(v) {
+ if (v === this._automatic) {
+ return;
+ }
+ this._automatic = !!v;
+ const method = this._automatic ? "ignore" : "listen";
+ _.each(this.vertices, function(v2) {
+ v2[method]();
+ });
+ }
+ },
+ beginning: {
+ enumerable: true,
+ get: function() {
+ return this._beginning;
+ },
+ set: function(v) {
+ this._beginning = v;
+ this._flagVertices = true;
+ }
+ },
+ ending: {
+ enumerable: true,
+ get: function() {
+ return this._ending;
+ },
+ set: function(v) {
+ this._ending = v;
+ this._flagVertices = true;
+ }
+ },
+ vertices: {
+ enumerable: true,
+ get: function() {
+ return this._collection;
+ },
+ set: function(vertices) {
+ const bindVertices = this._renderer.bindVertices;
+ const unbindVertices = this._renderer.unbindVertices;
+ if (this._collection) {
+ this._collection.unbind(Events.Types.insert, bindVertices).unbind(Events.Types.remove, unbindVertices);
+ }
+ if (vertices instanceof Collection) {
+ this._collection = vertices;
+ } else {
+ this._collection = new Collection(vertices || []);
+ }
+ this._collection.bind(Events.Types.insert, bindVertices).bind(Events.Types.remove, unbindVertices);
+ bindVertices(this._collection);
+ }
+ },
+ mask: {
+ enumerable: true,
+ get: function() {
+ return this._mask;
+ },
+ set: function(v) {
+ this._mask = v;
+ this._flagMask = true;
+ if (_.isObject(v) && !v.clip) {
+ v.clip = true;
+ }
+ }
+ },
+ clip: {
+ enumerable: true,
+ get: function() {
+ return this._clip;
+ },
+ set: function(v) {
+ this._clip = v;
+ this._flagClip = true;
+ }
+ },
+ dashes: {
+ enumerable: true,
+ get: function() {
+ return this._dashes;
+ },
+ set: function(v) {
+ if (typeof v.offset !== "number") {
+ v.offset = this.dashes && this._dashes.offset || 0;
+ }
+ this._dashes = v;
+ }
+ }
+ };
+ function FlagVertices() {
+ this._flagVertices = true;
+ this._flagLength = true;
+ if (this.parent) {
+ this.parent._flagLength = true;
+ }
+ }
+ function BindVertices(items) {
+ let i = items.length;
+ while (i--) {
+ items[i].bind(Events.Types.change, this._renderer.flagVertices);
+ }
+ this._renderer.flagVertices();
+ }
+ function UnbindVertices(items) {
+ let i = items.length;
+ while (i--) {
+ items[i].unbind(Events.Types.change, this._renderer.flagVertices);
+ }
+ this._renderer.flagVertices();
+ }
+ function FlagFill() {
+ this._flagFill = true;
+ }
+ function FlagStroke() {
+ this._flagStroke = true;
+ }
+
+ // src/shapes/rectangle.js
+ var _Rectangle = class extends Path {
+ constructor(x, y, width, height) {
+ const points = [
+ new Anchor(),
+ new Anchor(),
+ new Anchor(),
+ new Anchor()
+ ];
+ super(points, true, false, true);
+ for (let prop in proto12) {
+ Object.defineProperty(this, prop, proto12[prop]);
+ }
+ this.width = typeof width === "number" ? width : 1;
+ this.height = typeof height === "number" ? height : 1;
+ this.origin = new Vector();
+ if (typeof x === "number") {
+ this.translation.x = x;
+ }
+ if (typeof y === "number") {
+ this.translation.y = y;
+ }
+ this._update();
+ }
+ _flagWidth = 0;
+ _flagHeight = 0;
+ _width = 0;
+ _height = 0;
+ _origin = null;
+ _update() {
+ if (this._flagVertices || this._flagWidth || this._flagHeight) {
+ const xr = this._width / 2;
+ const yr = this._height / 2;
+ if (!this._closed && this.vertices.length === 4) {
+ this.vertices.push(new Anchor());
+ }
+ this.vertices[0].set(-xr, -yr).sub(this._origin).command = Commands.move;
+ this.vertices[1].set(xr, -yr).sub(this._origin).command = Commands.line;
+ this.vertices[2].set(xr, yr).sub(this._origin).command = Commands.line;
+ this.vertices[3].set(-xr, yr).sub(this._origin).command = Commands.line;
+ if (this.vertices[4]) {
+ this.vertices[4].set(-xr, -yr).sub(this._origin).command = Commands.line;
+ }
+ }
+ super._update.call(this);
+ return this;
+ }
+ flagReset() {
+ this._flagWidth = this._flagHeight = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ clone(parent) {
+ const clone = new _Rectangle(0, 0, this.width, this.height);
+ clone.translation.copy(this.translation);
+ clone.rotation = this.rotation;
+ clone.scale = this.scale;
+ clone.skewX = this.skewX;
+ clone.skewY = this.skewY;
+ if (this.matrix.manual) {
+ clone.matrix.copy(this.matrix);
+ }
+ for (let i = 0; i < Path.Properties.length; i++) {
+ const k = Path.Properties[i];
+ clone[k] = this[k];
+ }
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone;
+ }
+ toObject() {
+ const object = super.toObject.call(this);
+ object.width = this.width;
+ object.height = this.height;
+ object.origin = this.origin.toObject();
+ return object;
+ }
+ };
+ var Rectangle = _Rectangle;
+ __publicField(Rectangle, "Properties", ["width", "height"]);
+ var proto12 = {
+ width: {
+ enumerable: true,
+ get: function() {
+ return this._width;
+ },
+ set: function(v) {
+ this._width = v;
+ this._flagWidth = true;
+ }
+ },
+ height: {
+ enumerable: true,
+ get: function() {
+ return this._height;
+ },
+ set: function(v) {
+ this._height = v;
+ this._flagHeight = true;
+ }
+ },
+ origin: {
+ enumerable: true,
+ get: function() {
+ return this._origin;
+ },
+ set: function(v) {
+ if (this._origin) {
+ this._origin.unbind(Events.Types.change, this._renderer.flagVertices);
+ }
+ this._origin = v;
+ this._origin.bind(Events.Types.change, this._renderer.flagVertices);
+ this._renderer.flagVertices();
+ }
+ }
+ };
+
+ // src/effects/sprite.js
+ var _Sprite = class extends Rectangle {
+ _flagTexture = false;
+ _flagColumns = false;
+ _flagRows = false;
+ _flagFrameRate = false;
+ _flagIndex = false;
+ _amount = 1;
+ _duration = 0;
+ _startTime = 0;
+ _playing = false;
+ _firstFrame = 0;
+ _lastFrame = 0;
+ _loop = true;
+ _texture = null;
+ _columns = 1;
+ _rows = 1;
+ _frameRate = 0;
+ _index = 0;
+ _origin = null;
+ constructor(path, ox, oy, cols, rows, frameRate) {
+ super(ox, oy, 0, 0);
+ for (let prop in proto13) {
+ Object.defineProperty(this, prop, proto13[prop]);
+ }
+ this.noStroke();
+ this.noFill();
+ if (path instanceof Texture) {
+ this.texture = path;
+ } else if (typeof path === "string") {
+ this.texture = new Texture(path);
+ }
+ this.origin = new Vector();
+ this._update();
+ if (typeof cols === "number") {
+ this.columns = cols;
+ }
+ if (typeof rows === "number") {
+ this.rows = rows;
+ }
+ if (typeof frameRate === "number") {
+ this.frameRate = frameRate;
+ }
+ this.index = 0;
+ }
+ play(firstFrame, lastFrame, onLastFrame) {
+ this._playing = true;
+ this._firstFrame = 0;
+ this._lastFrame = this.amount - 1;
+ this._startTime = _.performance.now();
+ if (typeof firstFrame === "number") {
+ this._firstFrame = firstFrame;
+ }
+ if (typeof lastFrame === "number") {
+ this._lastFrame = lastFrame;
+ }
+ if (typeof onLastFrame === "function") {
+ this._onLastFrame = onLastFrame;
+ } else {
+ delete this._onLastFrame;
+ }
+ if (this._index !== this._firstFrame) {
+ this._startTime -= 1e3 * Math.abs(this._index - this._firstFrame) / this._frameRate;
+ }
+ return this;
+ }
+ pause() {
+ this._playing = false;
+ return this;
+ }
+ stop() {
+ this._playing = false;
+ this._index = 0;
+ return this;
+ }
+ clone(parent) {
+ const clone = new _Sprite(
+ this.texture,
+ this.translation.x,
+ this.translation.y,
+ this.columns,
+ this.rows,
+ this.frameRate
+ );
+ if (this.playing) {
+ clone.play(this._firstFrame, this._lastFrame);
+ clone._loop = this._loop;
+ }
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone;
+ }
+ toObject() {
+ const object = super.toObject.call(this);
+ object.texture = this.texture.toObject();
+ object.columns = this.columns;
+ object.rows = this.rows;
+ object.frameRate = this.frameRate;
+ object.index = this.index;
+ object._firstFrame = this._firstFrame;
+ object._lastFrame = this._lastFrame;
+ object._loop = this._loop;
+ return object;
+ }
+ _update() {
+ const effect = this._texture;
+ const cols = this._columns;
+ const rows = this._rows;
+ let width, height, elapsed, amount, duration;
+ let index, iw, ih, frames;
+ if (effect) {
+ if (this._flagColumns || this._flagRows) {
+ this._amount = this._columns * this._rows;
+ }
+ if (this._flagFrameRate) {
+ this._duration = 1e3 * this._amount / this._frameRate;
+ }
+ if (this._flagTexture) {
+ this.fill = effect;
+ }
+ if (effect.loaded) {
+ iw = effect.image.width;
+ ih = effect.image.height;
+ width = iw / cols;
+ height = ih / rows;
+ amount = this._amount;
+ if (this.width !== width) {
+ this.width = width;
+ }
+ if (this.height !== height) {
+ this.height = height;
+ }
+ if (this._playing && this._frameRate > 0) {
+ if (_.isNaN(this._lastFrame)) {
+ this._lastFrame = amount - 1;
+ }
+ elapsed = _.performance.now() - this._startTime;
+ frames = this._lastFrame + 1;
+ duration = 1e3 * (frames - this._firstFrame) / this._frameRate;
+ if (this._loop) {
+ elapsed = elapsed % duration;
+ } else {
+ elapsed = Math.min(elapsed, duration);
+ }
+ index = lerp(this._firstFrame, frames, elapsed / duration);
+ index = Math.floor(index);
+ if (index !== this._index) {
+ this._index = index;
+ if (index >= this._lastFrame - 1 && this._onLastFrame) {
+ this._onLastFrame();
+ }
+ }
+ }
+ const col = this._index % cols;
+ const row = Math.floor(this._index / cols);
+ const ox = -width * col + (iw - width) / 2;
+ const oy = -height * row + (ih - height) / 2;
+ if (ox !== effect.offset.x) {
+ effect.offset.x = ox;
+ }
+ if (oy !== effect.offset.y) {
+ effect.offset.y = oy;
+ }
+ }
+ }
+ super._update.call(this);
+ return this;
+ }
+ flagReset() {
+ this._flagTexture = this._flagColumns = this._flagRows = this._flagFrameRate = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ };
+ var Sprite = _Sprite;
+ __publicField(Sprite, "Properties", [
+ "texture",
+ "columns",
+ "rows",
+ "frameRate",
+ "index"
+ ]);
+ var proto13 = {
+ texture: {
+ enumerable: true,
+ get: function() {
+ return this._texture;
+ },
+ set: function(v) {
+ this._texture = v;
+ this._flagTexture = true;
+ }
+ },
+ columns: {
+ enumerable: true,
+ get: function() {
+ return this._columns;
+ },
+ set: function(v) {
+ this._columns = v;
+ this._flagColumns = true;
+ }
+ },
+ rows: {
+ enumerable: true,
+ get: function() {
+ return this._rows;
+ },
+ set: function(v) {
+ this._rows = v;
+ this._flagRows = true;
+ }
+ },
+ frameRate: {
+ enumerable: true,
+ get: function() {
+ return this._frameRate;
+ },
+ set: function(v) {
+ this._frameRate = v;
+ this._flagFrameRate = true;
+ }
+ },
+ index: {
+ enumerable: true,
+ get: function() {
+ return this._index;
+ },
+ set: function(v) {
+ this._index = v;
+ this._flagIndex = true;
+ }
+ }
+ };
+
+ // src/shapes/circle.js
+ var cos3 = Math.cos;
+ var sin3 = Math.sin;
+ var _Circle = class extends Path {
+ _flagRadius = false;
+ _radius = 0;
+ constructor(ox, oy, r, resolution) {
+ const amount = resolution ? Math.max(resolution, 2) : 4;
+ const points = [];
+ for (let i = 0; i < amount; i++) {
+ points.push(new Anchor(0, 0, 0, 0, 0, 0));
+ }
+ super(points, true, true, true);
+ for (let prop in proto14) {
+ Object.defineProperty(this, prop, proto14[prop]);
+ }
+ if (typeof r === "number") {
+ this.radius = r;
+ }
+ this._update();
+ if (typeof ox === "number") {
+ this.translation.x = ox;
+ }
+ if (typeof oy === "number") {
+ this.translation.y = oy;
+ }
+ }
+ _update() {
+ if (this._flagVertices || this._flagRadius) {
+ let length = this.vertices.length;
+ if (!this._closed && length > 2) {
+ length -= 1;
+ }
+ const c = 4 / 3 * Math.tan(Math.PI / (length * 2));
+ const radius = this._radius;
+ const rc = radius * c;
+ for (let i = 0; i < this.vertices.length; i++) {
+ const pct = i / length;
+ const theta = pct * TWO_PI;
+ const x = radius * cos3(theta);
+ const y = radius * sin3(theta);
+ const lx = rc * cos3(theta - HALF_PI);
+ const ly = rc * sin3(theta - HALF_PI);
+ const rx = rc * cos3(theta + HALF_PI);
+ const ry = rc * sin3(theta + HALF_PI);
+ const v = this.vertices[i];
+ v.command = i === 0 ? Commands.move : Commands.curve;
+ v.set(x, y);
+ v.controls.left.set(lx, ly);
+ v.controls.right.set(rx, ry);
+ }
+ }
+ super._update.call(this);
+ return this;
+ }
+ flagReset() {
+ this._flagRadius = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ clone(parent) {
+ const clone = new _Circle(0, 0, this.radius, this.vertices.length);
+ clone.translation.copy(this.translation);
+ clone.rotation = this.rotation;
+ clone.scale = this.scale;
+ clone.skewX = this.skewX;
+ clone.skewY = this.skewY;
+ if (this.matrix.manual) {
+ clone.matrix.copy(this.matrix);
+ }
+ for (let i = 0; i < Path.Properties.length; i++) {
+ const k = Path.Properties[i];
+ clone[k] = this[k];
+ }
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone;
+ }
+ toObject() {
+ const object = super.toObject.call(this);
+ for (let i = 0; i < _Circle.Properties.length; i++) {
+ const k = _Circle.Properties[i];
+ object[k] = this[k];
+ }
+ return object;
+ }
+ };
+ var Circle = _Circle;
+ __publicField(Circle, "Properties", ["radius"]);
+ var proto14 = {
+ radius: {
+ enumerable: true,
+ get: function() {
+ return this._radius;
+ },
+ set: function(v) {
+ this._radius = v;
+ this._flagRadius = true;
+ }
+ }
+ };
+
+ // src/shapes/ellipse.js
+ var cos4 = Math.cos;
+ var sin4 = Math.sin;
+ var _Ellipse = class extends Path {
+ _flagWidth = false;
+ _flagHeight = false;
+ _width = 0;
+ _height = 0;
+ constructor(x, y, rx, ry, resolution) {
+ if (typeof ry !== "number" && typeof rx === "number") {
+ ry = rx;
+ }
+ const amount = resolution ? Math.max(resolution, 2) : 4;
+ const points = [];
+ for (let i = 0; i < amount; i++) {
+ points.push(new Anchor());
+ }
+ super(points, true, true, true);
+ for (let prop in proto15) {
+ Object.defineProperty(this, prop, proto15[prop]);
+ }
+ if (typeof rx === "number") {
+ this.width = rx * 2;
+ }
+ if (typeof ry === "number") {
+ this.height = ry * 2;
+ }
+ this._update();
+ if (typeof x === "number") {
+ this.translation.x = x;
+ }
+ if (typeof y === "number") {
+ this.translation.y = y;
+ }
+ }
+ _update() {
+ if (this._flagVertices || this._flagWidth || this._flagHeight) {
+ let length = this.vertices.length;
+ if (!this._closed && length > 2) {
+ length -= 1;
+ }
+ const c = 4 / 3 * Math.tan(Math.PI / (this.vertices.length * 2));
+ const radiusX = this._width / 2;
+ const radiusY = this._height / 2;
+ for (let i = 0; i < this.vertices.length; i++) {
+ const pct = i / length;
+ const theta = pct * TWO_PI;
+ const x = radiusX * cos4(theta);
+ const y = radiusY * sin4(theta);
+ const lx = radiusX * c * cos4(theta - HALF_PI);
+ const ly = radiusY * c * sin4(theta - HALF_PI);
+ const rx = radiusX * c * cos4(theta + HALF_PI);
+ const ry = radiusY * c * sin4(theta + HALF_PI);
+ const v = this.vertices[i];
+ v.command = i === 0 ? Commands.move : Commands.curve;
+ v.set(x, y);
+ v.controls.left.set(lx, ly);
+ v.controls.right.set(rx, ry);
+ }
+ }
+ super._update.call(this);
+ return this;
+ }
+ flagReset() {
+ this._flagWidth = this._flagHeight = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ clone(parent) {
+ const rx = this.width / 2;
+ const ry = this.height / 2;
+ const resolution = this.vertices.length;
+ const clone = new _Ellipse(0, 0, rx, ry, resolution);
+ clone.translation.copy(this.translation);
+ clone.rotation = this.rotation;
+ clone.scale = this.scale;
+ clone.skewX = this.skewX;
+ clone.skewY = this.skewY;
+ if (this.matrix.manual) {
+ clone.matrix.copy(this.matrix);
+ }
+ for (let i = 0; i < Path.Properties.length; i++) {
+ const k = Path.Properties[i];
+ clone[k] = this[k];
+ }
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone;
+ }
+ toObject() {
+ const object = super.toObject.call(this);
+ for (let i = 0; i < _Ellipse.Properties.length; i++) {
+ const k = _Ellipse.Properties[i];
+ object[k] = this[k];
+ }
+ return object;
+ }
+ };
+ var Ellipse = _Ellipse;
+ __publicField(Ellipse, "Properties", ["width", "height"]);
+ var proto15 = {
+ width: {
+ enumerable: true,
+ get: function() {
+ return this._width;
+ },
+ set: function(v) {
+ this._width = v;
+ this._flagWidth = true;
+ }
+ },
+ height: {
+ enumerable: true,
+ get: function() {
+ return this._height;
+ },
+ set: function(v) {
+ this._height = v;
+ this._flagHeight = true;
+ }
+ }
+ };
+
+ // src/shapes/line.js
+ var Line = class extends Path {
+ constructor(x1, y1, x2, y2) {
+ const points = [
+ new Anchor(x1, y1),
+ new Anchor(x2, y2)
+ ];
+ super(points);
+ for (let prop in proto16) {
+ Object.defineProperty(this, prop, proto16[prop]);
+ }
+ this.vertices[0].command = Commands.move;
+ this.vertices[1].command = Commands.line;
+ this.automatic = false;
+ }
+ };
+ var proto16 = {
+ left: {
+ enumerable: true,
+ get: function() {
+ return this.vertices[0];
+ },
+ set: function(v) {
+ if (_.isObject(v)) {
+ this.vertices.splice(0, 1, v);
+ } else {
+ const error = new TwoError("Two.Line.x argument is not an object.");
+ console.warn(error.name, error.message);
+ }
+ }
+ },
+ right: {
+ enumerable: true,
+ get: function() {
+ return this.vertices[1];
+ },
+ set: function(v) {
+ if (_.isObject(v)) {
+ this.vertices.splice(1, 1, v);
+ } else {
+ const error = new TwoError("Two.Line.y argument is not an object.");
+ console.warn(error.name, error.message);
+ }
+ }
+ }
+ };
+
+ // src/shapes/rounded-rectangle.js
+ var _RoundedRectangle = class extends Path {
+ _flagWidth = false;
+ _flagHeight = false;
+ _flagRadius = false;
+ _width = 0;
+ _height = 0;
+ _radius = 12;
+ constructor(x, y, width, height, radius) {
+ if (typeof radius === "undefined" && typeof width === "number" && typeof height === "number") {
+ radius = Math.floor(Math.min(width, height) / 12);
+ }
+ const points = [];
+ for (let i = 0; i < 10; i++) {
+ points.push(
+ new Anchor(
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ i === 0 ? Commands.move : Commands.curve
+ )
+ );
+ }
+ super(points);
+ for (let prop in proto17) {
+ Object.defineProperty(this, prop, proto17[prop]);
+ }
+ this.closed = true;
+ this.automatic = false;
+ this._renderer.flagRadius = FlagRadius.bind(this);
+ if (typeof width === "number") {
+ this.width = width;
+ }
+ if (typeof height === "number") {
+ this.height = height;
+ }
+ if (typeof radius === "number") {
+ this.radius = radius;
+ }
+ this._update();
+ if (typeof x === "number") {
+ this.translation.x = x;
+ }
+ if (typeof y === "number") {
+ this.translation.y = y;
+ }
+ }
+ _update() {
+ if (this._flagVertices || this._flagWidth || this._flagHeight || this._flagRadius) {
+ const width = this._width;
+ const height = this._height;
+ let rx, ry;
+ if (this._radius instanceof Vector) {
+ rx = this._radius.x;
+ ry = this._radius.y;
+ } else {
+ rx = this._radius;
+ ry = this._radius;
+ }
+ let v;
+ let w = width / 2;
+ let h = height / 2;
+ v = this.vertices[0];
+ v.x = -(w - rx);
+ v.y = -h;
+ v = this.vertices[1];
+ v.x = w - rx;
+ v.y = -h;
+ v.controls.left.clear();
+ v.controls.right.x = rx;
+ v.controls.right.y = 0;
+ v = this.vertices[2];
+ v.x = w;
+ v.y = -(h - ry);
+ v.controls.right.clear();
+ v.controls.left.clear();
+ v = this.vertices[3];
+ v.x = w;
+ v.y = h - ry;
+ v.controls.left.clear();
+ v.controls.right.x = 0;
+ v.controls.right.y = ry;
+ v = this.vertices[4];
+ v.x = w - rx;
+ v.y = h;
+ v.controls.right.clear();
+ v.controls.left.clear();
+ v = this.vertices[5];
+ v.x = -(w - rx);
+ v.y = h;
+ v.controls.left.clear();
+ v.controls.right.x = -rx;
+ v.controls.right.y = 0;
+ v = this.vertices[6];
+ v.x = -w;
+ v.y = h - ry;
+ v.controls.left.clear();
+ v.controls.right.clear();
+ v = this.vertices[7];
+ v.x = -w;
+ v.y = -(h - ry);
+ v.controls.left.clear();
+ v.controls.right.x = 0;
+ v.controls.right.y = -ry;
+ v = this.vertices[8];
+ v.x = -(w - rx);
+ v.y = -h;
+ v.controls.left.clear();
+ v.controls.right.clear();
+ v = this.vertices[9];
+ v.copy(this.vertices[8]);
+ }
+ super._update.call(this);
+ return this;
+ }
+ flagReset() {
+ this._flagWidth = this._flagHeight = this._flagRadius = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ clone(parent) {
+ const width = this.width;
+ const height = this.height;
+ const radius = this.radius;
+ const clone = new _RoundedRectangle(0, 0, width, height, radius);
+ clone.translation.copy(this.translation);
+ clone.rotation = this.rotation;
+ clone.scale = this.scale;
+ clone.skewX = this.skewX;
+ clone.skewY = this.skewY;
+ if (this.matrix.manual) {
+ clone.matrix.copy(this.matrix);
+ }
+ for (let i = 0; i < Path.Properties.length; i++) {
+ const k = Path.Properties[i];
+ clone[k] = this[k];
+ }
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone;
+ }
+ toObject() {
+ const object = super.toObject.call(this);
+ for (let i = 0; i < _RoundedRectangle.Properties.length; i++) {
+ const k = _RoundedRectangle.Properties[i];
+ object[k] = this[k];
+ }
+ object.radius = typeof this.radius === "number" ? this.radius : this.radius.toObject();
+ return object;
+ }
+ };
+ var RoundedRectangle = _RoundedRectangle;
+ __publicField(RoundedRectangle, "Properties", ["width", "height", "radius"]);
+ var proto17 = {
+ width: {
+ enumerable: true,
+ get: function() {
+ return this._width;
+ },
+ set: function(v) {
+ this._width = v;
+ this._flagWidth = true;
+ }
+ },
+ height: {
+ enumerable: true,
+ get: function() {
+ return this._height;
+ },
+ set: function(v) {
+ this._height = v;
+ this._flagHeight = true;
+ }
+ },
+ radius: {
+ enumerable: true,
+ get: function() {
+ return this._radius;
+ },
+ set: function(v) {
+ if (this._radius instanceof Vector) {
+ this._radius.unbind(Events.Types.change, this._renderer.flagRadius);
+ }
+ this._radius = v;
+ if (this._radius instanceof Vector) {
+ this._radius.bind(Events.Types.change, this._renderer.flagRadius);
+ }
+ this._flagRadius = true;
+ }
+ }
+ };
+ function FlagRadius() {
+ this._flagRadius = true;
+ }
+
+ // src/text.js
+ var canvas2;
+ var min4 = Math.min;
+ var max4 = Math.max;
+ if (root.document) {
+ canvas2 = document.createElement("canvas");
+ }
+ var _Text = class extends Shape {
+ _flagValue = true;
+ _flagFamily = true;
+ _flagSize = true;
+ _flagLeading = true;
+ _flagAlignment = true;
+ _flagBaseline = true;
+ _flagStyle = true;
+ _flagWeight = true;
+ _flagDecoration = true;
+ _flagFill = true;
+ _flagStroke = true;
+ _flagLinewidth = true;
+ _flagOpacity = true;
+ _flagVisible = true;
+ _flagMask = false;
+ _flagClip = false;
+ _value = "";
+ _family = "sans-serif";
+ _size = 13;
+ _leading = 17;
+ _alignment = "center";
+ _baseline = "middle";
+ _style = "normal";
+ _weight = 500;
+ _decoration = "none";
+ _fill = "#000";
+ _stroke = "none";
+ _linewidth = 1;
+ _opacity = 1;
+ _visible = true;
+ _mask = null;
+ _clip = false;
+ _dashes = null;
+ constructor(message, x, y, styles) {
+ super();
+ for (let prop in proto18) {
+ Object.defineProperty(this, prop, proto18[prop]);
+ }
+ this._renderer.type = "text";
+ this._renderer.flagFill = FlagFill2.bind(this);
+ this._renderer.flagStroke = FlagStroke2.bind(this);
+ this.value = message;
+ if (typeof x === "number") {
+ this.translation.x = x;
+ }
+ if (typeof y === "number") {
+ this.translation.y = y;
+ }
+ this.dashes = [];
+ this.dashes.offset = 0;
+ if (!_.isObject(styles)) {
+ return this;
+ }
+ for (let i = 0; i < _Text.Properties.length; i++) {
+ const property = _Text.Properties[i];
+ if (property in styles) {
+ this[property] = styles[property];
+ }
+ }
+ }
+ static Measure(text) {
+ if (canvas2) {
+ const ctx = canvas2.getContext("2d");
+ ctx.font = [
+ text._style,
+ text._weight,
+ `${text._size}px/${text._leading}px`,
+ text._family
+ ].join(" ");
+ const metrics = ctx.measureText(text.value, 0, 0);
+ const height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;
+ return {
+ width: metrics.width,
+ height
+ };
+ } else {
+ const width = this.value.length * this.size * _Text.Ratio;
+ const height = this.leading;
+ console.warn("Two.Text: unable to accurately measure text, so using an approximation.");
+ return {
+ width,
+ height
+ };
+ }
+ }
+ clone(parent) {
+ const clone = new _Text(this.value);
+ clone.translation.copy(this.translation);
+ clone.rotation = this.rotation;
+ clone.scale = this.scale;
+ for (let i = 0; i < _Text.Properties.length; i++) {
+ const prop = _Text.Properties[i];
+ clone[prop] = this[prop];
+ }
+ if (this.matrix.manual) {
+ clone.matrix.copy(this.matrix);
+ }
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone._update();
+ }
+ toObject() {
+ const result = {
+ translation: this.translation.toObject(),
+ rotation: this.rotation,
+ scale: this.scale
+ };
+ if (this.matrix.manual) {
+ result.matrix = this.matrix.toObject();
+ }
+ for (let i = 0; i < _Text.Properties.length; i++) {
+ const prop = _Text.Properties[i];
+ result[prop] = this[prop];
+ }
+ return result;
+ }
+ noFill() {
+ this.fill = "none";
+ return this;
+ }
+ noStroke() {
+ this.stroke = "none";
+ this.linewidth = 0;
+ return this;
+ }
+ getBoundingClientRect(shallow) {
+ let matrix;
+ let left, right, top, bottom;
+ this._update(true);
+ matrix = shallow ? this.matrix : this.worldMatrix;
+ const { width, height } = _Text.Measure(this);
+ const border = (this._linewidth || 0) / 2;
+ switch (this.alignment) {
+ case "left":
+ left = -border;
+ right = width + border;
+ break;
+ case "right":
+ left = -(width + border);
+ right = border;
+ break;
+ default:
+ left = -(width / 2 + border);
+ right = width / 2 + border;
+ }
+ switch (this.baseline) {
+ case "middle":
+ top = -(height / 2 + border);
+ bottom = height / 2 + border;
+ break;
+ default:
+ top = -(height + border);
+ bottom = border;
+ }
+ const [ax, ay] = matrix.multiply(left, top);
+ const [bx, by] = matrix.multiply(left, bottom);
+ const [cx, cy] = matrix.multiply(right, top);
+ const [dx, dy] = matrix.multiply(right, bottom);
+ top = min4(ay, by, cy, dy);
+ left = min4(ax, bx, cx, dx);
+ right = max4(ax, bx, cx, dx);
+ bottom = max4(ay, by, cy, dy);
+ return {
+ top,
+ left,
+ right,
+ bottom,
+ width: right - left,
+ height: bottom - top
+ };
+ }
+ flagReset() {
+ super.flagReset.call(this);
+ this._flagValue = this._flagFamily = this._flagSize = this._flagLeading = this._flagAlignment = this._flagFill = this._flagStroke = this._flagLinewidth = this._flagOpacity = this._flagVisible = this._flagClip = this._flagDecoration = this._flagClassName = this._flagBaseline = this._flagWeight = this._flagStyle = false;
+ return this;
+ }
+ };
+ var Text = _Text;
+ __publicField(Text, "Ratio", 0.6);
+ __publicField(Text, "Properties", [
+ "value",
+ "family",
+ "size",
+ "leading",
+ "alignment",
+ "linewidth",
+ "style",
+ "weight",
+ "decoration",
+ "baseline",
+ "opacity",
+ "visible",
+ "fill",
+ "stroke"
+ ]);
+ var proto18 = {
+ value: {
+ enumerable: true,
+ get: function() {
+ return this._value;
+ },
+ set: function(v) {
+ this._value = v;
+ this._flagValue = true;
+ }
+ },
+ family: {
+ enumerable: true,
+ get: function() {
+ return this._family;
+ },
+ set: function(v) {
+ this._family = v;
+ this._flagFamily = true;
+ }
+ },
+ size: {
+ enumerable: true,
+ get: function() {
+ return this._size;
+ },
+ set: function(v) {
+ this._size = v;
+ this._flagSize = true;
+ }
+ },
+ leading: {
+ enumerable: true,
+ get: function() {
+ return this._leading;
+ },
+ set: function(v) {
+ this._leading = v;
+ this._flagLeading = true;
+ }
+ },
+ alignment: {
+ enumerable: true,
+ get: function() {
+ return this._alignment;
+ },
+ set: function(v) {
+ this._alignment = v;
+ this._flagAlignment = true;
+ }
+ },
+ linewidth: {
+ enumerable: true,
+ get: function() {
+ return this._linewidth;
+ },
+ set: function(v) {
+ this._linewidth = v;
+ this._flagLinewidth = true;
+ }
+ },
+ style: {
+ enumerable: true,
+ get: function() {
+ return this._style;
+ },
+ set: function(v) {
+ this._style = v;
+ this._flagStyle = true;
+ }
+ },
+ weight: {
+ enumerable: true,
+ get: function() {
+ return this._weight;
+ },
+ set: function(v) {
+ this._weight = v;
+ this._flagWeight = true;
+ }
+ },
+ decoration: {
+ enumerable: true,
+ get: function() {
+ return this._decoration;
+ },
+ set: function(v) {
+ this._decoration = v;
+ this._flagDecoration = true;
+ }
+ },
+ baseline: {
+ enumerable: true,
+ get: function() {
+ return this._baseline;
+ },
+ set: function(v) {
+ this._baseline = v;
+ this._flagBaseline = true;
+ }
+ },
+ opacity: {
+ enumerable: true,
+ get: function() {
+ return this._opacity;
+ },
+ set: function(v) {
+ this._opacity = v;
+ this._flagOpacity = true;
+ }
+ },
+ visible: {
+ enumerable: true,
+ get: function() {
+ return this._visible;
+ },
+ set: function(v) {
+ this._visible = v;
+ this._flagVisible = true;
+ }
+ },
+ fill: {
+ enumerable: true,
+ get: function() {
+ return this._fill;
+ },
+ set: function(f) {
+ if (this._fill instanceof Gradient || this._fill instanceof LinearGradient || this._fill instanceof RadialGradient || this._fill instanceof Texture) {
+ this._fill.unbind(Events.Types.change, this._renderer.flagFill);
+ }
+ this._fill = f;
+ this._flagFill = true;
+ if (this._fill instanceof Gradient || this._fill instanceof LinearGradient || this._fill instanceof RadialGradient || this._fill instanceof Texture) {
+ this._fill.bind(Events.Types.change, this._renderer.flagFill);
+ }
+ }
+ },
+ stroke: {
+ enumerable: true,
+ get: function() {
+ return this._stroke;
+ },
+ set: function(f) {
+ if (this._stroke instanceof Gradient || this._stroke instanceof LinearGradient || this._stroke instanceof RadialGradient || this._stroke instanceof Texture) {
+ this._stroke.unbind(Events.Types.change, this._renderer.flagStroke);
+ }
+ this._stroke = f;
+ this._flagStroke = true;
+ if (this._stroke instanceof Gradient || this._stroke instanceof LinearGradient || this._stroke instanceof RadialGradient || this._stroke instanceof Texture) {
+ this._stroke.bind(Events.Types.change, this._renderer.flagStroke);
+ }
+ }
+ },
+ mask: {
+ enumerable: true,
+ get: function() {
+ return this._mask;
+ },
+ set: function(v) {
+ this._mask = v;
+ this._flagMask = true;
+ if (_.isObject(v) && !v.clip) {
+ v.clip = true;
+ }
+ }
+ },
+ clip: {
+ enumerable: true,
+ get: function() {
+ return this._clip;
+ },
+ set: function(v) {
+ this._clip = v;
+ this._flagClip = true;
+ }
+ },
+ dashes: {
+ enumerable: true,
+ get: function() {
+ return this._dashes;
+ },
+ set: function(v) {
+ if (typeof v.offset !== "number") {
+ v.offset = this.dashes && this._dashes.offset || 0;
+ }
+ this._dashes = v;
+ }
+ }
+ };
+ function FlagFill2() {
+ this._flagFill = true;
+ }
+ function FlagStroke2() {
+ this._flagStroke = true;
+ }
+
+ // src/utils/interpret-svg.js
+ var regex2 = {
+ path: /[+-]?(?:\d*\.\d+|\d+)(?:[eE][+-]\d+)?/g,
+ cssBackgroundImage: /url\(['"]?#([\w\d-_]*)['"]?\)/i,
+ unitSuffix: /[a-zA-Z%]*/i
+ };
+ var alignments = {
+ start: "left",
+ middle: "center",
+ end: "right"
+ };
+ var reservedAttributesToRemove = ["id", "class", "transform", "xmlns", "viewBox"];
+ var overwriteAttrs = ["x", "y", "width", "height", "href", "xlink:href"];
+ function getAlignment(anchor2) {
+ return alignments[anchor2];
+ }
+ function getBaseline(node) {
+ const a = node.getAttribute("dominant-baseline");
+ const b = node.getAttribute("alignment-baseline");
+ return a || b;
+ }
+ function getTagName(tag) {
+ return tag.replace(/svg:/ig, "").toLowerCase();
+ }
+ function applyTransformsToVector(transforms, vector2) {
+ vector2.x += transforms.translateX;
+ vector2.y += transforms.translateY;
+ vector2.x *= transforms.scaleX;
+ vector2.y *= transforms.scaleY;
+ if (transforms.rotation !== 0) {
+ const l = vector2.length();
+ vector2.x = l * Math.cos(transforms.rotation);
+ vector2.y = l * Math.sin(transforms.rotation);
+ }
+ }
+ function extractCSSText(text, styles) {
+ if (!styles) {
+ styles = {};
+ }
+ const commands = text.split(";");
+ for (let i = 0; i < commands.length; i++) {
+ const command = commands[i].split(":");
+ const name = command[0];
+ const value = command[1];
+ if (typeof name === "undefined" || typeof value === "undefined") {
+ continue;
+ }
+ styles[name] = value.replace(/\s/, "");
+ }
+ return styles;
+ }
+ function getSvgStyles(node) {
+ const styles = {};
+ const attributes = getSvgAttributes(node);
+ const length = Math.max(attributes.length, node.style.length);
+ for (let i = 0; i < length; i++) {
+ const command = node.style[i];
+ const attribute = attributes[i];
+ if (command) {
+ styles[command] = node.style[command];
+ }
+ if (attribute) {
+ styles[attribute] = node.getAttribute(attribute);
+ }
+ }
+ return styles;
+ }
+ function getSvgAttributes(node) {
+ const attributes = node.getAttributeNames();
+ for (let i = 0; i < reservedAttributesToRemove.length; i++) {
+ const keyword = reservedAttributesToRemove[i];
+ const index = Array.prototype.indexOf.call(attributes, keyword);
+ if (index >= 0) {
+ attributes.splice(index, 1);
+ }
+ }
+ return attributes;
+ }
+ function applySvgViewBox(node, value) {
+ const elements = value.split(/[\s,]/);
+ const x = -parseFloat(elements[0]);
+ const y = -parseFloat(elements[1]);
+ const width = parseFloat(elements[2]);
+ const height = parseFloat(elements[3]);
+ if (x && y) {
+ for (let i = 0; i < node.children.length; i++) {
+ const child = node.children[i];
+ if ("translation" in child) {
+ child.translation.add(x, y);
+ } else if ("x" in child) {
+ child.x = x;
+ } else if ("y" in child) {
+ child.y = y;
+ }
+ }
+ }
+ const xExists = typeof node.x === "number";
+ const yExists = typeof node.y === "number";
+ const widthExists = typeof node.width === "number";
+ const heightExists = typeof node.height === "number";
+ if (xExists) {
+ node.translation.x += node.x;
+ }
+ if (yExists) {
+ node.translation.y += node.y;
+ }
+ if (widthExists || heightExists) {
+ node.scale = new Vector(1, 1);
+ }
+ if (widthExists) {
+ node.scale.x = node.width / width;
+ }
+ if (heightExists) {
+ node.scale.y = node.height / height;
+ }
+ node.mask = new Rectangle(0, 0, width, height);
+ node.mask.origin.set(-width / 2, -height / 2);
+ return node;
+ }
+ function applySvgAttributes(node, elem, parentStyles) {
+ const styles = {}, attributes = {}, extracted = {};
+ let i, m, key, value, prop, attr;
+ let transforms, x, y;
+ let id, scene, ref, tagName;
+ let ca, cb, cc, error;
+ if (node === null) {
+ return styles;
+ }
+ if (root.getComputedStyle) {
+ const computedStyles = root.getComputedStyle(node);
+ i = computedStyles.length;
+ while (i--) {
+ key = computedStyles[i];
+ value = computedStyles[key];
+ if (typeof value !== "undefined") {
+ styles[key] = value;
+ }
+ }
+ }
+ for (i = 0; i < node.attributes.length; i++) {
+ attr = node.attributes[i];
+ if (/style/i.test(attr.nodeName)) {
+ extractCSSText(attr.value, extracted);
+ } else {
+ attributes[attr.nodeName] = attr.value;
+ }
+ }
+ if (typeof styles.opacity !== "undefined") {
+ styles["stroke-opacity"] = styles.opacity;
+ styles["fill-opacity"] = styles.opacity;
+ delete styles.opacity;
+ }
+ if (parentStyles) {
+ _.defaults(styles, parentStyles);
+ }
+ _.extend(styles, extracted, attributes);
+ styles.visible = !(typeof styles.display === "undefined" && /none/i.test(styles.display)) || typeof styles.visibility === "undefined" && /hidden/i.test(styles.visibility);
+ for (key in styles) {
+ value = styles[key];
+ switch (key) {
+ case "gradientTransform":
+ if (/none/i.test(value))
+ break;
+ m = node.gradientTransform && node.gradientTransform.baseVal && node.gradientTransform.baseVal.length > 0 ? node.gradientTransform.baseVal[0].matrix : node.getCTM ? node.getCTM() : null;
+ if (m === null)
+ break;
+ transforms = decomposeMatrix(m);
+ switch (elem._renderer.type) {
+ case "linear-gradient":
+ applyTransformsToVector(transforms, elem.left);
+ applyTransformsToVector(transforms, elem.right);
+ break;
+ case "radial-gradient":
+ elem.center.x += transforms.translateX;
+ elem.center.y += transforms.translateY;
+ elem.focal.x += transforms.translateX;
+ elem.focal.y += transforms.translateY;
+ elem.radius *= Math.max(transforms.scaleX, transforms.scaleY);
+ break;
+ }
+ break;
+ case "transform":
+ if (/none/i.test(value))
+ break;
+ m = node.transform && node.transform.baseVal && node.transform.baseVal.length > 0 ? node.transform.baseVal[0].matrix : node.getCTM ? node.getCTM() : null;
+ if (m === null)
+ break;
+ if (Constants.AutoCalculateImportedMatrices) {
+ transforms = decomposeMatrix(m);
+ elem.translation.set(transforms.translateX, transforms.translateY);
+ elem.rotation = Math.PI * (transforms.rotation / 180);
+ elem.scale = new Vector(transforms.scaleX, transforms.scaleY);
+ x = parseFloat((styles.x + "").replace("px"));
+ y = parseFloat((styles.y + "").replace("px"));
+ if (x) {
+ elem.translation.x = x;
+ }
+ if (y) {
+ elem.translation.y = y;
+ }
+ } else {
+ m = node.getCTM();
+ elem._matrix.manual = true;
+ elem._matrix.set(m.a, m.b, m.c, m.d, m.e, m.f);
+ }
+ break;
+ case "visible":
+ if (elem instanceof Group) {
+ elem._visible = value;
+ break;
+ }
+ elem.visible = value;
+ break;
+ case "stroke-linecap":
+ if (elem instanceof Group) {
+ elem._cap = value;
+ break;
+ }
+ elem.cap = value;
+ break;
+ case "stroke-linejoin":
+ if (elem instanceof Group) {
+ elem._join = value;
+ break;
+ }
+ elem.join = value;
+ break;
+ case "stroke-miterlimit":
+ if (elem instanceof Group) {
+ elem._miter = value;
+ break;
+ }
+ elem.miter = value;
+ break;
+ case "stroke-width":
+ if (elem instanceof Group) {
+ elem._linewidth = parseFloat(value);
+ break;
+ }
+ elem.linewidth = parseFloat(value);
+ break;
+ case "opacity":
+ case "stroke-opacity":
+ case "fill-opacity":
+ if (elem instanceof Group) {
+ elem._opacity = parseFloat(value);
+ break;
+ }
+ elem.opacity = parseFloat(value);
+ break;
+ case "clip-path":
+ if (regex2.cssBackgroundImage.test(value)) {
+ id = value.replace(regex2.cssBackgroundImage, "$1");
+ if (read.defs.current && read.defs.current.contains(id)) {
+ ref = read.defs.current.get(id);
+ if (ref && ref.childNodes.length > 0) {
+ ref = ref.childNodes[0];
+ tagName = getTagName(ref.nodeName);
+ elem.mask = read[tagName].call(this, ref, {});
+ switch (elem._renderer.type) {
+ case "text":
+ case "path":
+ elem.position.add(elem.mask.position);
+ elem.mask.position.clear();
+ break;
+ }
+ }
+ }
+ }
+ break;
+ case "fill":
+ case "stroke":
+ prop = (elem instanceof Group ? "_" : "") + key;
+ if (regex2.cssBackgroundImage.test(value)) {
+ id = value.replace(regex2.cssBackgroundImage, "$1");
+ if (read.defs.current && read.defs.current.contains(id)) {
+ ref = read.defs.current.get(id);
+ if (!ref.object) {
+ tagName = getTagName(ref.nodeName);
+ ref.object = read[tagName].call(this, ref, {});
+ }
+ ref = ref.object;
+ } else {
+ scene = getScene(this);
+ ref = scene.getById(id);
+ }
+ elem[prop] = ref;
+ } else {
+ elem[prop] = value;
+ }
+ break;
+ case "id":
+ elem.id = value;
+ break;
+ case "class":
+ case "className":
+ elem.classList = value.split(" ");
+ elem._flagClassName = true;
+ break;
+ case "x":
+ case "y":
+ ca = elem instanceof Gradient;
+ cb = elem instanceof LinearGradient;
+ cc = elem instanceof RadialGradient;
+ if (ca || cb || cc) {
+ break;
+ }
+ if (value.match("[a-z%]$") && !value.endsWith("px")) {
+ error = new TwoError(
+ "only pixel values are supported with the " + key + " attribute."
+ );
+ console.warn(error.name, error.message);
+ }
+ elem.translation[key] = parseFloat(value);
+ break;
+ case "font-family":
+ if (elem instanceof Text) {
+ elem.family = value;
+ }
+ break;
+ case "font-size":
+ if (elem instanceof Text) {
+ elem.size = value;
+ }
+ break;
+ case "font-weight":
+ if (elem instanceof Text) {
+ elem.weight = value;
+ }
+ break;
+ case "font-style":
+ if (elem instanceof Text) {
+ elem.style = value;
+ }
+ break;
+ case "text-decoration":
+ if (elem instanceof Text) {
+ elem.decoration = value;
+ }
+ break;
+ case "line-height":
+ if (elem instanceof Text) {
+ elem.leading = value;
+ }
+ break;
+ }
+ }
+ if (Object.keys(node.dataset).length)
+ elem.dataset = node.dataset;
+ return styles;
+ }
+ function updateDefsCache(node, defsCache) {
+ for (let i = 0, l = node.childNodes.length; i < l; i++) {
+ const n = node.childNodes[i];
+ if (!n.id)
+ continue;
+ const tagName = getTagName(node.nodeName);
+ if (tagName === "#text")
+ continue;
+ defsCache.add(n.id, n);
+ }
+ }
+ function getScene(node) {
+ while (node.parent) {
+ node = node.parent;
+ }
+ return node.scene;
+ }
+ var read = {
+ svg: function(node) {
+ const defs = read.defs.current = new Registry();
+ const elements = node.getElementsByTagName("defs");
+ for (let i = 0; i < elements.length; i++) {
+ updateDefsCache(elements[i], defs);
+ }
+ const svg2 = read.g.call(this, node);
+ const viewBox = node.getAttribute("viewBox");
+ const x = node.getAttribute("x");
+ const y = node.getAttribute("y");
+ const width = node.getAttribute("width");
+ const height = node.getAttribute("height");
+ svg2.defs = defs;
+ const viewBoxExists = viewBox !== null;
+ const xExists = x !== null;
+ const yExists = y !== null;
+ const widthExists = width !== null;
+ const heightExists = height !== null;
+ if (xExists) {
+ svg2.x = parseFloat(x.replace(regex2.unitSuffix, ""));
+ }
+ if (yExists) {
+ svg2.y = parseFloat(y.replace(regex2.unitSuffix, ""));
+ }
+ if (widthExists) {
+ svg2.width = parseFloat(width.replace(regex2.unitSuffix, ""));
+ }
+ if (heightExists) {
+ svg2.height = parseFloat(height.replace(regex2.unitSuffix, ""));
+ }
+ if (viewBoxExists) {
+ applySvgViewBox(svg2, viewBox);
+ }
+ delete read.defs.current;
+ return svg2;
+ },
+ defs: function(node) {
+ return null;
+ },
+ use: function(node, styles) {
+ let error;
+ const href = node.getAttribute("href") || node.getAttribute("xlink:href");
+ if (!href) {
+ error = new TwoError("encountered
with no href.");
+ console.warn(error.name, error.message);
+ return null;
+ }
+ const id = href.slice(1);
+ if (!read.defs.current.contains(id)) {
+ error = new TwoError(
+ "unable to find element for reference " + href + "."
+ );
+ console.warn(error.name, error.message);
+ return null;
+ }
+ const template = read.defs.current.get(id);
+ const fullNode = template.cloneNode(true);
+ for (let i = 0; i < node.attributes.length; i++) {
+ const attr = node.attributes[i];
+ const ca = overwriteAttrs.includes(attr.nodeName);
+ const cb = !fullNode.hasAttribute(attr.nodeName);
+ if (ca || cb) {
+ fullNode.setAttribute(attr.nodeName, attr.value);
+ }
+ }
+ const tagName = getTagName(fullNode.nodeName);
+ return read[tagName].call(this, fullNode, styles);
+ },
+ g: function(node, parentStyles) {
+ const group = new Group();
+ applySvgAttributes.call(this, node, group, parentStyles);
+ this.add(group);
+ const styles = getSvgStyles.call(this, node);
+ for (let i = 0, l = node.childNodes.length; i < l; i++) {
+ const n = node.childNodes[i];
+ const tag = n.nodeName;
+ if (!tag)
+ return;
+ const tagName = getTagName(tag);
+ if (tagName in read) {
+ const o = read[tagName].call(group, n, styles);
+ if (!!o && !o.parent) {
+ group.add(o);
+ }
+ }
+ }
+ return group;
+ },
+ polygon: function(node, parentStyles) {
+ let points;
+ if (typeof node === "string") {
+ points = node;
+ } else {
+ points = node.getAttribute("points");
+ }
+ const verts = [];
+ points.replace(/(-?[\d.eE-]+)[,|\s](-?[\d.eE-]+)/g, function(match, p1, p2) {
+ verts.push(new Anchor(parseFloat(p1), parseFloat(p2)));
+ });
+ const poly = new Path(verts, true).noStroke();
+ poly.fill = "black";
+ applySvgAttributes.call(this, node, poly, parentStyles);
+ return poly;
+ },
+ polyline: function(node, parentStyles) {
+ const poly = read.polygon.call(this, node, parentStyles);
+ poly.closed = false;
+ return poly;
+ },
+ path: function(node, parentStyles) {
+ let path;
+ if (typeof node === "string") {
+ path = node;
+ node = null;
+ } else {
+ path = node.getAttribute("d");
+ }
+ let points = [];
+ let closed2 = false, relative = false;
+ if (path) {
+ let coord = new Anchor();
+ let control, coords;
+ let commands = path.match(/[a-df-z][^a-df-z]*/ig);
+ const last = commands.length - 1;
+ _.each(commands.slice(0), function(command, i) {
+ const items = command.slice(1).trim().match(regex2.path);
+ const type = command[0];
+ const lower = type.toLowerCase();
+ let bin, j, l, ct, times;
+ const result = [];
+ if (i === 0) {
+ commands = [];
+ }
+ switch (lower) {
+ case "h":
+ case "v":
+ if (items.length > 1) {
+ bin = 1;
+ }
+ break;
+ case "m":
+ case "l":
+ case "t":
+ if (items.length > 2) {
+ bin = 2;
+ }
+ break;
+ case "s":
+ case "q":
+ if (items.length > 4) {
+ bin = 4;
+ }
+ break;
+ case "c":
+ if (items.length > 6) {
+ bin = 6;
+ }
+ break;
+ case "a":
+ if (items.length > 7) {
+ bin = 7;
+ }
+ break;
+ }
+ if (bin) {
+ for (j = 0, l = items.length, times = 0; j < l; j += bin) {
+ ct = type;
+ if (times > 0) {
+ switch (type) {
+ case "m":
+ ct = "l";
+ break;
+ case "M":
+ ct = "L";
+ break;
+ }
+ }
+ result.push(ct + items.slice(j, j + bin).join(" "));
+ times++;
+ }
+ commands = Array.prototype.concat.apply(commands, result);
+ } else {
+ commands.push(command);
+ }
+ });
+ _.each(commands, function(command, i) {
+ let result, x, y;
+ const type = command[0];
+ const lower = type.toLowerCase();
+ coords = command.slice(1).trim().match(regex2.path);
+ relative = type === lower;
+ let x1, y1, x2, y2, x3, y3, x4, y4, reflection;
+ let a, b;
+ let anchor2, rx, ry, xAxisRotation, largeArcFlag, sweepFlag;
+ switch (lower) {
+ case "z":
+ if (i >= last) {
+ closed2 = true;
+ } else {
+ x = coord.x;
+ y = coord.y;
+ result = new Anchor(
+ x,
+ y,
+ void 0,
+ void 0,
+ void 0,
+ void 0,
+ Commands.close
+ );
+ for (let j = points.length - 1; j >= 0; j--) {
+ const point = points[j];
+ if (/m/i.test(point.command)) {
+ coord = point;
+ break;
+ }
+ }
+ }
+ break;
+ case "m":
+ case "l":
+ control = void 0;
+ x = parseFloat(coords[0]);
+ y = parseFloat(coords[1]);
+ result = new Anchor(
+ x,
+ y,
+ void 0,
+ void 0,
+ void 0,
+ void 0,
+ /m/i.test(lower) ? Commands.move : Commands.line
+ );
+ if (relative) {
+ result.addSelf(coord);
+ }
+ coord = result;
+ break;
+ case "h":
+ case "v":
+ a = /h/i.test(lower) ? "x" : "y";
+ b = /x/i.test(a) ? "y" : "x";
+ result = new Anchor(
+ void 0,
+ void 0,
+ void 0,
+ void 0,
+ void 0,
+ void 0,
+ Commands.line
+ );
+ result[a] = parseFloat(coords[0]);
+ result[b] = coord[b];
+ if (relative) {
+ result[a] += coord[a];
+ }
+ coord = result;
+ break;
+ case "c":
+ case "s":
+ x1 = coord.x;
+ y1 = coord.y;
+ if (!control) {
+ control = new Vector();
+ }
+ if (/c/i.test(lower)) {
+ x2 = parseFloat(coords[0]);
+ y2 = parseFloat(coords[1]);
+ x3 = parseFloat(coords[2]);
+ y3 = parseFloat(coords[3]);
+ x4 = parseFloat(coords[4]);
+ y4 = parseFloat(coords[5]);
+ } else {
+ reflection = getReflection(coord, control, relative);
+ x2 = reflection.x;
+ y2 = reflection.y;
+ x3 = parseFloat(coords[0]);
+ y3 = parseFloat(coords[1]);
+ x4 = parseFloat(coords[2]);
+ y4 = parseFloat(coords[3]);
+ }
+ if (relative) {
+ x2 += x1;
+ y2 += y1;
+ x3 += x1;
+ y3 += y1;
+ x4 += x1;
+ y4 += y1;
+ }
+ coord.controls.right.set(x2 - coord.x, y2 - coord.y);
+ result = new Anchor(
+ x4,
+ y4,
+ x3 - x4,
+ y3 - y4,
+ void 0,
+ void 0,
+ Commands.curve
+ );
+ coord = result;
+ control = result.controls.left;
+ break;
+ case "t":
+ case "q":
+ x1 = coord.x;
+ y1 = coord.y;
+ if (!control) {
+ control = new Vector();
+ }
+ if (/q/i.test(lower)) {
+ x2 = parseFloat(coords[0]);
+ y2 = parseFloat(coords[1]);
+ x3 = parseFloat(coords[0]);
+ y3 = parseFloat(coords[1]);
+ x4 = parseFloat(coords[2]);
+ y4 = parseFloat(coords[3]);
+ } else {
+ reflection = getReflection(coord, control, relative);
+ x2 = reflection.x;
+ y2 = reflection.y;
+ x3 = reflection.x;
+ y3 = reflection.y;
+ x4 = parseFloat(coords[0]);
+ y4 = parseFloat(coords[1]);
+ }
+ if (relative) {
+ x2 += x1;
+ y2 += y1;
+ x3 += x1;
+ y3 += y1;
+ x4 += x1;
+ y4 += y1;
+ }
+ coord.controls.right.set(
+ (x2 - coord.x) * 0.33,
+ (y2 - coord.y) * 0.33
+ );
+ result = new Anchor(
+ x4,
+ y4,
+ x3 - x4,
+ y3 - y4,
+ void 0,
+ void 0,
+ Commands.curve
+ );
+ coord = result;
+ control = result.controls.left;
+ break;
+ case "a":
+ x1 = coord.x;
+ y1 = coord.y;
+ rx = parseFloat(coords[0]);
+ ry = parseFloat(coords[1]);
+ xAxisRotation = parseFloat(coords[2]);
+ largeArcFlag = parseFloat(coords[3]);
+ sweepFlag = parseFloat(coords[4]);
+ x4 = parseFloat(coords[5]);
+ y4 = parseFloat(coords[6]);
+ if (relative) {
+ x4 += x1;
+ y4 += y1;
+ }
+ anchor2 = new Anchor(x4, y4);
+ anchor2.command = Commands.arc;
+ anchor2.rx = rx;
+ anchor2.ry = ry;
+ anchor2.xAxisRotation = xAxisRotation;
+ anchor2.largeArcFlag = largeArcFlag;
+ anchor2.sweepFlag = sweepFlag;
+ result = anchor2;
+ coord = anchor2;
+ control = void 0;
+ break;
+ }
+ if (result) {
+ if (Array.isArray(result)) {
+ points = points.concat(result);
+ } else {
+ points.push(result);
+ }
+ }
+ });
+ }
+ path = new Path(points, closed2, void 0, true).noStroke();
+ path.fill = "black";
+ const rect = path.getBoundingClientRect(true);
+ rect.centroid = {
+ x: rect.left + rect.width / 2,
+ y: rect.top + rect.height / 2
+ };
+ _.each(path.vertices, function(v) {
+ v.subSelf(rect.centroid);
+ });
+ applySvgAttributes.call(this, node, path, parentStyles);
+ path.translation.addSelf(rect.centroid);
+ return path;
+ },
+ circle: function(node, parentStyles) {
+ const x = parseFloat(node.getAttribute("cx"));
+ const y = parseFloat(node.getAttribute("cy"));
+ const r = parseFloat(node.getAttribute("r"));
+ const circle = new Circle(0, 0, r).noStroke();
+ circle.fill = "black";
+ applySvgAttributes.call(this, node, circle, parentStyles);
+ circle.translation.x = x;
+ circle.translation.y = y;
+ return circle;
+ },
+ ellipse: function(node, parentStyles) {
+ const x = parseFloat(node.getAttribute("cx"));
+ const y = parseFloat(node.getAttribute("cy"));
+ const width = parseFloat(node.getAttribute("rx"));
+ const height = parseFloat(node.getAttribute("ry"));
+ const ellipse = new Ellipse(0, 0, width, height).noStroke();
+ ellipse.fill = "black";
+ applySvgAttributes.call(this, node, ellipse, parentStyles);
+ ellipse.translation.x = x;
+ ellipse.translation.y = y;
+ return ellipse;
+ },
+ rect: function(node, parentStyles) {
+ const rx = parseFloat(node.getAttribute("rx"));
+ const ry = parseFloat(node.getAttribute("ry"));
+ if (!_.isNaN(rx) || !_.isNaN(ry)) {
+ return read["rounded-rect"](node);
+ }
+ const width = parseFloat(node.getAttribute("width"));
+ const height = parseFloat(node.getAttribute("height"));
+ const w2 = width / 2;
+ const h2 = height / 2;
+ const rect = new Rectangle(0, 0, width, height).noStroke();
+ rect.fill = "black";
+ applySvgAttributes.call(this, node, rect, parentStyles);
+ rect.translation.x += w2;
+ rect.translation.y += h2;
+ return rect;
+ },
+ "rounded-rect": function(node, parentStyles) {
+ const rx = parseFloat(node.getAttribute("rx")) || 0;
+ const ry = parseFloat(node.getAttribute("ry")) || 0;
+ const width = parseFloat(node.getAttribute("width"));
+ const height = parseFloat(node.getAttribute("height"));
+ const w2 = width / 2;
+ const h2 = height / 2;
+ const radius = new Vector(rx, ry);
+ const rect = new RoundedRectangle(0, 0, width, height, radius).noStroke();
+ rect.fill = "black";
+ applySvgAttributes.call(this, node, rect, parentStyles);
+ rect.translation.x += w2;
+ rect.translation.y += h2;
+ return rect;
+ },
+ line: function(node, parentStyles) {
+ const x1 = parseFloat(node.getAttribute("x1"));
+ const y1 = parseFloat(node.getAttribute("y1"));
+ const x2 = parseFloat(node.getAttribute("x2"));
+ const y2 = parseFloat(node.getAttribute("y2"));
+ const line = new Line(x1, y1, x2, y2).noFill();
+ applySvgAttributes.call(this, node, line, parentStyles);
+ return line;
+ },
+ lineargradient: function(node, parentStyles) {
+ let units = node.getAttribute("gradientUnits");
+ let spread = node.getAttribute("spreadMethod");
+ if (!units) {
+ units = "objectBoundingBox";
+ }
+ if (!spread) {
+ spread = "pad";
+ }
+ let x1 = parseFloat(node.getAttribute("x1") || 0);
+ let y1 = parseFloat(node.getAttribute("y1") || 0);
+ let x2 = parseFloat(node.getAttribute("x2") || 0);
+ let y2 = parseFloat(node.getAttribute("y2") || 0);
+ const ox = (x2 + x1) / 2;
+ const oy = (y2 + y1) / 2;
+ if (/userSpaceOnUse/i.test(units)) {
+ x1 -= ox;
+ y1 -= oy;
+ x2 -= ox;
+ y2 -= oy;
+ }
+ const stops = [];
+ for (let i = 0; i < node.children.length; i++) {
+ const child = node.children[i];
+ let offset = child.getAttribute("offset");
+ if (/%/ig.test(offset)) {
+ offset = parseFloat(offset.replace(/%/ig, "")) / 100;
+ }
+ offset = parseFloat(offset);
+ let color = child.getAttribute("stop-color");
+ let opacity = child.getAttribute("stop-opacity");
+ let style = child.getAttribute("style");
+ let matches;
+ if (color === null) {
+ matches = style ? style.match(/stop-color:\s?([#a-fA-F0-9]*)/) : false;
+ color = matches && matches.length > 1 ? matches[1] : void 0;
+ }
+ if (opacity === null) {
+ matches = style ? style.match(/stop-opacity:\s?([0-9.-]*)/) : false;
+ opacity = matches && matches.length > 1 ? parseFloat(matches[1]) : 1;
+ } else {
+ opacity = parseFloat(opacity);
+ }
+ stops.push(new Stop(offset, color, opacity));
+ }
+ const gradient = new LinearGradient(x1, y1, x2, y2, stops);
+ gradient.spread = spread;
+ gradient.units = units;
+ applySvgAttributes.call(this, node, gradient, parentStyles);
+ return gradient;
+ },
+ radialgradient: function(node, parentStyles) {
+ let units = node.getAttribute("gradientUnits");
+ let spread = node.getAttribute("spreadMethod");
+ if (!units) {
+ units = "objectBoundingBox";
+ }
+ if (!spread) {
+ spread = "pad";
+ }
+ let cx = parseFloat(node.getAttribute("cx")) || 0;
+ let cy = parseFloat(node.getAttribute("cy")) || 0;
+ let r = parseFloat(node.getAttribute("r"));
+ let fx = parseFloat(node.getAttribute("fx"));
+ let fy = parseFloat(node.getAttribute("fy"));
+ if (_.isNaN(fx)) {
+ fx = cx;
+ }
+ if (_.isNaN(fy)) {
+ fy = cy;
+ }
+ const ox = Math.abs(cx + fx) / 2;
+ const oy = Math.abs(cy + fy) / 2;
+ if (/userSpaceOnUse/i.test(units)) {
+ cx -= ox;
+ cy -= oy;
+ fx -= ox;
+ fy -= oy;
+ }
+ const stops = [];
+ for (let i = 0; i < node.children.length; i++) {
+ const child = node.children[i];
+ let offset = child.getAttribute("offset");
+ if (/%/ig.test(offset)) {
+ offset = parseFloat(offset.replace(/%/ig, "")) / 100;
+ }
+ offset = parseFloat(offset);
+ let color = child.getAttribute("stop-color");
+ let opacity = child.getAttribute("stop-opacity");
+ let style = child.getAttribute("style");
+ let matches;
+ if (color === null) {
+ matches = style ? style.match(/stop-color:\s?([#a-fA-F0-9]*)/) : false;
+ color = matches && matches.length > 1 ? matches[1] : void 0;
+ }
+ if (opacity === null) {
+ matches = style ? style.match(/stop-opacity:\s?([0-9.-]*)/) : false;
+ opacity = matches && matches.length > 1 ? parseFloat(matches[1]) : 1;
+ } else {
+ opacity = parseFloat(opacity);
+ }
+ stops.push(new Stop(offset, color, opacity));
+ }
+ const gradient = new RadialGradient(cx, cy, r, stops, fx, fy);
+ gradient.spread = spread;
+ gradient.units = units;
+ applySvgAttributes.call(this, node, gradient, parentStyles);
+ return gradient;
+ },
+ text: function(node, parentStyles) {
+ const alignment = getAlignment(node.getAttribute("text-anchor")) || "left";
+ const baseline = getBaseline(node) || "baseline";
+ const message = node.textContent;
+ const text = new Text(message);
+ applySvgAttributes.call(this, node, text, parentStyles);
+ text.alignment = alignment;
+ text.baseline = baseline;
+ return text;
+ },
+ clippath: function(node, parentStyles) {
+ if (read.defs.current && !read.defs.current.contains(node.id)) {
+ read.defs.current.add(node.id, node);
+ }
+ return null;
+ },
+ image: function(node, parentStyles) {
+ let error;
+ const href = node.getAttribute("href") || node.getAttribute("xlink:href");
+ if (!href) {
+ error = new TwoError("encountered
with no href.");
+ console.warn(error.name, error.message);
+ return null;
+ }
+ const x = parseFloat(node.getAttribute("x")) || 0;
+ const y = parseFloat(node.getAttribute("y")) || 0;
+ const width = parseFloat(node.getAttribute("width"));
+ const height = parseFloat(node.getAttribute("height"));
+ const sprite = new Sprite(href, x, y);
+ if (!_.isNaN(width)) {
+ sprite.width = width;
+ }
+ if (!_.isNaN(height)) {
+ sprite.height = height;
+ }
+ applySvgAttributes.call(this, node, sprite, parentStyles);
+ return sprite;
+ }
+ };
+
+ // src/utils/xhr.js
+ function xhr(path, callback) {
+ const xhr2 = new XMLHttpRequest();
+ xhr2.open("GET", path);
+ xhr2.onreadystatechange = function() {
+ if (xhr2.readyState === 4 && xhr2.status === 200) {
+ callback(xhr2.responseText);
+ }
+ };
+ xhr2.send();
+ return xhr2;
+ }
+
+ // src/effects/image-sequence.js
+ var _ImageSequence = class extends Rectangle {
+ _flagTextures = false;
+ _flagFrameRate = false;
+ _flagIndex = false;
+ _amount = 1;
+ _duration = 0;
+ _index = 0;
+ _startTime = 0;
+ _playing = false;
+ _firstFrame = 0;
+ _lastFrame = 0;
+ _loop = true;
+ _textures = null;
+ _frameRate = 0;
+ _origin = null;
+ constructor(paths, ox, oy, frameRate) {
+ super(ox, oy, 0, 0);
+ for (let prop in proto19) {
+ Object.defineProperty(this, prop, proto19[prop]);
+ }
+ this._renderer.flagTextures = FlagTextures.bind(this);
+ this._renderer.bindTextures = BindTextures.bind(this);
+ this._renderer.unbindTextures = UnbindTextures.bind(this);
+ this.noStroke();
+ this.noFill();
+ if (Array.isArray(paths)) {
+ this.textures = paths.map(GenerateTexture.bind(this));
+ } else {
+ this.textures = [GenerateTexture(paths)];
+ }
+ this.origin = new Vector();
+ this._update();
+ if (typeof frameRate === "number") {
+ this.frameRate = frameRate;
+ } else {
+ this.frameRate = _ImageSequence.DefaultFrameRate;
+ }
+ this.index = 0;
+ }
+ play(firstFrame, lastFrame, onLastFrame) {
+ this._playing = true;
+ this._firstFrame = 0;
+ this._lastFrame = this.amount - 1;
+ this._startTime = _.performance.now();
+ if (typeof firstFrame === "number") {
+ this._firstFrame = firstFrame;
+ }
+ if (typeof lastFrame === "number") {
+ this._lastFrame = lastFrame;
+ }
+ if (typeof onLastFrame === "function") {
+ this._onLastFrame = onLastFrame;
+ } else {
+ delete this._onLastFrame;
+ }
+ if (this._index !== this._firstFrame) {
+ this._startTime -= 1e3 * Math.abs(this._index - this._firstFrame) / this._frameRate;
+ }
+ return this;
+ }
+ pause() {
+ this._playing = false;
+ return this;
+ }
+ stop() {
+ this._playing = false;
+ this._index = this._firstFrame;
+ return this;
+ }
+ clone(parent) {
+ const clone = new _ImageSequence(
+ this.textures,
+ this.translation.x,
+ this.translation.y,
+ this.frameRate
+ );
+ clone._loop = this._loop;
+ if (this._playing) {
+ clone.play();
+ }
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone;
+ }
+ toObject() {
+ const object = super.toObject.call(this);
+ object.textures = this.textures.map(function(texture) {
+ return texture.toObject();
+ });
+ object.frameRate = this.frameRate;
+ object.index = this.index;
+ object._firstFrame = this._firstFrame;
+ object._lastFrame = this._lastFrame;
+ object._loop = this._loop;
+ return object;
+ }
+ _update() {
+ const effect = this._textures;
+ let width, height, elapsed, amount, duration, texture;
+ let index, frames;
+ if (effect) {
+ if (this._flagTextures) {
+ this._amount = effect.length;
+ }
+ if (this._flagFrameRate) {
+ this._duration = 1e3 * this._amount / this._frameRate;
+ }
+ if (this._playing && this._frameRate > 0) {
+ amount = this._amount;
+ if (_.isNaN(this._lastFrame)) {
+ this._lastFrame = amount - 1;
+ }
+ elapsed = _.performance.now() - this._startTime;
+ frames = this._lastFrame + 1;
+ duration = 1e3 * (frames - this._firstFrame) / this._frameRate;
+ if (this._loop) {
+ elapsed = elapsed % duration;
+ } else {
+ elapsed = Math.min(elapsed, duration);
+ }
+ index = lerp(this._firstFrame, frames, elapsed / duration);
+ index = Math.floor(index);
+ if (index !== this._index) {
+ this._index = index;
+ texture = effect[this._index];
+ if (texture.loaded) {
+ width = texture.image.width;
+ height = texture.image.height;
+ if (this.width !== width) {
+ this.width = width;
+ }
+ if (this.height !== height) {
+ this.height = height;
+ }
+ this.fill = texture;
+ if (index >= this._lastFrame - 1 && this._onLastFrame) {
+ this._onLastFrame();
+ }
+ }
+ }
+ } else if (this._flagIndex || !(this.fill instanceof Texture)) {
+ texture = effect[this._index];
+ if (texture.loaded) {
+ width = texture.image.width;
+ height = texture.image.height;
+ if (this.width !== width) {
+ this.width = width;
+ }
+ if (this.height !== height) {
+ this.height = height;
+ }
+ }
+ this.fill = texture;
+ }
+ }
+ super._update.call(this);
+ return this;
+ }
+ flagReset() {
+ this._flagTextures = this._flagFrameRate = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ };
+ var ImageSequence = _ImageSequence;
+ __publicField(ImageSequence, "Properties", [
+ "textures",
+ "frameRate",
+ "index"
+ ]);
+ __publicField(ImageSequence, "DefaultFrameRate", 30);
+ var proto19 = {
+ frameRate: {
+ enumerable: true,
+ get: function() {
+ return this._frameRate;
+ },
+ set: function(v) {
+ this._frameRate = v;
+ this._flagFrameRate = true;
+ }
+ },
+ index: {
+ enumerable: true,
+ get: function() {
+ return this._index;
+ },
+ set: function(v) {
+ this._index = v;
+ this._flagIndex = true;
+ }
+ },
+ textures: {
+ enumerable: true,
+ get: function() {
+ return this._textures;
+ },
+ set: function(textures) {
+ const bindTextures = this._renderer.bindTextures;
+ const unbindTextures = this._renderer.unbindTextures;
+ if (this._textures) {
+ this._textures.unbind(Events.Types.insert, bindTextures).unbind(Events.Types.remove, unbindTextures);
+ }
+ this._textures = new Collection((textures || []).slice(0));
+ this._textures.bind(Events.Types.insert, bindTextures).bind(Events.Types.remove, unbindTextures);
+ bindTextures(this._textures);
+ }
+ }
+ };
+ function FlagTextures() {
+ this._flagTextures = true;
+ }
+ function BindTextures(items) {
+ let i = items.length;
+ while (i--) {
+ items[i].bind(Events.Types.change, this._renderer.flagTextures);
+ }
+ this._renderer.flagTextures();
+ }
+ function UnbindTextures(items) {
+ let i = items.length;
+ while (i--) {
+ items[i].unbind(Events.Types.change, this._renderer.flagTextures);
+ }
+ this._renderer.flagTextures();
+ }
+ function GenerateTexture(obj) {
+ if (obj instanceof Texture) {
+ return obj;
+ } else if (typeof obj === "string") {
+ return new Texture(obj);
+ }
+ }
+
+ // src/shapes/arc-segment.js
+ var _ArcSegment = class extends Path {
+ _flagStartAngle = false;
+ _flagEndAngle = false;
+ _flagInnerRadius = false;
+ _flagOuterRadius = false;
+ _startAngle = 0;
+ _endAngle = TWO_PI;
+ _innerRadius = 0;
+ _outerRadius = 0;
+ constructor(x, y, ir, or, sa, ea, res) {
+ const amount = res || Constants.Resolution * 3;
+ const points = [];
+ for (let i = 0; i < amount; i++) {
+ points.push(new Anchor());
+ }
+ super(points, true, false, true);
+ for (let prop in proto20) {
+ Object.defineProperty(this, prop, proto20[prop]);
+ }
+ if (typeof ir === "number") {
+ this.innerRadius = ir;
+ }
+ if (typeof or === "number") {
+ this.outerRadius = or;
+ }
+ if (typeof sa === "number") {
+ this.startAngle = sa;
+ }
+ if (typeof ea === "number") {
+ this.endAngle = ea;
+ }
+ this._update();
+ if (typeof x === "number") {
+ this.translation.x = x;
+ }
+ if (typeof y === "number") {
+ this.translation.y = y;
+ }
+ }
+ _update() {
+ if (this._flagVertices || this._flagStartAngle || this._flagEndAngle || this._flagInnerRadius || this._flagOuterRadius) {
+ const sa = this._startAngle;
+ const ea = this._endAngle;
+ const ir = this._innerRadius;
+ const or = this._outerRadius;
+ const connected = mod(sa, TWO_PI) === mod(ea, TWO_PI);
+ const punctured = ir > 0;
+ const vertices = this.vertices;
+ let length = punctured ? vertices.length / 2 : vertices.length;
+ let command, id = 0;
+ let i, last, pct, v, theta, step, x, y, amp;
+ if (connected) {
+ length--;
+ } else if (!punctured) {
+ length -= 2;
+ }
+ for (i = 0, last = length - 1; i < length; i++) {
+ pct = i / last;
+ v = vertices[id];
+ theta = pct * (ea - sa) + sa;
+ step = (ea - sa) / length;
+ x = or * Math.cos(theta);
+ y = or * Math.sin(theta);
+ switch (i) {
+ case 0:
+ command = Commands.move;
+ break;
+ default:
+ command = Commands.curve;
+ }
+ v.command = command;
+ v.x = x;
+ v.y = y;
+ v.controls.left.clear();
+ v.controls.right.clear();
+ if (v.command === Commands.curve) {
+ amp = or * step / Math.PI;
+ v.controls.left.x = amp * Math.cos(theta - HALF_PI);
+ v.controls.left.y = amp * Math.sin(theta - HALF_PI);
+ v.controls.right.x = amp * Math.cos(theta + HALF_PI);
+ v.controls.right.y = amp * Math.sin(theta + HALF_PI);
+ if (i === 1) {
+ v.controls.left.multiplyScalar(2);
+ }
+ if (i === last) {
+ v.controls.right.multiplyScalar(2);
+ }
+ }
+ id++;
+ }
+ if (punctured) {
+ if (connected) {
+ vertices[id].command = Commands.close;
+ id++;
+ } else {
+ length--;
+ last = length - 1;
+ }
+ for (i = 0; i < length; i++) {
+ pct = i / last;
+ v = vertices[id];
+ theta = (1 - pct) * (ea - sa) + sa;
+ step = (ea - sa) / length;
+ x = ir * Math.cos(theta);
+ y = ir * Math.sin(theta);
+ command = Commands.curve;
+ if (i <= 0) {
+ command = connected ? Commands.move : Commands.line;
+ }
+ v.command = command;
+ v.x = x;
+ v.y = y;
+ v.controls.left.clear();
+ v.controls.right.clear();
+ if (v.command === Commands.curve) {
+ amp = ir * step / Math.PI;
+ v.controls.left.x = amp * Math.cos(theta + HALF_PI);
+ v.controls.left.y = amp * Math.sin(theta + HALF_PI);
+ v.controls.right.x = amp * Math.cos(theta - HALF_PI);
+ v.controls.right.y = amp * Math.sin(theta - HALF_PI);
+ if (i === 1) {
+ v.controls.left.multiplyScalar(2);
+ }
+ if (i === last) {
+ v.controls.right.multiplyScalar(2);
+ }
+ }
+ id++;
+ }
+ vertices[id].copy(vertices[0]);
+ vertices[id].command = Commands.line;
+ } else if (!connected) {
+ vertices[id].command = Commands.line;
+ vertices[id].x = 0;
+ vertices[id].y = 0;
+ id++;
+ vertices[id].copy(vertices[0]);
+ vertices[id].command = Commands.line;
+ }
+ }
+ super._update.call(this);
+ return this;
+ }
+ flagReset() {
+ super.flagReset.call(this);
+ this._flagStartAngle = this._flagEndAngle = this._flagInnerRadius = this._flagOuterRadius = false;
+ return this;
+ }
+ clone(parent) {
+ const ir = this.innerRadius;
+ const or = this.outerRadius;
+ const sa = this.startAngle;
+ const ea = this.endAngle;
+ const resolution = this.vertices.length;
+ const clone = new _ArcSegment(0, 0, ir, or, sa, ea, resolution);
+ clone.translation.copy(this.translation);
+ clone.rotation = this.rotation;
+ clone.scale = this.scale;
+ clone.skewX = this.skewX;
+ clone.skewY = this.skewY;
+ if (this.matrix.manual) {
+ clone.matrix.copy(this.matrix);
+ }
+ for (let i = 0; i < Path.Properties.length; i++) {
+ const k = Path.Properties[i];
+ clone[k] = this[k];
+ }
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone;
+ }
+ toObject() {
+ const object = super.toObject.call(this);
+ for (let i = 0; i < _ArcSegment.Properties.length; i++) {
+ const k = _ArcSegment.Properties[i];
+ object[k] = this[k];
+ }
+ return object;
+ }
+ };
+ var ArcSegment = _ArcSegment;
+ __publicField(ArcSegment, "Properties", ["startAngle", "endAngle", "innerRadius", "outerRadius"]);
+ var proto20 = {
+ startAngle: {
+ enumerable: true,
+ get: function() {
+ return this._startAngle;
+ },
+ set: function(v) {
+ this._startAngle = v;
+ this._flagStartAngle = true;
+ }
+ },
+ endAngle: {
+ enumerable: true,
+ get: function() {
+ return this._endAngle;
+ },
+ set: function(v) {
+ this._endAngle = v;
+ this._flagEndAngle = true;
+ }
+ },
+ innerRadius: {
+ enumerable: true,
+ get: function() {
+ return this._innerRadius;
+ },
+ set: function(v) {
+ this._innerRadius = v;
+ this._flagInnerRadius = true;
+ }
+ },
+ outerRadius: {
+ enumerable: true,
+ get: function() {
+ return this._outerRadius;
+ },
+ set: function(v) {
+ this._outerRadius = v;
+ this._flagOuterRadius = true;
+ }
+ }
+ };
+
+ // src/shapes/points.js
+ var ceil2 = Math.ceil;
+ var floor3 = Math.floor;
+ var _Points = class extends Shape {
+ _flagVertices = true;
+ _flagLength = true;
+ _flagFill = true;
+ _flagStroke = true;
+ _flagLinewidth = true;
+ _flagOpacity = true;
+ _flagVisible = true;
+ _flagSize = true;
+ _flagSizeAttenuation = true;
+ _length = 0;
+ _fill = "#fff";
+ _stroke = "#000";
+ _linewidth = 1;
+ _opacity = 1;
+ _visible = true;
+ _size = 1;
+ _sizeAttenuation = false;
+ _beginning = 0;
+ _ending = 1;
+ _dashes = null;
+ constructor(vertices) {
+ super();
+ for (let prop in proto21) {
+ Object.defineProperty(this, prop, proto21[prop]);
+ }
+ this._renderer.type = "points";
+ this._renderer.flagVertices = FlagVertices.bind(this);
+ this._renderer.bindVertices = BindVertices.bind(this);
+ this._renderer.unbindVertices = UnbindVertices.bind(this);
+ this._renderer.flagFill = FlagFill.bind(this);
+ this._renderer.flagStroke = FlagStroke.bind(this);
+ this._renderer.vertices = null;
+ this._renderer.collection = null;
+ this.sizeAttenuation = false;
+ this.beginning = 0;
+ this.ending = 1;
+ this.fill = "#fff";
+ this.stroke = "#000";
+ this.className = "";
+ this.visible = true;
+ this.vertices = vertices;
+ this.dashes = [];
+ this.dashes.offset = 0;
+ }
+ clone(parent) {
+ const clone = new _Points();
+ for (let j = 0; j < this.vertices.length; j++) {
+ clone.vertices.push(this.vertices[j].clone());
+ }
+ for (let i = 0; i < _Points.Properties.length; i++) {
+ const k = _Points.Properties[i];
+ clone[k] = this[k];
+ }
+ clone.className = this.className;
+ clone.translation.copy(this.translation);
+ clone.rotation = this.rotation;
+ clone.scale = this.scale;
+ clone.skewX = this.skewX;
+ clone.skewY = this.skewY;
+ if (this.matrix.manual) {
+ clone.matrix.copy(this.matrix);
+ }
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone._update();
+ }
+ toObject() {
+ const result = {
+ vertices: this.vertices.map(function(v) {
+ return v.toObject();
+ })
+ };
+ _.each(_Points.Properties, function(k) {
+ result[k] = this[k];
+ }, this);
+ result.className = this.className;
+ result.translation = this.translation.toObject();
+ result.rotation = this.rotation;
+ result.scale = this.scale instanceof Vector ? this.scale.toObject() : this.scale;
+ result.skewX = this.skewX;
+ result.skewY = this.skewY;
+ if (this.matrix.manual) {
+ result.matrix = this.matrix.toObject();
+ }
+ return result;
+ }
+ noFill = Path.prototype.noFill;
+ noStroke = Path.prototype.noStroke;
+ corner = Path.prototype.corner;
+ center = Path.prototype.center;
+ getBoundingClientRect = Path.prototype.getBoundingClientRect;
+ subdivide(limit) {
+ this._update();
+ let points = [];
+ for (let i = 0; i < this.vertices.length; i++) {
+ const a = this.vertices[i];
+ const b = this.vertices[i - 1];
+ if (!b) {
+ continue;
+ }
+ const x1 = a.x;
+ const y1 = a.y;
+ const x2 = b.x;
+ const y2 = b.y;
+ const subdivisions = subdivide(x1, y1, x1, y1, x2, y2, x2, y2, limit);
+ points = points.concat(subdivisions);
+ }
+ this.vertices = points;
+ return this;
+ }
+ _updateLength = Path.prototype._updateLength;
+ _update() {
+ if (this._flagVertices) {
+ if (this._flagLength) {
+ this._updateLength(void 0, true);
+ }
+ const beginning = Math.min(this._beginning, this._ending);
+ const ending = Math.max(this._beginning, this._ending);
+ const bid = getIdByLength(this, beginning * this._length);
+ const eid = getIdByLength(this, ending * this._length);
+ const low = ceil2(bid);
+ const high = floor3(eid);
+ let j = 0, v;
+ this._renderer.vertices = [];
+ this._renderer.collection = [];
+ for (let i = 0; i < this._collection.length; i++) {
+ if (i >= low && i <= high) {
+ v = this._collection[i];
+ this._renderer.collection.push(v);
+ this._renderer.vertices[j * 2 + 0] = v.x;
+ this._renderer.vertices[j * 2 + 1] = v.y;
+ j++;
+ }
+ }
+ }
+ super._update.apply(this, arguments);
+ return this;
+ }
+ flagReset() {
+ this._flagVertices = this._flagLength = this._flagFill = this._flagStroke = this._flagLinewidth = this._flagOpacity = this._flagVisible = this._flagSize = this._flagSizeAttenuation = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ };
+ var Points = _Points;
+ __publicField(Points, "Properties", [
+ "fill",
+ "stroke",
+ "linewidth",
+ "opacity",
+ "visible",
+ "size",
+ "sizeAttenuation",
+ "beginning",
+ "ending"
+ ]);
+ var proto21 = {
+ linewidth: {
+ enumerable: true,
+ get: function() {
+ return this._linewidth;
+ },
+ set: function(v) {
+ this._linewidth = v;
+ this._flagLinewidth = true;
+ }
+ },
+ opacity: {
+ enumerable: true,
+ get: function() {
+ return this._opacity;
+ },
+ set: function(v) {
+ this._opacity = v;
+ this._flagOpacity = true;
+ }
+ },
+ visible: {
+ enumerable: true,
+ get: function() {
+ return this._visible;
+ },
+ set: function(v) {
+ this._visible = v;
+ this._flagVisible = true;
+ }
+ },
+ size: {
+ enumerable: true,
+ get: function() {
+ return this._size;
+ },
+ set: function(v) {
+ this._size = v;
+ this._flagSize = true;
+ }
+ },
+ sizeAttenuation: {
+ enumerable: true,
+ get: function() {
+ return this._sizeAttenuation;
+ },
+ set: function(v) {
+ this._sizeAttenuation = v;
+ this._flagSizeAttenuation = true;
+ }
+ },
+ fill: {
+ enumerable: true,
+ get: function() {
+ return this._fill;
+ },
+ set: function(f) {
+ if (this._fill instanceof Gradient || this._fill instanceof LinearGradient || this._fill instanceof RadialGradient || this._fill instanceof Texture) {
+ this._fill.unbind(Events.Types.change, this._renderer.flagFill);
+ }
+ this._fill = f;
+ this._flagFill = true;
+ if (this._fill instanceof Gradient || this._fill instanceof LinearGradient || this._fill instanceof RadialGradient || this._fill instanceof Texture) {
+ this._fill.bind(Events.Types.change, this._renderer.flagFill);
+ }
+ }
+ },
+ stroke: {
+ enumerable: true,
+ get: function() {
+ return this._stroke;
+ },
+ set: function(f) {
+ if (this._stroke instanceof Gradient || this._stroke instanceof LinearGradient || this._stroke instanceof RadialGradient || this._stroke instanceof Texture) {
+ this._stroke.unbind(Events.Types.change, this._renderer.flagStroke);
+ }
+ this._stroke = f;
+ this._flagStroke = true;
+ if (this._stroke instanceof Gradient || this._stroke instanceof LinearGradient || this._stroke instanceof RadialGradient || this._stroke instanceof Texture) {
+ this._stroke.bind(Events.Types.change, this._renderer.flagStroke);
+ }
+ }
+ },
+ length: {
+ get: function() {
+ if (this._flagLength) {
+ this._updateLength();
+ }
+ return this._length;
+ }
+ },
+ beginning: {
+ enumerable: true,
+ get: function() {
+ return this._beginning;
+ },
+ set: function(v) {
+ this._beginning = v;
+ this._flagVertices = true;
+ }
+ },
+ ending: {
+ enumerable: true,
+ get: function() {
+ return this._ending;
+ },
+ set: function(v) {
+ this._ending = v;
+ this._flagVertices = true;
+ }
+ },
+ vertices: {
+ enumerable: true,
+ get: function() {
+ return this._collection;
+ },
+ set: function(vertices) {
+ const bindVertices = this._renderer.bindVertices;
+ const unbindVertices = this._renderer.unbindVertices;
+ if (this._collection) {
+ this._collection.unbind(Events.Types.insert, bindVertices).unbind(Events.Types.remove, unbindVertices);
+ }
+ if (vertices instanceof Collection) {
+ this._collection = vertices;
+ } else {
+ this._collection = new Collection(vertices || []);
+ }
+ this._collection.bind(Events.Types.insert, bindVertices).bind(Events.Types.remove, unbindVertices);
+ bindVertices(this._collection);
+ }
+ },
+ dashes: {
+ enumerable: true,
+ get: function() {
+ return this._dashes;
+ },
+ set: function(v) {
+ if (typeof v.offset !== "number") {
+ v.offset = this.dashes && this._dashes.offset || 0;
+ }
+ this._dashes = v;
+ }
+ }
+ };
+
+ // src/shapes/polygon.js
+ var cos5 = Math.cos;
+ var sin5 = Math.sin;
+ var _Polygon = class extends Path {
+ _flagWidth = false;
+ _flagHeight = false;
+ _flagSides = false;
+ _radius = 0;
+ _width = 0;
+ _height = 0;
+ _sides = 0;
+ constructor(x, y, radius, sides) {
+ sides = Math.max(sides || 0, 3);
+ super();
+ for (let prop in proto22) {
+ Object.defineProperty(this, prop, proto22[prop]);
+ }
+ this.closed = true;
+ this.automatic = false;
+ if (typeof radius === "number") {
+ this.radius = radius;
+ }
+ if (typeof sides === "number") {
+ this.sides = sides;
+ }
+ this._update();
+ if (typeof x === "number") {
+ this.translation.x = x;
+ }
+ if (typeof y === "number") {
+ this.translation.y = y;
+ }
+ }
+ _update() {
+ if (this._flagVertices || this._flagWidth || this._flagHeight || this._flagSides) {
+ const sides = this._sides;
+ const amount = sides + 1;
+ let length = this.vertices.length;
+ if (length > sides) {
+ this.vertices.splice(sides - 1, length - sides);
+ length = sides;
+ }
+ for (let i = 0; i < amount; i++) {
+ const pct = (i + 0.5) / sides;
+ const theta = TWO_PI * pct + Math.PI / 2;
+ const x = this._width * cos5(theta) / 2;
+ const y = this._height * sin5(theta) / 2;
+ if (i >= length) {
+ this.vertices.push(new Anchor(x, y));
+ } else {
+ this.vertices[i].set(x, y);
+ }
+ this.vertices[i].command = i === 0 ? Commands.move : Commands.line;
+ }
+ }
+ super._update.call(this);
+ return this;
+ }
+ flagReset() {
+ this._flagWidth = this._flagHeight = this._flagSides = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ clone(parent) {
+ const clone = new _Polygon(0, 0, 0, this.sides);
+ clone.translation.copy(this.translation);
+ clone.rotation = this.rotation;
+ clone.scale = this.scale;
+ clone.skewX = this.skewX;
+ clone.skewY = this.skewY;
+ clone.width = this.width;
+ clone.height = this.height;
+ if (this.matrix.manual) {
+ clone.matrix.copy(this.matrix);
+ }
+ for (let i = 0; i < Path.Properties.length; i++) {
+ const k = Path.Properties[i];
+ clone[k] = this[k];
+ }
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone;
+ }
+ toObject() {
+ const object = super.toObject.call(this);
+ for (let i = 0; i < _Polygon.Properties.length; i++) {
+ const k = _Polygon.Properties[i];
+ object[k] = this[k];
+ }
+ return object;
+ }
+ };
+ var Polygon = _Polygon;
+ __publicField(Polygon, "Properties", ["width", "height", "sides"]);
+ var proto22 = {
+ radius: {
+ enumerable: true,
+ get: function() {
+ return this._radius;
+ },
+ set: function(v) {
+ this._radius = v;
+ this.width = v * 2;
+ this.height = v * 2;
+ }
+ },
+ width: {
+ enumerable: true,
+ get: function() {
+ return this._width;
+ },
+ set: function(v) {
+ this._width = v;
+ this._flagWidth = true;
+ this._radius = Math.max(this.width, this.height) / 2;
+ }
+ },
+ height: {
+ enumerable: true,
+ get: function() {
+ return this._height;
+ },
+ set: function(v) {
+ this._height = v;
+ this._flagHeight = true;
+ this._radius = Math.max(this.width, this.height) / 2;
+ }
+ },
+ sides: {
+ enumerable: true,
+ get: function() {
+ return this._sides;
+ },
+ set: function(v) {
+ this._sides = v;
+ this._flagSides = true;
+ }
+ }
+ };
+
+ // src/shapes/star.js
+ var cos6 = Math.cos;
+ var sin6 = Math.sin;
+ var _Star = class extends Path {
+ _flagInnerRadius = false;
+ _flagOuterRadius = false;
+ _flagSides = false;
+ _innerRadius = 0;
+ _outerRadius = 0;
+ _sides = 0;
+ constructor(x, y, innerRadius, outerRadius, sides) {
+ if (arguments.length <= 3) {
+ outerRadius = innerRadius;
+ innerRadius = outerRadius / 2;
+ }
+ if (typeof sides !== "number" || sides <= 0) {
+ sides = 5;
+ }
+ super();
+ for (let prop in proto23) {
+ Object.defineProperty(this, prop, proto23[prop]);
+ }
+ this.closed = true;
+ this.automatic = false;
+ if (typeof innerRadius === "number") {
+ this.innerRadius = innerRadius;
+ }
+ if (typeof outerRadius === "number") {
+ this.outerRadius = outerRadius;
+ }
+ if (typeof sides === "number") {
+ this.sides = sides;
+ }
+ this._update();
+ if (typeof x === "number") {
+ this.translation.x = x;
+ }
+ if (typeof y === "number") {
+ this.translation.y = y;
+ }
+ }
+ _update() {
+ if (this._flagVertices || this._flagInnerRadius || this._flagOuterRadius || this._flagSides) {
+ const sides = this._sides * 2;
+ const amount = sides + 1;
+ let length = this.vertices.length;
+ if (length > sides) {
+ this.vertices.splice(sides - 1, length - sides);
+ length = sides;
+ }
+ for (let i = 0; i < amount; i++) {
+ const pct = (i + 0.5) / sides;
+ const theta = TWO_PI * pct;
+ const r = (!(i % 2) ? this._innerRadius : this._outerRadius) / 2;
+ const x = r * cos6(theta);
+ const y = r * sin6(theta);
+ if (i >= length) {
+ this.vertices.push(new Anchor(x, y));
+ } else {
+ this.vertices[i].set(x, y);
+ }
+ this.vertices[i].command = i === 0 ? Commands.move : Commands.line;
+ }
+ }
+ super._update.call(this);
+ return this;
+ }
+ flagReset() {
+ this._flagInnerRadius = this._flagOuterRadius = this._flagSides = false;
+ super.flagReset.call(this);
+ return this;
+ }
+ clone(parent) {
+ const ir = this.innerRadius;
+ const or = this.outerRadius;
+ const sides = this.sides;
+ const clone = new _Star(0, 0, ir, or, sides);
+ clone.translation.copy(this.translation);
+ clone.rotation = this.rotation;
+ clone.scale = this.scale;
+ clone.skewX = this.skewX;
+ clone.skewY = this.skewY;
+ if (this.matrix.manual) {
+ clone.matrix.copy(this.matrix);
+ }
+ for (let i = 0; i < Path.Properties.length; i++) {
+ const k = Path.Properties[i];
+ clone[k] = this[k];
+ }
+ if (parent) {
+ parent.add(clone);
+ }
+ return clone;
+ }
+ toObject() {
+ const object = super.toObject.call(this);
+ for (let i = 0; i < _Star.Properties.length; i++) {
+ const k = _Star.Properties[i];
+ object[k] = this[k];
+ }
+ return object;
+ }
+ };
+ var Star = _Star;
+ __publicField(Star, "Properties", ["innerRadius", "outerRadius", "sides"]);
+ var proto23 = {
+ innerRadius: {
+ enumerable: true,
+ get: function() {
+ return this._innerRadius;
+ },
+ set: function(v) {
+ this._innerRadius = v;
+ this._flagInnerRadius = true;
+ }
+ },
+ outerRadius: {
+ enumerable: true,
+ get: function() {
+ return this._outerRadius;
+ },
+ set: function(v) {
+ this._outerRadius = v;
+ this._flagOuterRadius = true;
+ }
+ },
+ sides: {
+ enumerable: true,
+ get: function() {
+ return this._sides;
+ },
+ set: function(v) {
+ this._sides = v;
+ this._flagSides = true;
+ }
+ }
+ };
+
+ // src/renderers/svg.js
+ var svg = {
+ version: 1.1,
+ ns: "http://www.w3.org/2000/svg",
+ xlink: "http://www.w3.org/1999/xlink",
+ alignments: {
+ left: "start",
+ center: "middle",
+ right: "end"
+ },
+ createElement: function(name, attrs) {
+ const tag = name;
+ const elem = document.createElementNS(svg.ns, tag);
+ if (tag === "svg") {
+ attrs = _.defaults(attrs || {}, {
+ version: svg.version
+ });
+ }
+ if (attrs && Object.keys(attrs).length > 0) {
+ svg.setAttributes(elem, attrs);
+ }
+ return elem;
+ },
+ setAttributes: function(elem, attrs) {
+ const keys = Object.keys(attrs);
+ for (let i = 0; i < keys.length; i++) {
+ if (/href/.test(keys[i])) {
+ elem.setAttributeNS(svg.xlink, keys[i], attrs[keys[i]]);
+ } else {
+ elem.setAttribute(keys[i], attrs[keys[i]]);
+ }
+ }
+ return this;
+ },
+ removeAttributes: function(elem, attrs) {
+ for (let key in attrs) {
+ elem.removeAttribute(key);
+ }
+ return this;
+ },
+ toString: function(points, closed2) {
+ let l = points.length, last = l - 1, d, string = "";
+ for (let i = 0; i < l; i++) {
+ const b = points[i];
+ const prev = closed2 ? mod(i - 1, l) : Math.max(i - 1, 0);
+ const a = points[prev];
+ let command, c;
+ let vx, vy, ux, uy, ar, bl, br, cl;
+ let rx, ry, xAxisRotation, largeArcFlag, sweepFlag;
+ let x = toFixed(b.x);
+ let y = toFixed(b.y);
+ switch (b.command) {
+ case Commands.close:
+ command = Commands.close;
+ break;
+ case Commands.arc:
+ rx = b.rx;
+ ry = b.ry;
+ xAxisRotation = b.xAxisRotation;
+ largeArcFlag = b.largeArcFlag;
+ sweepFlag = b.sweepFlag;
+ command = Commands.arc + " " + rx + " " + ry + " " + xAxisRotation + " " + largeArcFlag + " " + sweepFlag + " " + x + " " + y;
+ break;
+ case Commands.curve:
+ ar = a.controls && a.controls.right || Vector.zero;
+ bl = b.controls && b.controls.left || Vector.zero;
+ if (a.relative) {
+ vx = toFixed(ar.x + a.x);
+ vy = toFixed(ar.y + a.y);
+ } else {
+ vx = toFixed(ar.x);
+ vy = toFixed(ar.y);
+ }
+ if (b.relative) {
+ ux = toFixed(bl.x + b.x);
+ uy = toFixed(bl.y + b.y);
+ } else {
+ ux = toFixed(bl.x);
+ uy = toFixed(bl.y);
+ }
+ command = (i === 0 ? Commands.move : Commands.curve) + " " + vx + " " + vy + " " + ux + " " + uy + " " + x + " " + y;
+ break;
+ case Commands.move:
+ d = b;
+ command = Commands.move + " " + x + " " + y;
+ break;
+ default:
+ command = b.command + " " + x + " " + y;
+ }
+ if (i >= last && closed2) {
+ if (b.command === Commands.curve) {
+ c = d;
+ br = b.controls && b.controls.right || b;
+ cl = c.controls && c.controls.left || c;
+ if (b.relative) {
+ vx = toFixed(br.x + b.x);
+ vy = toFixed(br.y + b.y);
+ } else {
+ vx = toFixed(br.x);
+ vy = toFixed(br.y);
+ }
+ if (c.relative) {
+ ux = toFixed(cl.x + c.x);
+ uy = toFixed(cl.y + c.y);
+ } else {
+ ux = toFixed(cl.x);
+ uy = toFixed(cl.y);
+ }
+ x = toFixed(c.x);
+ y = toFixed(c.y);
+ command += " C " + vx + " " + vy + " " + ux + " " + uy + " " + x + " " + y;
+ }
+ if (b.command !== Commands.close) {
+ command += " Z";
+ }
+ }
+ string += command + " ";
+ }
+ return string;
+ },
+ pointsToString: function(points, size) {
+ let string = "";
+ const r = size * 0.5;
+ for (let i = 0; i < points.length; i++) {
+ const x = points[i].x;
+ const y = points[i].y - r;
+ string += Commands.move + " " + x + " " + y + " ";
+ string += "a " + r + " " + r + " 0 1 0 0.001 0 Z";
+ }
+ return string;
+ },
+ getClip: function(shape, domElement) {
+ let clip = shape._renderer.clip;
+ if (!clip) {
+ clip = shape._renderer.clip = svg.createElement("clipPath", {
+ "clip-rule": "nonzero"
+ });
+ }
+ if (clip.parentNode === null) {
+ domElement.defs.appendChild(clip);
+ }
+ return clip;
+ },
+ defs: {
+ update: function(domElement) {
+ const { defs } = domElement;
+ if (defs._flagUpdate) {
+ const children = Array.prototype.slice.call(
+ defs.children,
+ 0
+ );
+ for (let i = 0; i < children.length; i++) {
+ const child = children[i];
+ const id = child.id;
+ const selector = `[fill="url(#${id})"],[stroke="url(#${id})"],[clip-path="url(#${id})"]`;
+ const exists = domElement.querySelector(selector);
+ if (!exists) {
+ defs.removeChild(child);
+ }
+ }
+ defs._flagUpdate = false;
+ }
+ }
+ },
+ group: {
+ appendChild: function(object) {
+ const elem = object._renderer.elem;
+ if (!elem) {
+ return;
+ }
+ const tag = elem.nodeName;
+ if (!tag || /(radial|linear)gradient/i.test(tag) || object._clip) {
+ return;
+ }
+ this.elem.appendChild(elem);
+ },
+ removeChild: function(object) {
+ const elem = object._renderer.elem;
+ if (!elem || elem.parentNode != this.elem) {
+ return;
+ }
+ const tag = elem.nodeName;
+ if (!tag) {
+ return;
+ }
+ if (object._clip) {
+ return;
+ }
+ this.elem.removeChild(elem);
+ },
+ orderChild: function(object) {
+ this.elem.appendChild(object._renderer.elem);
+ },
+ renderChild: function(child) {
+ svg[child._renderer.type].render.call(child, this);
+ },
+ render: function(domElement) {
+ if (!this._visible && !this._flagVisible || this._opacity === 0 && !this._flagOpacity) {
+ return this;
+ }
+ this._update();
+ if (!this._renderer.elem) {
+ this._renderer.elem = svg.createElement("g", {
+ id: this.id
+ });
+ domElement.appendChild(this._renderer.elem);
+ }
+ const flagMatrix = this._matrix.manual || this._flagMatrix;
+ const context = {
+ domElement,
+ elem: this._renderer.elem
+ };
+ if (flagMatrix) {
+ this._renderer.elem.setAttribute("transform", "matrix(" + this._matrix.toString() + ")");
+ }
+ for (let i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ svg[child._renderer.type].render.call(child, domElement);
+ }
+ if (this._flagId) {
+ this._renderer.elem.setAttribute("id", this._id);
+ }
+ if (this._flagOpacity) {
+ this._renderer.elem.setAttribute("opacity", this._opacity);
+ }
+ if (this._flagVisible) {
+ this._renderer.elem.setAttribute("display", this._visible ? "inline" : "none");
+ }
+ if (this._flagClassName) {
+ this._renderer.elem.setAttribute("class", this.classList.join(" "));
+ }
+ if (this._flagAdditions) {
+ this.additions.forEach(svg.group.appendChild, context);
+ }
+ if (this._flagSubtractions) {
+ this.subtractions.forEach(svg.group.removeChild, context);
+ }
+ if (this._flagOrder) {
+ this.children.forEach(svg.group.orderChild, context);
+ }
+ if (this._flagMask) {
+ if (this._mask) {
+ svg[this._mask._renderer.type].render.call(this._mask, domElement);
+ this._renderer.elem.setAttribute("clip-path", "url(#" + this._mask.id + ")");
+ } else {
+ this._renderer.elem.removeAttribute("clip-path");
+ }
+ }
+ if (this.dataset) {
+ Object.assign(this._renderer.elem.dataset, this.dataset);
+ }
+ return this.flagReset();
+ }
+ },
+ path: {
+ render: function(domElement) {
+ if (this._opacity === 0 && !this._flagOpacity) {
+ return this;
+ }
+ this._update();
+ const changed = {};
+ const flagMatrix = this._matrix.manual || this._flagMatrix;
+ if (flagMatrix) {
+ changed.transform = "matrix(" + this._matrix.toString() + ")";
+ }
+ if (this._flagId) {
+ changed.id = this._id;
+ }
+ if (this._flagVertices) {
+ const vertices = svg.toString(this._renderer.vertices, this._closed);
+ changed.d = vertices;
+ }
+ if (this._fill && this._fill._renderer) {
+ this._renderer.hasFillEffect = true;
+ this._fill._update();
+ svg[this._fill._renderer.type].render.call(this._fill, domElement, true);
+ }
+ if (this._flagFill) {
+ changed.fill = this._fill && this._fill.id ? "url(#" + this._fill.id + ")" : this._fill;
+ if (this._renderer.hasFillEffect && typeof this._fill.id === "undefined") {
+ domElement.defs._flagUpdate = true;
+ delete this._renderer.hasFillEffect;
+ }
+ }
+ if (this._stroke && this._stroke._renderer) {
+ this._renderer.hasStrokeEffect = true;
+ this._stroke._update();
+ svg[this._stroke._renderer.type].render.call(this._stroke, domElement, true);
+ }
+ if (this._flagStroke) {
+ changed.stroke = this._stroke && this._stroke.id ? "url(#" + this._stroke.id + ")" : this._stroke;
+ if (this._renderer.hasStrokeEffect && typeof this._stroke.id === "undefined") {
+ domElement.defs._flagUpdate = true;
+ delete this._renderer.hasStrokeEffect;
+ }
+ }
+ if (this._flagLinewidth) {
+ changed["stroke-width"] = this._linewidth;
+ }
+ if (this._flagOpacity) {
+ changed["stroke-opacity"] = this._opacity;
+ changed["fill-opacity"] = this._opacity;
+ }
+ if (this._flagClassName) {
+ changed["class"] = this.classList.join(" ");
+ }
+ if (this._flagVisible) {
+ changed.visibility = this._visible ? "visible" : "hidden";
+ }
+ if (this._flagCap) {
+ changed["stroke-linecap"] = this._cap;
+ }
+ if (this._flagJoin) {
+ changed["stroke-linejoin"] = this._join;
+ }
+ if (this._flagMiter) {
+ changed["stroke-miterlimit"] = this._miter;
+ }
+ if (this.dashes && this.dashes.length > 0) {
+ changed["stroke-dasharray"] = this.dashes.join(" ");
+ changed["stroke-dashoffset"] = this.dashes.offset || 0;
+ }
+ if (!this._renderer.elem) {
+ changed.id = this._id;
+ this._renderer.elem = svg.createElement("path", changed);
+ domElement.appendChild(this._renderer.elem);
+ } else {
+ svg.setAttributes(this._renderer.elem, changed);
+ }
+ if (this._flagClip) {
+ const clip = svg.getClip(this, domElement);
+ const elem = this._renderer.elem;
+ if (this._clip) {
+ elem.removeAttribute("id");
+ clip.setAttribute("id", this.id);
+ clip.appendChild(elem);
+ } else {
+ clip.removeAttribute("id");
+ elem.setAttribute("id", this.id);
+ this.parent._renderer.elem.appendChild(elem);
+ }
+ }
+ if (this._flagMask) {
+ if (this._mask) {
+ svg[this._mask._renderer.type].render.call(this._mask, domElement);
+ this._renderer.elem.setAttribute("clip-path", "url(#" + this._mask.id + ")");
+ } else {
+ this._renderer.elem.removeAttribute("clip-path");
+ }
+ }
+ return this.flagReset();
+ }
+ },
+ points: {
+ render: function(domElement) {
+ if (this._opacity === 0 && !this._flagOpacity) {
+ return this;
+ }
+ this._update();
+ const changed = {};
+ const flagMatrix = this._matrix.manual || this._flagMatrix;
+ if (flagMatrix) {
+ changed.transform = "matrix(" + this._matrix.toString() + ")";
+ }
+ if (this._flagId) {
+ changed.id = this._id;
+ }
+ if (this._flagVertices || this._flagSize || this._flagSizeAttenuation) {
+ let size = this._size;
+ if (!this._sizeAttenuation) {
+ const me = this.worldMatrix.elements;
+ const m = decomposeMatrix(me[0], me[3], me[1], me[4], me[2], me[5]);
+ size /= Math.max(m.scaleX, m.scaleY);
+ }
+ const vertices = svg.pointsToString(this._renderer.collection, size);
+ changed.d = vertices;
+ }
+ if (this._fill && this._fill._renderer) {
+ this._renderer.hasFillEffect = true;
+ this._fill._update();
+ svg[this._fill._renderer.type].render.call(this._fill, domElement, true);
+ }
+ if (this._flagFill) {
+ changed.fill = this._fill && this._fill.id ? "url(#" + this._fill.id + ")" : this._fill;
+ if (this._renderer.hasFillEffect && typeof this._fill.id === "undefined") {
+ domElement.defs._flagUpdate = true;
+ delete this._renderer.hasFillEffect;
+ }
+ }
+ if (this._stroke && this._stroke._renderer) {
+ this._renderer.hasStrokeEffect = true;
+ this._stroke._update();
+ svg[this._stroke._renderer.type].render.call(this._stroke, domElement, true);
+ }
+ if (this._flagStroke) {
+ changed.stroke = this._stroke && this._stroke.id ? "url(#" + this._stroke.id + ")" : this._stroke;
+ if (this._renderer.hasStrokeEffect && typeof this._stroke.id === "undefined") {
+ domElement.defs._flagUpdate = true;
+ delete this._renderer.hasStrokeEffect;
+ }
+ }
+ if (this._flagLinewidth) {
+ changed["stroke-width"] = this._linewidth;
+ }
+ if (this._flagOpacity) {
+ changed["stroke-opacity"] = this._opacity;
+ changed["fill-opacity"] = this._opacity;
+ }
+ if (this._flagClassName) {
+ changed["class"] = this.classList.join(" ");
+ }
+ if (this._flagVisible) {
+ changed.visibility = this._visible ? "visible" : "hidden";
+ }
+ if (this.dashes && this.dashes.length > 0) {
+ changed["stroke-dasharray"] = this.dashes.join(" ");
+ changed["stroke-dashoffset"] = this.dashes.offset || 0;
+ }
+ if (!this._renderer.elem) {
+ changed.id = this._id;
+ this._renderer.elem = svg.createElement("path", changed);
+ domElement.appendChild(this._renderer.elem);
+ } else {
+ svg.setAttributes(this._renderer.elem, changed);
+ }
+ return this.flagReset();
+ }
+ },
+ text: {
+ render: function(domElement) {
+ this._update();
+ const changed = {};
+ const flagMatrix = this._matrix.manual || this._flagMatrix;
+ if (flagMatrix) {
+ changed.transform = "matrix(" + this._matrix.toString() + ")";
+ }
+ if (this._flagId) {
+ changed.id = this._id;
+ }
+ if (this._flagFamily) {
+ changed["font-family"] = this._family;
+ }
+ if (this._flagSize) {
+ changed["font-size"] = this._size;
+ }
+ if (this._flagLeading) {
+ changed["line-height"] = this._leading;
+ }
+ if (this._flagAlignment) {
+ changed["text-anchor"] = svg.alignments[this._alignment] || this._alignment;
+ }
+ if (this._flagBaseline) {
+ changed["alignment-baseline"] = changed["dominant-baseline"] = this._baseline;
+ }
+ if (this._flagStyle) {
+ changed["font-style"] = this._style;
+ }
+ if (this._flagWeight) {
+ changed["font-weight"] = this._weight;
+ }
+ if (this._flagDecoration) {
+ changed["text-decoration"] = this._decoration;
+ }
+ if (this._fill && this._fill._renderer) {
+ this._renderer.hasFillEffect = true;
+ this._fill._update();
+ svg[this._fill._renderer.type].render.call(this._fill, domElement, true);
+ }
+ if (this._flagFill) {
+ changed.fill = this._fill && this._fill.id ? "url(#" + this._fill.id + ")" : this._fill;
+ if (this._renderer.hasFillEffect && typeof this._fill.id === "undefined") {
+ domElement.defs._flagUpdate = true;
+ delete this._renderer.hasFillEffect;
+ }
+ }
+ if (this._stroke && this._stroke._renderer) {
+ this._renderer.hasStrokeEffect = true;
+ this._stroke._update();
+ svg[this._stroke._renderer.type].render.call(this._stroke, domElement, true);
+ }
+ if (this._flagStroke) {
+ changed.stroke = this._stroke && this._stroke.id ? "url(#" + this._stroke.id + ")" : this._stroke;
+ if (this._renderer.hasStrokeEffect && typeof this._stroke.id === "undefined") {
+ domElement.defs._flagUpdate = true;
+ delete this._renderer.hasStrokeEffect;
+ }
+ }
+ if (this._flagLinewidth) {
+ changed["stroke-width"] = this._linewidth;
+ }
+ if (this._flagOpacity) {
+ changed.opacity = this._opacity;
+ }
+ if (this._flagClassName) {
+ changed["class"] = this.classList.join(" ");
+ }
+ if (this._flagVisible) {
+ changed.visibility = this._visible ? "visible" : "hidden";
+ }
+ if (this.dashes && this.dashes.length > 0) {
+ changed["stroke-dasharray"] = this.dashes.join(" ");
+ changed["stroke-dashoffset"] = this.dashes.offset || 0;
+ }
+ if (!this._renderer.elem) {
+ changed.id = this._id;
+ this._renderer.elem = svg.createElement("text", changed);
+ domElement.appendChild(this._renderer.elem);
+ } else {
+ svg.setAttributes(this._renderer.elem, changed);
+ }
+ if (this._flagClip) {
+ const clip = svg.getClip(this, domElement);
+ const elem = this._renderer.elem;
+ if (this._clip) {
+ elem.removeAttribute("id");
+ clip.setAttribute("id", this.id);
+ clip.appendChild(elem);
+ } else {
+ clip.removeAttribute("id");
+ elem.setAttribute("id", this.id);
+ this.parent._renderer.elem.appendChild(elem);
+ }
+ }
+ if (this._flagMask) {
+ if (this._mask) {
+ svg[this._mask._renderer.type].render.call(this._mask, domElement);
+ this._renderer.elem.setAttribute("clip-path", "url(#" + this._mask.id + ")");
+ } else {
+ this._renderer.elem.removeAttribute("clip-path");
+ }
+ }
+ if (this._flagValue) {
+ this._renderer.elem.textContent = this._value;
+ }
+ return this.flagReset();
+ }
+ },
+ "linear-gradient": {
+ render: function(domElement, silent) {
+ if (!silent) {
+ this._update();
+ }
+ const changed = {};
+ if (this._flagId) {
+ changed.id = this._id;
+ }
+ if (this._flagEndPoints) {
+ changed.x1 = this.left._x;
+ changed.y1 = this.left._y;
+ changed.x2 = this.right._x;
+ changed.y2 = this.right._y;
+ }
+ if (this._flagSpread) {
+ changed.spreadMethod = this._spread;
+ }
+ if (this._flagUnits) {
+ changed.gradientUnits = this._units;
+ }
+ if (!this._renderer.elem) {
+ changed.id = this._id;
+ this._renderer.elem = svg.createElement("linearGradient", changed);
+ } else {
+ svg.setAttributes(this._renderer.elem, changed);
+ }
+ if (this._renderer.elem.parentNode === null) {
+ domElement.defs.appendChild(this._renderer.elem);
+ }
+ if (this._flagStops) {
+ const lengthChanged = this._renderer.elem.childNodes.length !== this.stops.length;
+ if (lengthChanged) {
+ while (this._renderer.elem.lastChild) {
+ this._renderer.elem.removeChild(this._renderer.elem.lastChild);
+ }
+ }
+ for (let i = 0; i < this.stops.length; i++) {
+ const stop = this.stops[i];
+ const attrs = {};
+ if (stop._flagOffset) {
+ attrs.offset = 100 * stop._offset + "%";
+ }
+ if (stop._flagColor) {
+ attrs["stop-color"] = stop._color;
+ }
+ if (stop._flagOpacity) {
+ attrs["stop-opacity"] = stop._opacity;
+ }
+ if (!stop._renderer.elem) {
+ stop._renderer.elem = svg.createElement("stop", attrs);
+ } else {
+ svg.setAttributes(stop._renderer.elem, attrs);
+ }
+ if (lengthChanged) {
+ this._renderer.elem.appendChild(stop._renderer.elem);
+ }
+ stop.flagReset();
+ }
+ }
+ return this.flagReset();
+ }
+ },
+ "radial-gradient": {
+ render: function(domElement, silent) {
+ if (!silent) {
+ this._update();
+ }
+ const changed = {};
+ if (this._flagId) {
+ changed.id = this._id;
+ }
+ if (this._flagCenter) {
+ changed.cx = this.center._x;
+ changed.cy = this.center._y;
+ }
+ if (this._flagFocal) {
+ changed.fx = this.focal._x;
+ changed.fy = this.focal._y;
+ }
+ if (this._flagRadius) {
+ changed.r = this._radius;
+ }
+ if (this._flagSpread) {
+ changed.spreadMethod = this._spread;
+ }
+ if (this._flagUnits) {
+ changed.gradientUnits = this._units;
+ }
+ if (!this._renderer.elem) {
+ changed.id = this._id;
+ this._renderer.elem = svg.createElement("radialGradient", changed);
+ } else {
+ svg.setAttributes(this._renderer.elem, changed);
+ }
+ if (this._renderer.elem.parentNode === null) {
+ domElement.defs.appendChild(this._renderer.elem);
+ }
+ if (this._flagStops) {
+ const lengthChanged = this._renderer.elem.childNodes.length !== this.stops.length;
+ if (lengthChanged) {
+ while (this._renderer.elem.lastChild) {
+ this._renderer.elem.removeChild(this._renderer.elem.lastChild);
+ }
+ }
+ for (let i = 0; i < this.stops.length; i++) {
+ const stop = this.stops[i];
+ const attrs = {};
+ if (stop._flagOffset) {
+ attrs.offset = 100 * stop._offset + "%";
+ }
+ if (stop._flagColor) {
+ attrs["stop-color"] = stop._color;
+ }
+ if (stop._flagOpacity) {
+ attrs["stop-opacity"] = stop._opacity;
+ }
+ if (!stop._renderer.elem) {
+ stop._renderer.elem = svg.createElement("stop", attrs);
+ } else {
+ svg.setAttributes(stop._renderer.elem, attrs);
+ }
+ if (lengthChanged) {
+ this._renderer.elem.appendChild(stop._renderer.elem);
+ }
+ stop.flagReset();
+ }
+ }
+ return this.flagReset();
+ }
+ },
+ texture: {
+ render: function(domElement, silent) {
+ if (!silent) {
+ this._update();
+ }
+ const changed = {};
+ const styles = { x: 0, y: 0 };
+ const image = this.image;
+ if (this._flagId) {
+ changed.id = this._id;
+ }
+ if (this._flagLoaded && this.loaded) {
+ switch (image.nodeName.toLowerCase()) {
+ case "canvas":
+ styles.href = styles["xlink:href"] = image.toDataURL("image/png");
+ break;
+ case "img":
+ case "image":
+ styles.href = styles["xlink:href"] = this.src;
+ break;
+ }
+ }
+ if (this._flagOffset || this._flagLoaded || this._flagScale) {
+ changed.x = this._offset.x;
+ changed.y = this._offset.y;
+ if (image) {
+ changed.x -= image.width / 2;
+ changed.y -= image.height / 2;
+ if (this._scale instanceof Vector) {
+ changed.x *= this._scale.x;
+ changed.y *= this._scale.y;
+ } else {
+ changed.x *= this._scale;
+ changed.y *= this._scale;
+ }
+ }
+ if (changed.x > 0) {
+ changed.x *= -1;
+ }
+ if (changed.y > 0) {
+ changed.y *= -1;
+ }
+ }
+ if (this._flagScale || this._flagLoaded || this._flagRepeat) {
+ changed.width = 0;
+ changed.height = 0;
+ if (image) {
+ styles.width = changed.width = image.width;
+ styles.height = changed.height = image.height;
+ switch (this._repeat) {
+ case "no-repeat":
+ changed.width += 1;
+ changed.height += 1;
+ break;
+ }
+ if (this._scale instanceof Vector) {
+ changed.width *= this._scale.x;
+ changed.height *= this._scale.y;
+ } else {
+ changed.width *= this._scale;
+ changed.height *= this._scale;
+ }
+ }
+ }
+ if (this._flagScale || this._flagLoaded) {
+ if (!this._renderer.image) {
+ this._renderer.image = svg.createElement("image", styles);
+ } else {
+ svg.setAttributes(this._renderer.image, styles);
+ }
+ }
+ if (!this._renderer.elem) {
+ changed.id = this._id;
+ changed.patternUnits = "userSpaceOnUse";
+ this._renderer.elem = svg.createElement("pattern", changed);
+ } else if (Object.keys(changed).length !== 0) {
+ svg.setAttributes(this._renderer.elem, changed);
+ }
+ if (this._renderer.elem.parentNode === null) {
+ domElement.defs.appendChild(this._renderer.elem);
+ }
+ if (this._renderer.elem && this._renderer.image && !this._renderer.appended) {
+ this._renderer.elem.appendChild(this._renderer.image);
+ this._renderer.appended = true;
+ }
+ return this.flagReset();
+ }
+ }
+ };
+ var Renderer2 = class extends Events {
+ constructor(params) {
+ super();
+ this.domElement = params.domElement || svg.createElement("svg");
+ this.scene = new Group();
+ this.scene.parent = this;
+ this.defs = svg.createElement("defs");
+ this.defs._flagUpdate = false;
+ this.domElement.appendChild(this.defs);
+ this.domElement.defs = this.defs;
+ this.domElement.style.overflow = "hidden";
+ }
+ setSize(width, height) {
+ this.width = width;
+ this.height = height;
+ svg.setAttributes(this.domElement, {
+ width,
+ height
+ });
+ return this.trigger(Events.Types.resize, width, height);
+ }
+ render() {
+ svg.group.render.call(this.scene, this.domElement);
+ svg.defs.update(this.domElement);
+ return this;
+ }
+ };
+ __publicField(Renderer2, "Utils", svg);
+
+ // src/utils/shaders.js
+ var shaders = {
+ create: function(gl, source, type) {
+ const shader = gl.createShader(gl[type]);
+ gl.shaderSource(shader, source);
+ gl.compileShader(shader);
+ const compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
+ if (!compiled) {
+ const error = gl.getShaderInfoLog(shader);
+ gl.deleteShader(shader);
+ throw new TwoError("unable to compile shader " + shader + ": " + error);
+ }
+ return shader;
+ },
+ types: {
+ vertex: "VERTEX_SHADER",
+ fragment: "FRAGMENT_SHADER"
+ },
+ path: {
+ vertex: `
+ precision mediump float;
+ attribute vec2 a_position;
+
+ uniform mat3 u_matrix;
+ uniform vec2 u_resolution;
+ uniform vec4 u_rect;
+
+ varying vec2 v_textureCoords;
+
+ void main() {
+ vec2 rectCoords = (a_position * (u_rect.zw - u_rect.xy)) + u_rect.xy;
+ vec2 projected = (u_matrix * vec3(rectCoords, 1.0)).xy;
+ vec2 normal = projected / u_resolution;
+ vec2 clipspace = (normal * 2.0) - 1.0;
+
+ gl_Position = vec4(clipspace * vec2(1.0, -1.0), 0.0, 1.0);
+ v_textureCoords = a_position;
+ }
+ `,
+ fragment: `
+ precision mediump float;
+
+ uniform sampler2D u_image;
+ varying vec2 v_textureCoords;
+
+ void main() {
+ vec4 texel = texture2D(u_image, v_textureCoords);
+ if (texel.a == 0.0) {
+ discard;
+ }
+ gl_FragColor = texel;
+ }
+ `
+ },
+ points: {
+ vertex: `
+ precision mediump float;
+ attribute vec2 a_position;
+
+ uniform float u_size;
+ uniform mat3 u_matrix;
+ uniform vec2 u_resolution;
+
+ varying vec2 v_textureCoords;
+
+ void main() {
+ vec2 projected = (u_matrix * vec3(a_position, 1.0)).xy;
+ vec2 normal = projected / u_resolution;
+ vec2 clipspace = (normal * 2.0) - 1.0;
+
+ gl_PointSize = u_size;
+ gl_Position = vec4(clipspace * vec2(1.0, -1.0), 0.0, 1.0);
+ v_textureCoords = a_position;
+ }
+ `,
+ fragment: `
+ precision mediump float;
+
+ uniform sampler2D u_image;
+
+ void main() {
+ vec4 texel = texture2D(u_image, gl_PointCoord);
+ if (texel.a == 0.0) {
+ discard;
+ }
+ gl_FragColor = texel;
+ }
+ `
+ }
+ };
+
+ // src/renderers/webgl.js
+ var multiplyMatrix = Matrix2.Multiply;
+ var identity = [1, 0, 0, 0, 1, 0, 0, 0, 1];
+ var transformation = new NumArray(9);
+ var CanvasUtils = Renderer.Utils;
+ var quad = new NumArray([
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 1,
+ 1
+ ]);
+ var webgl = {
+ precision: 0.9,
+ isHidden: /(undefined|none|transparent)/i,
+ canvas: root.document ? root.document.createElement("canvas") : { getContext: function() {
+ } },
+ alignments: {
+ left: "start",
+ middle: "center",
+ right: "end"
+ },
+ matrix: new Matrix2(),
+ group: {
+ removeChild: function(child, gl) {
+ if (child.children) {
+ for (let i = 0; i < child.children.length; i++) {
+ webgl.group.removeChild(child.children[i], gl);
+ }
+ }
+ if (child._renderer.texture) {
+ gl.deleteTexture(child._renderer.texture);
+ delete child._renderer.texture;
+ }
+ if (child._renderer.positionBuffer) {
+ gl.deleteBuffer(child._renderer.positionBuffer);
+ delete child._renderer.positionBuffer;
+ }
+ },
+ render: function(gl, programs) {
+ if (!this._visible) {
+ return;
+ }
+ this._update();
+ const parent = this.parent;
+ const flagParentMatrix = parent._matrix && parent._matrix.manual || parent._flagMatrix;
+ const flagMatrix = this._matrix.manual || this._flagMatrix;
+ if (flagParentMatrix || flagMatrix) {
+ if (!this._renderer.matrix) {
+ this._renderer.matrix = new NumArray(9);
+ }
+ this._matrix.toTransformArray(true, transformation);
+ multiplyMatrix(transformation, parent._renderer.matrix, this._renderer.matrix);
+ if (!(this._renderer.scale instanceof Vector)) {
+ this._renderer.scale = new Vector();
+ }
+ if (this._scale instanceof Vector) {
+ this._renderer.scale.x = this._scale.x;
+ this._renderer.scale.y = this._scale.y;
+ } else {
+ this._renderer.scale.x = this._scale;
+ this._renderer.scale.y = this._scale;
+ }
+ if (!/renderer/i.test(parent._renderer.type)) {
+ this._renderer.scale.x *= parent._renderer.scale.x;
+ this._renderer.scale.y *= parent._renderer.scale.y;
+ }
+ if (flagParentMatrix) {
+ this._flagMatrix = true;
+ }
+ }
+ if (this._mask) {
+ gl.clear(gl.STENCIL_BUFFER_BIT);
+ gl.enable(gl.STENCIL_TEST);
+ gl.stencilFunc(gl.ALWAYS, 1, 0);
+ gl.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);
+ gl.colorMask(false, false, false, false);
+ webgl[this._mask._renderer.type].render.call(this._mask, gl, programs, this);
+ gl.stencilFunc(gl.EQUAL, 1, 255);
+ gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
+ gl.colorMask(true, true, true, true);
+ }
+ this._flagOpacity = parent._flagOpacity || this._flagOpacity;
+ this._renderer.opacity = this._opacity * (parent && parent._renderer ? parent._renderer.opacity : 1);
+ let i;
+ if (this._flagSubtractions) {
+ for (i = 0; i < this.subtractions.length; i++) {
+ webgl.group.removeChild(this.subtractions[i], gl);
+ }
+ }
+ for (i = 0; i < this.children.length; i++) {
+ const child = this.children[i];
+ webgl[child._renderer.type].render.call(child, gl, programs);
+ }
+ if (this._mask) {
+ gl.disable(gl.STENCIL_TEST);
+ }
+ return this.flagReset();
+ }
+ },
+ path: {
+ updateCanvas: function(elem) {
+ let prev, a, c, ux, uy, vx, vy, ar, bl, br, cl, x, y;
+ let isOffset;
+ const commands = elem._renderer.vertices;
+ const canvas3 = this.canvas;
+ const ctx = this.ctx;
+ const scale = elem._renderer.scale;
+ const stroke = elem._stroke;
+ const linewidth = elem._linewidth;
+ const fill = elem._fill;
+ const opacity = elem._renderer.opacity || elem._opacity;
+ const cap = elem._cap;
+ const join = elem._join;
+ const miter = elem._miter;
+ const closed2 = elem._closed;
+ const dashes = elem.dashes;
+ const length = commands.length;
+ const last = length - 1;
+ canvas3.width = Math.max(Math.ceil(elem._renderer.rect.width * scale.x), 1);
+ canvas3.height = Math.max(Math.ceil(elem._renderer.rect.height * scale.y), 1);
+ const centroid = elem._renderer.rect.centroid;
+ const cx = centroid.x;
+ const cy = centroid.y;
+ ctx.clearRect(0, 0, canvas3.width, canvas3.height);
+ if (fill) {
+ if (typeof fill === "string") {
+ ctx.fillStyle = fill;
+ } else {
+ webgl[fill._renderer.type].render.call(fill, ctx, elem);
+ ctx.fillStyle = fill._renderer.effect;
+ }
+ }
+ if (stroke) {
+ if (typeof stroke === "string") {
+ ctx.strokeStyle = stroke;
+ } else {
+ webgl[stroke._renderer.type].render.call(stroke, ctx, elem);
+ ctx.strokeStyle = stroke._renderer.effect;
+ }
+ if (linewidth) {
+ ctx.lineWidth = linewidth;
+ }
+ if (miter) {
+ ctx.miterLimit = miter;
+ }
+ if (join) {
+ ctx.lineJoin = join;
+ }
+ if (!closed2 && cap) {
+ ctx.lineCap = cap;
+ }
+ }
+ if (typeof opacity === "number") {
+ ctx.globalAlpha = opacity;
+ }
+ if (dashes && dashes.length > 0) {
+ ctx.lineDashOffset = dashes.offset || 0;
+ ctx.setLineDash(dashes);
+ }
+ let d, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, ax, ay;
+ ctx.save();
+ ctx.scale(scale.x, scale.y);
+ ctx.translate(cx, cy);
+ ctx.beginPath();
+ for (let i = 0; i < commands.length; i++) {
+ const b = commands[i];
+ x = b.x;
+ y = b.y;
+ switch (b.command) {
+ case Commands.close:
+ ctx.closePath();
+ break;
+ case Commands.arc:
+ rx = b.rx;
+ ry = b.ry;
+ xAxisRotation = b.xAxisRotation;
+ largeArcFlag = b.largeArcFlag;
+ sweepFlag = b.sweepFlag;
+ prev = closed2 ? mod(i - 1, length) : Math.max(i - 1, 0);
+ a = commands[prev];
+ ax = a.x;
+ ay = a.y;
+ CanvasUtils.renderSvgArcCommand(ctx, ax, ay, rx, ry, largeArcFlag, sweepFlag, xAxisRotation, x, y);
+ break;
+ case Commands.curve:
+ prev = closed2 ? mod(i - 1, length) : Math.max(i - 1, 0);
+ a = commands[prev];
+ ar = a.controls && a.controls.right || Vector.zero;
+ bl = b.controls && b.controls.left || Vector.zero;
+ if (a._relative) {
+ vx = ar.x + a.x;
+ vy = ar.y + a.y;
+ } else {
+ vx = ar.x;
+ vy = ar.y;
+ }
+ if (b._relative) {
+ ux = bl.x + b.x;
+ uy = bl.y + b.y;
+ } else {
+ ux = bl.x;
+ uy = bl.y;
+ }
+ ctx.bezierCurveTo(vx, vy, ux, uy, x, y);
+ if (i >= last && closed2) {
+ c = d;
+ br = b.controls && b.controls.right || Vector.zero;
+ cl = c.controls && c.controls.left || Vector.zero;
+ if (b._relative) {
+ vx = br.x + b.x;
+ vy = br.y + b.y;
+ } else {
+ vx = br.x;
+ vy = br.y;
+ }
+ if (c._relative) {
+ ux = cl.x + c.x;
+ uy = cl.y + c.y;
+ } else {
+ ux = cl.x;
+ uy = cl.y;
+ }
+ x = c.x;
+ y = c.y;
+ ctx.bezierCurveTo(vx, vy, ux, uy, x, y);
+ }
+ break;
+ case Commands.line:
+ ctx.lineTo(x, y);
+ break;
+ case Commands.move:
+ d = b;
+ ctx.moveTo(x, y);
+ break;
+ }
+ }
+ if (closed2) {
+ ctx.closePath();
+ }
+ if (!webgl.isHidden.test(fill)) {
+ isOffset = fill._renderer && fill._renderer.offset;
+ if (isOffset) {
+ ctx.save();
+ ctx.translate(
+ -fill._renderer.offset.x,
+ -fill._renderer.offset.y
+ );
+ ctx.scale(fill._renderer.scale.x, fill._renderer.scale.y);
+ }
+ ctx.fill();
+ if (isOffset) {
+ ctx.restore();
+ }
+ }
+ if (!webgl.isHidden.test(stroke)) {
+ isOffset = stroke._renderer && stroke._renderer.offset;
+ if (isOffset) {
+ ctx.save();
+ ctx.translate(
+ -stroke._renderer.offset.x,
+ -stroke._renderer.offset.y
+ );
+ ctx.scale(stroke._renderer.scale.x, stroke._renderer.scale.y);
+ ctx.lineWidth = linewidth / stroke._renderer.scale.x;
+ }
+ ctx.stroke();
+ if (isOffset) {
+ ctx.restore();
+ }
+ }
+ ctx.restore();
+ },
+ getBoundingClientRect: function(vertices, border, rect) {
+ let left = Infinity, right = -Infinity, top = Infinity, bottom = -Infinity, width, height;
+ vertices.forEach(function(v) {
+ const x = v.x, y = v.y, controls = v.controls;
+ let a, b, c, d, cl, cr;
+ top = Math.min(y, top);
+ left = Math.min(x, left);
+ right = Math.max(x, right);
+ bottom = Math.max(y, bottom);
+ if (!v.controls) {
+ return;
+ }
+ cl = controls.left;
+ cr = controls.right;
+ if (!cl || !cr) {
+ return;
+ }
+ a = v._relative ? cl.x + x : cl.x;
+ b = v._relative ? cl.y + y : cl.y;
+ c = v._relative ? cr.x + x : cr.x;
+ d = v._relative ? cr.y + y : cr.y;
+ if (!a || !b || !c || !d) {
+ return;
+ }
+ top = Math.min(b, d, top);
+ left = Math.min(a, c, left);
+ right = Math.max(a, c, right);
+ bottom = Math.max(b, d, bottom);
+ });
+ if (typeof border === "number") {
+ top -= border;
+ left -= border;
+ right += border;
+ bottom += border;
+ }
+ width = right - left;
+ height = bottom - top;
+ rect.top = top;
+ rect.left = left;
+ rect.right = right;
+ rect.bottom = bottom;
+ rect.width = width;
+ rect.height = height;
+ if (!rect.centroid) {
+ rect.centroid = {};
+ }
+ rect.centroid.x = -left;
+ rect.centroid.y = -top;
+ },
+ render: function(gl, programs, forcedParent) {
+ if (!this._visible || !this._opacity) {
+ return this;
+ }
+ this._update();
+ const parent = forcedParent || this.parent;
+ const program = programs[this._renderer.type];
+ const flagParentMatrix = parent._matrix.manual || parent._flagMatrix;
+ const flagMatrix = this._matrix.manual || this._flagMatrix;
+ const parentChanged = this._renderer.parent !== parent;
+ const flagTexture = this._flagVertices || this._flagFill || this._fill instanceof LinearGradient && (this._fill._flagSpread || this._fill._flagStops || this._fill._flagEndPoints) || this._fill instanceof RadialGradient && (this._fill._flagSpread || this._fill._flagStops || this._fill._flagRadius || this._fill._flagCenter || this._fill._flagFocal) || this._fill instanceof Texture && (this._fill._flagLoaded && this._fill.loaded || this._fill._flagImage || this._fill._flagVideo || this._fill._flagRepeat || this._fill._flagOffset || this._fill._flagScale) || this._stroke instanceof LinearGradient && (this._stroke._flagSpread || this._stroke._flagStops || this._stroke._flagEndPoints) || this._stroke instanceof RadialGradient && (this._stroke._flagSpread || this._stroke._flagStops || this._stroke._flagRadius || this._stroke._flagCenter || this._stroke._flagFocal) || this._stroke instanceof Texture && (this._stroke._flagLoaded && this._stroke.loaded || this._stroke._flagImage || this._stroke._flagVideo || this._stroke._flagRepeat || this._stroke._flagOffset || this._fill._flagScale) || this._flagStroke || this._flagLinewidth || this._flagOpacity || parent._flagOpacity || this._flagVisible || this._flagCap || this._flagJoin || this._flagMiter || this._flagScale || this.dashes && this.dashes.length > 0 || !this._renderer.texture;
+ if (flagParentMatrix || flagMatrix || parentChanged) {
+ if (!this._renderer.matrix) {
+ this._renderer.matrix = new NumArray(9);
+ }
+ this._matrix.toTransformArray(true, transformation);
+ multiplyMatrix(transformation, parent._renderer.matrix, this._renderer.matrix);
+ if (!(this._renderer.scale instanceof Vector)) {
+ this._renderer.scale = new Vector();
+ }
+ if (this._scale instanceof Vector) {
+ this._renderer.scale.x = this._scale.x * parent._renderer.scale.x;
+ this._renderer.scale.y = this._scale.y * parent._renderer.scale.y;
+ } else {
+ this._renderer.scale.x = this._scale * parent._renderer.scale.x;
+ this._renderer.scale.y = this._scale * parent._renderer.scale.y;
+ }
+ if (parentChanged) {
+ this._renderer.parent = parent;
+ }
+ }
+ if (this._mask) {
+ gl.clear(gl.STENCIL_BUFFER_BIT);
+ gl.enable(gl.STENCIL_TEST);
+ gl.stencilFunc(gl.ALWAYS, 1, 0);
+ gl.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);
+ gl.colorMask(false, false, false, false);
+ webgl[this._mask._renderer.type].render.call(this._mask, gl, programs, this);
+ gl.stencilFunc(gl.EQUAL, 1, 255);
+ gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
+ gl.colorMask(true, true, true, true);
+ }
+ if (flagTexture) {
+ if (!this._renderer.rect) {
+ this._renderer.rect = {};
+ }
+ this._renderer.opacity = this._opacity * parent._renderer.opacity;
+ webgl.path.getBoundingClientRect(
+ this._renderer.vertices,
+ this._linewidth,
+ this._renderer.rect
+ );
+ webgl.updateTexture.call(webgl, gl, this);
+ } else {
+ if (this._fill && this._fill._update) {
+ this._fill._update();
+ }
+ if (this._stroke && this._stroke._update) {
+ this._stroke._update();
+ }
+ }
+ if (this._clip && !forcedParent || !this._renderer.texture) {
+ return this;
+ }
+ if (programs.current !== program) {
+ gl.useProgram(program);
+ gl.bindBuffer(gl.ARRAY_BUFFER, programs.buffers.position);
+ gl.vertexAttribPointer(program.position, 2, gl.FLOAT, false, 0, 0);
+ gl.enableVertexAttribArray(program.position);
+ gl.bufferData(gl.ARRAY_BUFFER, quad, gl.STATIC_DRAW);
+ if (!programs.resolution.flagged) {
+ gl.uniform2f(
+ gl.getUniformLocation(program, "u_resolution"),
+ programs.resolution.width,
+ programs.resolution.height
+ );
+ }
+ programs.current = program;
+ }
+ if (programs.resolution.flagged) {
+ gl.uniform2f(
+ gl.getUniformLocation(program, "u_resolution"),
+ programs.resolution.width,
+ programs.resolution.height
+ );
+ }
+ gl.bindTexture(gl.TEXTURE_2D, this._renderer.texture);
+ const rect = this._renderer.rect;
+ gl.uniformMatrix3fv(program.matrix, false, this._renderer.matrix);
+ gl.uniform4f(program.rect, rect.left, rect.top, rect.right, rect.bottom);
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
+ if (this._mask) {
+ gl.disable(gl.STENCIL_TEST);
+ }
+ return this.flagReset();
+ }
+ },
+ points: {
+ updateCanvas: function(elem) {
+ let isOffset;
+ const canvas3 = this.canvas;
+ const ctx = this.ctx;
+ const stroke = elem._stroke;
+ const linewidth = elem._linewidth;
+ const fill = elem._fill;
+ const opacity = elem._renderer.opacity || elem._opacity;
+ const dashes = elem.dashes;
+ const size = elem._size;
+ let dimension = size;
+ if (!webgl.isHidden.test(stroke)) {
+ dimension += linewidth;
+ }
+ canvas3.width = getPoT(dimension);
+ canvas3.height = canvas3.width;
+ const aspect = dimension / canvas3.width;
+ const cx = canvas3.width / 2;
+ const cy = canvas3.height / 2;
+ ctx.clearRect(0, 0, canvas3.width, canvas3.height);
+ if (fill) {
+ if (typeof fill === "string") {
+ ctx.fillStyle = fill;
+ } else {
+ webgl[fill._renderer.type].render.call(fill, ctx, elem);
+ ctx.fillStyle = fill._renderer.effect;
+ }
+ }
+ if (stroke) {
+ if (typeof stroke === "string") {
+ ctx.strokeStyle = stroke;
+ } else {
+ webgl[stroke._renderer.type].render.call(stroke, ctx, elem);
+ ctx.strokeStyle = stroke._renderer.effect;
+ }
+ if (linewidth) {
+ ctx.lineWidth = linewidth / aspect;
+ }
+ }
+ if (typeof opacity === "number") {
+ ctx.globalAlpha = opacity;
+ }
+ if (dashes && dashes.length > 0) {
+ ctx.lineDashOffset = dashes.offset || 0;
+ ctx.setLineDash(dashes);
+ }
+ ctx.save();
+ ctx.translate(cx, cy);
+ ctx.scale(webgl.precision, webgl.precision);
+ ctx.beginPath();
+ ctx.arc(0, 0, size / aspect * 0.5, 0, TWO_PI);
+ ctx.restore();
+ if (closed) {
+ ctx.closePath();
+ }
+ if (!webgl.isHidden.test(fill)) {
+ isOffset = fill._renderer && fill._renderer.offset;
+ if (isOffset) {
+ ctx.save();
+ ctx.translate(
+ -fill._renderer.offset.x,
+ -fill._renderer.offset.y
+ );
+ ctx.scale(fill._renderer.scale.x, fill._renderer.scale.y);
+ }
+ ctx.fill();
+ if (isOffset) {
+ ctx.restore();
+ }
+ }
+ if (!webgl.isHidden.test(stroke)) {
+ isOffset = stroke._renderer && stroke._renderer.offset;
+ if (isOffset) {
+ ctx.save();
+ ctx.translate(
+ -stroke._renderer.offset.x,
+ -stroke._renderer.offset.y
+ );
+ ctx.scale(stroke._renderer.scale.x, stroke._renderer.scale.y);
+ ctx.lineWidth = linewidth / stroke._renderer.scale.x;
+ }
+ ctx.stroke();
+ if (isOffset) {
+ ctx.restore();
+ }
+ }
+ },
+ render: function(gl, programs, forcedParent) {
+ if (!this._visible || !this._opacity) {
+ return this;
+ }
+ this._update();
+ let size = this._size;
+ const parent = forcedParent || this.parent;
+ const program = programs[this._renderer.type];
+ const sizeAttenuation = this._sizeAttenuation;
+ const stroke = this._stroke;
+ const linewidth = this._linewidth;
+ const flagParentMatrix = parent._matrix.manual || parent._flagMatrix;
+ const flagMatrix = this._matrix.manual || this._flagMatrix;
+ const parentChanged = this._renderer.parent !== parent;
+ const commands = this._renderer.vertices;
+ const length = this._renderer.collection.length;
+ const flagVertices = this._flagVertices;
+ const flagTexture = this._flagFill || this._fill instanceof LinearGradient && (this._fill._flagSpread || this._fill._flagStops || this._fill._flagEndPoints) || this._fill instanceof RadialGradient && (this._fill._flagSpread || this._fill._flagStops || this._fill._flagRadius || this._fill._flagCenter || this._fill._flagFocal) || this._fill instanceof Texture && (this._fill._flagLoaded && this._fill.loaded || this._fill._flagImage || this._fill._flagVideo || this._fill._flagRepeat || this._fill._flagOffset || this._fill._flagScale) || this._stroke instanceof LinearGradient && (this._stroke._flagSpread || this._stroke._flagStops || this._stroke._flagEndPoints) || this._stroke instanceof RadialGradient && (this._stroke._flagSpread || this._stroke._flagStops || this._stroke._flagRadius || this._stroke._flagCenter || this._stroke._flagFocal) || this._stroke instanceof Texture && (this._stroke._flagLoaded && this._stroke.loaded || this._stroke._flagImage || this._stroke._flagVideo || this._stroke._flagRepeat || this._stroke._flagOffset || this._fill._flagScale) || this._flagStroke || this._flagLinewidth || this._flagOpacity || parent._flagOpacity || this._flagVisible || this._flagScale || this.dashes && this.dashes.length > 0 || !this._renderer.texture;
+ if (flagParentMatrix || flagMatrix || parentChanged) {
+ if (!this._renderer.matrix) {
+ this._renderer.matrix = new NumArray(9);
+ }
+ this._matrix.toTransformArray(true, transformation);
+ multiplyMatrix(transformation, parent._renderer.matrix, this._renderer.matrix);
+ if (!(this._renderer.scale instanceof Vector)) {
+ this._renderer.scale = new Vector();
+ }
+ if (this._scale instanceof Vector) {
+ this._renderer.scale.x = this._scale.x * parent._renderer.scale.x;
+ this._renderer.scale.y = this._scale.y * parent._renderer.scale.y;
+ } else {
+ this._renderer.scale.x = this._scale * parent._renderer.scale.x;
+ this._renderer.scale.y = this._scale * parent._renderer.scale.y;
+ }
+ if (parentChanged) {
+ this._renderer.parent = parent;
+ }
+ }
+ if (flagVertices) {
+ const positionBuffer = this._renderer.positionBuffer;
+ if (positionBuffer) {
+ gl.deleteBuffer(positionBuffer);
+ }
+ this._renderer.positionBuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._renderer.positionBuffer);
+ gl.vertexAttribPointer(program.position, 2, gl.FLOAT, false, 0, 0);
+ gl.enableVertexAttribArray(program.position);
+ gl.bufferData(gl.ARRAY_BUFFER, commands, gl.STATIC_DRAW);
+ }
+ if (flagTexture) {
+ this._renderer.opacity = this._opacity * parent._renderer.opacity;
+ webgl.updateTexture.call(webgl, gl, this);
+ } else {
+ if (this._fill && this._fill._update) {
+ this._fill._update();
+ }
+ if (this._stroke && this._stroke._update) {
+ this._stroke._update();
+ }
+ }
+ if (this._clip && !forcedParent || !this._renderer.texture) {
+ return this;
+ }
+ if (!webgl.isHidden.test(stroke)) {
+ size += linewidth;
+ }
+ size /= webgl.precision;
+ if (sizeAttenuation) {
+ size *= Math.max(this._renderer.scale.x, this._renderer.scale.y);
+ }
+ if (programs.current !== program) {
+ gl.useProgram(program);
+ if (!programs.resolution.flagged) {
+ gl.uniform2f(
+ gl.getUniformLocation(program, "u_resolution"),
+ programs.resolution.width,
+ programs.resolution.height
+ );
+ }
+ programs.current = program;
+ }
+ if (programs.resolution.flagged) {
+ gl.uniform2f(
+ gl.getUniformLocation(program, "u_resolution"),
+ programs.resolution.width,
+ programs.resolution.height
+ );
+ }
+ gl.bindTexture(gl.TEXTURE_2D, this._renderer.texture);
+ gl.uniformMatrix3fv(program.matrix, false, this._renderer.matrix);
+ gl.uniform1f(program.size, size * programs.resolution.ratio);
+ gl.drawArrays(gl.POINTS, 0, length);
+ return this.flagReset();
+ }
+ },
+ text: {
+ updateCanvas: function(elem) {
+ const canvas3 = this.canvas;
+ const ctx = this.ctx;
+ const scale = elem._renderer.scale;
+ const stroke = elem._stroke;
+ const linewidth = elem._linewidth * scale;
+ const fill = elem._fill;
+ const opacity = elem._renderer.opacity || elem._opacity;
+ const dashes = elem.dashes;
+ const decoration = elem._decoration;
+ canvas3.width = Math.max(Math.ceil(elem._renderer.rect.width * scale.x), 1);
+ canvas3.height = Math.max(Math.ceil(elem._renderer.rect.height * scale.y), 1);
+ const centroid = elem._renderer.rect.centroid;
+ const cx = centroid.x;
+ const cy = centroid.y;
+ let a, b, c, d, e, sx, sy, x1, y1, x2, y2;
+ const isOffset = fill._renderer && fill._renderer.offset && stroke._renderer && stroke._renderer.offset;
+ ctx.clearRect(0, 0, canvas3.width, canvas3.height);
+ if (!isOffset) {
+ ctx.font = [elem._style, elem._weight, elem._size + "px/" + elem._leading + "px", elem._family].join(" ");
+ }
+ ctx.textAlign = "center";
+ ctx.textBaseline = "middle";
+ if (fill) {
+ if (typeof fill === "string") {
+ ctx.fillStyle = fill;
+ } else {
+ webgl[fill._renderer.type].render.call(fill, ctx, elem);
+ ctx.fillStyle = fill._renderer.effect;
+ }
+ }
+ if (stroke) {
+ if (typeof stroke === "string") {
+ ctx.strokeStyle = stroke;
+ } else {
+ webgl[stroke._renderer.type].render.call(stroke, ctx, elem);
+ ctx.strokeStyle = stroke._renderer.effect;
+ }
+ if (linewidth) {
+ ctx.lineWidth = linewidth;
+ }
+ }
+ if (typeof opacity === "number") {
+ ctx.globalAlpha = opacity;
+ }
+ if (dashes && dashes.length > 0) {
+ ctx.lineDashOffset = dashes.offset || 0;
+ ctx.setLineDash(dashes);
+ }
+ ctx.save();
+ ctx.scale(scale.x, scale.y);
+ ctx.translate(cx, cy);
+ if (!webgl.isHidden.test(fill)) {
+ if (fill._renderer && fill._renderer.offset) {
+ sx = fill._renderer.scale.x;
+ sy = fill._renderer.scale.y;
+ ctx.save();
+ ctx.translate(
+ -fill._renderer.offset.x,
+ -fill._renderer.offset.y
+ );
+ ctx.scale(sx, sy);
+ a = elem._size / fill._renderer.scale.y;
+ b = elem._leading / fill._renderer.scale.y;
+ ctx.font = [
+ elem._style,
+ elem._weight,
+ a + "px/",
+ b + "px",
+ elem._family
+ ].join(" ");
+ c = fill._renderer.offset.x / fill._renderer.scale.x;
+ d = fill._renderer.offset.y / fill._renderer.scale.y;
+ ctx.fillText(elem.value, c, d);
+ ctx.restore();
+ } else {
+ ctx.fillText(elem.value, 0, 0);
+ }
+ }
+ if (!webgl.isHidden.test(stroke)) {
+ if (stroke._renderer && stroke._renderer.offset) {
+ sx = stroke._renderer.scale.x;
+ sy = stroke._renderer.scale.y;
+ ctx.save();
+ ctx.translate(
+ -stroke._renderer.offset.x,
+ -stroke._renderer.offset.y
+ );
+ ctx.scale(sx, sy);
+ a = elem._size / stroke._renderer.scale.y;
+ b = elem._leading / stroke._renderer.scale.y;
+ ctx.font = [
+ elem._style,
+ elem._weight,
+ a + "px/",
+ b + "px",
+ elem._family
+ ].join(" ");
+ c = stroke._renderer.offset.x / stroke._renderer.scale.x;
+ d = stroke._renderer.offset.y / stroke._renderer.scale.y;
+ e = linewidth / stroke._renderer.scale.x;
+ ctx.lineWidth = e;
+ ctx.strokeText(elem.value, c, d);
+ ctx.restore();
+ } else {
+ ctx.strokeText(elem.value, 0, 0);
+ }
+ }
+ if (/(underline|strikethrough)/i.test(decoration)) {
+ const metrics = ctx.measureText(elem.value);
+ switch (decoration) {
+ case "underline":
+ y1 = metrics.actualBoundingBoxAscent;
+ y2 = metrics.actualBoundingBoxAscent;
+ break;
+ case "strikethrough":
+ y1 = 0;
+ y2 = 0;
+ break;
+ }
+ x1 = -metrics.width / 2;
+ x2 = metrics.width / 2;
+ ctx.lineWidth = Math.max(Math.floor(elem._size / 15), 1);
+ ctx.strokeStyle = ctx.fillStyle;
+ ctx.beginPath();
+ ctx.moveTo(x1, y1);
+ ctx.lineTo(x2, y2);
+ ctx.stroke();
+ }
+ ctx.restore();
+ },
+ getBoundingClientRect: function(elem, rect) {
+ const ctx = webgl.ctx;
+ ctx.font = [elem._style, elem._weight, elem._size + "px/" + elem._leading + "px", elem._family].join(" ");
+ ctx.textAlign = "center";
+ ctx.textBaseline = elem._baseline;
+ let width = ctx.measureText(elem._value).width * 1.25;
+ let height = Math.max(elem._size, elem._leading) * 1.25;
+ if (this._linewidth && !webgl.isHidden.test(this._stroke)) {
+ width += this._linewidth * 2;
+ height += this._linewidth * 2;
+ }
+ const w = width / 2;
+ const h = height / 2;
+ switch (webgl.alignments[elem._alignment] || elem._alignment) {
+ case webgl.alignments.left:
+ rect.left = 0;
+ rect.right = width;
+ break;
+ case webgl.alignments.right:
+ rect.left = -width;
+ rect.right = 0;
+ break;
+ default:
+ rect.left = -w;
+ rect.right = w;
+ }
+ switch (elem._baseline) {
+ case "bottom":
+ rect.top = -height;
+ rect.bottom = 0;
+ break;
+ case "top":
+ rect.top = 0;
+ rect.bottom = height;
+ break;
+ default:
+ rect.top = -h;
+ rect.bottom = h;
+ }
+ rect.width = width;
+ rect.height = height;
+ if (!rect.centroid) {
+ rect.centroid = {};
+ }
+ rect.centroid.x = w;
+ rect.centroid.y = h;
+ },
+ render: function(gl, programs, forcedParent) {
+ if (!this._visible || !this._opacity) {
+ return this;
+ }
+ this._update();
+ const parent = forcedParent || this.parent;
+ const program = programs[this._renderer.type];
+ const flagParentMatrix = parent._matrix.manual || parent._flagMatrix;
+ const flagMatrix = this._matrix.manual || this._flagMatrix;
+ const parentChanged = this._renderer.parent !== parent;
+ const flagTexture = this._flagVertices || this._flagFill || this._fill instanceof LinearGradient && (this._fill._flagSpread || this._fill._flagStops || this._fill._flagEndPoints) || this._fill instanceof RadialGradient && (this._fill._flagSpread || this._fill._flagStops || this._fill._flagRadius || this._fill._flagCenter || this._fill._flagFocal) || this._fill instanceof Texture && (this._fill._flagLoaded && this._fill.loaded || this._fill._flagImage || this._fill._flagVideo || this._fill._flagRepeat || this._fill._flagOffset || this._fill._flagScale) || this._stroke instanceof LinearGradient && (this._stroke._flagSpread || this._stroke._flagStops || this._stroke._flagEndPoints) || this._stroke instanceof RadialGradient && (this._stroke._flagSpread || this._stroke._flagStops || this._stroke._flagRadius || this._stroke._flagCenter || this._stroke._flagFocal) || this._stroke instanceof Texture && (this._stroke._flagLoaded && this._stroke.loaded || this._stroke._flagImage || this._stroke._flagVideo || this._stroke._flagRepeat || this._stroke._flagOffset || this._fill._flagScale) || this._flagStroke || this._flagLinewidth || this._flagOpacity || parent._flagOpacity || this._flagVisible || this._flagScale || this._flagValue || this._flagFamily || this._flagSize || this._flagLeading || this._flagAlignment || this._flagBaseline || this._flagStyle || this._flagWeight || this._flagDecoration || this.dashes && this.dashes.length > 0 || !this._renderer.texture;
+ if (flagParentMatrix || flagMatrix || parentChanged) {
+ if (!this._renderer.matrix) {
+ this._renderer.matrix = new NumArray(9);
+ }
+ this._matrix.toTransformArray(true, transformation);
+ multiplyMatrix(transformation, parent._renderer.matrix, this._renderer.matrix);
+ if (!(this._renderer.scale instanceof Vector)) {
+ this._renderer.scale = new Vector();
+ }
+ if (this._scale instanceof Vector) {
+ this._renderer.scale.x = this._scale.x * parent._renderer.scale.x;
+ this._renderer.scale.y = this._scale.y * parent._renderer.scale.y;
+ } else {
+ this._renderer.scale.x = this._scale * parent._renderer.scale.x;
+ this._renderer.scale.y = this._scale * parent._renderer.scale.y;
+ }
+ if (parentChanged) {
+ this._renderer.parent = parent;
+ }
+ }
+ if (this._mask) {
+ gl.clear(gl.STENCIL_BUFFER_BIT);
+ gl.enable(gl.STENCIL_TEST);
+ gl.stencilFunc(gl.ALWAYS, 1, 0);
+ gl.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);
+ gl.colorMask(false, false, false, false);
+ webgl[this._mask._renderer.type].render.call(this._mask, gl, programs, this);
+ gl.stencilFunc(gl.EQUAL, 1, 255);
+ gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
+ gl.colorMask(true, true, true, true);
+ }
+ if (flagTexture) {
+ if (!this._renderer.rect) {
+ this._renderer.rect = {};
+ }
+ this._renderer.opacity = this._opacity * parent._renderer.opacity;
+ webgl.text.getBoundingClientRect(this, this._renderer.rect);
+ webgl.updateTexture.call(webgl, gl, this);
+ } else {
+ if (this._fill && this._fill._update) {
+ this._fill._update();
+ }
+ if (this._stroke && this._stroke._update) {
+ this._stroke._update();
+ }
+ }
+ if (this._clip && !forcedParent || !this._renderer.texture) {
+ return this;
+ }
+ if (programs.current !== program) {
+ gl.useProgram(program);
+ gl.bindBuffer(gl.ARRAY_BUFFER, programs.buffers.position);
+ gl.vertexAttribPointer(program.position, 2, gl.FLOAT, false, 0, 0);
+ gl.enableVertexAttribArray(program.position);
+ gl.bufferData(gl.ARRAY_BUFFER, quad, gl.STATIC_DRAW);
+ if (!programs.resolution.flagged) {
+ gl.uniform2f(
+ gl.getUniformLocation(program, "u_resolution"),
+ programs.resolution.width,
+ programs.resolution.height
+ );
+ }
+ programs.current = program;
+ }
+ if (programs.resolution.flagged) {
+ gl.uniform2f(
+ gl.getUniformLocation(program, "u_resolution"),
+ programs.resolution.width,
+ programs.resolution.height
+ );
+ }
+ gl.bindTexture(gl.TEXTURE_2D, this._renderer.texture);
+ const rect = this._renderer.rect;
+ gl.uniformMatrix3fv(program.matrix, false, this._renderer.matrix);
+ gl.uniform4f(program.rect, rect.left, rect.top, rect.right, rect.bottom);
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
+ if (this._mask) {
+ gl.disable(gl.STENCIL_TEST);
+ }
+ return this.flagReset();
+ }
+ },
+ "linear-gradient": {
+ render: function(ctx, parent) {
+ if (!ctx.canvas.getContext("2d") || !parent) {
+ return;
+ }
+ this._update();
+ if (!this._renderer.effect || this._flagEndPoints || this._flagStops || this._flagUnits) {
+ let rect;
+ let lx = this.left._x;
+ let ly = this.left._y;
+ let rx = this.right._x;
+ let ry = this.right._y;
+ if (/objectBoundingBox/i.test(this._units)) {
+ rect = parent.getBoundingClientRect(true);
+ lx = (lx - 0.5) * rect.width;
+ ly = (ly - 0.5) * rect.height;
+ rx = (rx - 0.5) * rect.width;
+ ry = (ry - 0.5) * rect.height;
+ }
+ this._renderer.effect = ctx.createLinearGradient(lx, ly, rx, ry);
+ for (let i = 0; i < this.stops.length; i++) {
+ const stop = this.stops[i];
+ this._renderer.effect.addColorStop(stop._offset, stop._color);
+ }
+ }
+ return this.flagReset();
+ }
+ },
+ "radial-gradient": {
+ render: function(ctx, parent) {
+ if (!ctx.canvas.getContext("2d") || !parent) {
+ return;
+ }
+ this._update();
+ if (!this._renderer.effect || this._flagCenter || this._flagFocal || this._flagRadius || this._flagStops || this._flagUnits) {
+ let rect;
+ let cx = this.center._x;
+ let cy = this.center._y;
+ let fx = this.focal._x;
+ let fy = this.focal._y;
+ let radius = this._radius;
+ if (/objectBoundingBox/i.test(this._units)) {
+ rect = parent.getBoundingClientRect(true);
+ cx = cx * rect.width * 0.5;
+ cy = cy * rect.height * 0.5;
+ fx = fx * rect.width * 0.5;
+ fy = fy * rect.height * 0.5;
+ radius *= Math.min(rect.width, rect.height) * 0.5;
+ }
+ this._renderer.effect = ctx.createRadialGradient(
+ cx,
+ cy,
+ 0,
+ fx,
+ fy,
+ radius
+ );
+ for (let i = 0; i < this.stops.length; i++) {
+ const stop = this.stops[i];
+ this._renderer.effect.addColorStop(stop._offset, stop._color);
+ }
+ }
+ return this.flagReset();
+ }
+ },
+ texture: {
+ render: function(ctx, elem) {
+ if (!ctx.canvas.getContext("2d")) {
+ return;
+ }
+ this._update();
+ const image = this.image;
+ if ((this._flagLoaded || this._flagImage || this._flagVideo || this._flagRepeat) && this.loaded) {
+ this._renderer.effect = ctx.createPattern(image, this._repeat);
+ } else if (!this._renderer.effect) {
+ return this.flagReset();
+ }
+ if (this._flagOffset || this._flagLoaded || this._flagScale) {
+ if (!(this._renderer.offset instanceof Vector)) {
+ this._renderer.offset = new Vector();
+ }
+ this._renderer.offset.x = -this._offset.x;
+ this._renderer.offset.y = -this._offset.y;
+ if (image) {
+ this._renderer.offset.x += image.width / 2;
+ this._renderer.offset.y += image.height / 2;
+ if (this._scale instanceof Vector) {
+ this._renderer.offset.x *= this._scale.x;
+ this._renderer.offset.y *= this._scale.y;
+ } else {
+ this._renderer.offset.x *= this._scale;
+ this._renderer.offset.y *= this._scale;
+ }
+ }
+ }
+ if (this._flagScale || this._flagLoaded) {
+ if (!(this._renderer.scale instanceof Vector)) {
+ this._renderer.scale = new Vector();
+ }
+ if (this._scale instanceof Vector) {
+ this._renderer.scale.copy(this._scale);
+ } else {
+ this._renderer.scale.set(this._scale, this._scale);
+ }
+ }
+ return this.flagReset();
+ }
+ },
+ updateTexture: function(gl, elem) {
+ this[elem._renderer.type].updateCanvas.call(webgl, elem);
+ if (this.canvas.width <= 0 || this.canvas.height <= 0) {
+ if (elem._renderer.texture) {
+ gl.deleteTexture(elem._renderer.texture);
+ }
+ delete elem._renderer.texture;
+ return;
+ }
+ if (!elem._renderer.texture) {
+ elem._renderer.texture = gl.createTexture();
+ }
+ gl.bindTexture(gl.TEXTURE_2D, elem._renderer.texture);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this.canvas);
+ },
+ program: {
+ create: function(gl, shaders2) {
+ let program, linked, error;
+ program = gl.createProgram();
+ _.each(shaders2, function(s) {
+ gl.attachShader(program, s);
+ });
+ gl.linkProgram(program);
+ linked = gl.getProgramParameter(program, gl.LINK_STATUS);
+ if (!linked) {
+ error = gl.getProgramInfoLog(program);
+ gl.deleteProgram(program);
+ throw new TwoError("unable to link program: " + error);
+ }
+ return program;
+ }
+ },
+ TextureRegistry: new Registry()
+ };
+ webgl.ctx = webgl.canvas.getContext("2d");
+ var Renderer3 = class extends Events {
+ constructor(params) {
+ super();
+ let gl, program, vs, fs;
+ this.domElement = params.domElement || document.createElement("canvas");
+ if (typeof params.offscreenElement !== "undefined") {
+ webgl.canvas = params.offscreenElement;
+ webgl.ctx = webgl.canvas.getContext("2d");
+ }
+ this.scene = new Group();
+ this.scene.parent = this;
+ this._renderer = {
+ type: "renderer",
+ matrix: new NumArray(identity),
+ scale: 1,
+ opacity: 1
+ };
+ this._flagMatrix = true;
+ params = _.defaults(params || {}, {
+ antialias: false,
+ alpha: true,
+ premultipliedAlpha: true,
+ stencil: true,
+ preserveDrawingBuffer: true,
+ overdraw: false
+ });
+ this.overdraw = params.overdraw;
+ gl = this.ctx = this.domElement.getContext("webgl", params) || this.domElement.getContext("experimental-webgl", params);
+ if (!this.ctx) {
+ throw new TwoError(
+ "unable to create a webgl context. Try using another renderer."
+ );
+ }
+ vs = shaders.create(gl, shaders.path.vertex, shaders.types.vertex);
+ fs = shaders.create(gl, shaders.path.fragment, shaders.types.fragment);
+ this.programs = {
+ current: null,
+ buffers: {
+ position: gl.createBuffer()
+ },
+ resolution: {
+ width: 0,
+ height: 0,
+ ratio: 1,
+ flagged: false
+ }
+ };
+ program = this.programs.path = webgl.program.create(gl, [vs, fs]);
+ this.programs.text = this.programs.path;
+ program.position = gl.getAttribLocation(program, "a_position");
+ program.matrix = gl.getUniformLocation(program, "u_matrix");
+ program.rect = gl.getUniformLocation(program, "u_rect");
+ const positionBuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
+ gl.vertexAttribPointer(program.position, 2, gl.FLOAT, false, 0, 0);
+ gl.enableVertexAttribArray(program.position);
+ gl.bufferData(gl.ARRAY_BUFFER, quad, gl.STATIC_DRAW);
+ vs = shaders.create(gl, shaders.points.vertex, shaders.types.vertex);
+ fs = shaders.create(gl, shaders.points.fragment, shaders.types.fragment);
+ program = this.programs.points = webgl.program.create(gl, [vs, fs]);
+ program.position = gl.getAttribLocation(program, "a_position");
+ program.matrix = gl.getUniformLocation(program, "u_matrix");
+ program.size = gl.getUniformLocation(program, "u_size");
+ gl.enable(gl.BLEND);
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
+ gl.blendEquation(gl.FUNC_ADD);
+ gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
+ }
+ setSize(width, height, ratio) {
+ let w, h;
+ const ctx = this.ctx;
+ this.width = width;
+ this.height = height;
+ this.ratio = typeof ratio === "undefined" ? getRatio(ctx) : ratio;
+ this.domElement.width = width * this.ratio;
+ this.domElement.height = height * this.ratio;
+ if (_.isObject(this.domElement.style)) {
+ _.extend(this.domElement.style, {
+ width: width + "px",
+ height: height + "px"
+ });
+ }
+ this._renderer.matrix[0] = this._renderer.matrix[4] = this._renderer.scale = this.ratio;
+ this._flagMatrix = true;
+ w = width * this.ratio;
+ h = height * this.ratio;
+ ctx.viewport(0, 0, w, h);
+ this.programs.resolution.width = w;
+ this.programs.resolution.height = h;
+ this.programs.resolution.ratio = this.ratio;
+ this.programs.resolution.flagged = true;
+ return this.trigger(Events.Types.resize, width, height, ratio);
+ }
+ render() {
+ const gl = this.ctx;
+ if (!this.overdraw) {
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ }
+ webgl.group.render.call(this.scene, gl, this.programs);
+ this._flagMatrix = false;
+ this.programs.resolution.flagged = true;
+ return this;
+ }
+ };
+ __publicField(Renderer3, "Utils", webgl);
+
+ // src/two.js
+ var Utils = _.extend({
+ Error: TwoError,
+ getRatio,
+ read,
+ xhr
+ }, _, CanvasShim, curves_exports, math_exports);
+ var _Two = class {
+ _events = new Events();
+ get _bound() {
+ return this._events._bound;
+ }
+ set _bound(v) {
+ this._events._bound = v;
+ }
+ addEventListener() {
+ return this._events.addEventListener.apply(this, arguments);
+ }
+ on() {
+ return this._events.addEventListener.apply(this, arguments);
+ }
+ bind() {
+ return this._events.addEventListener.apply(this, arguments);
+ }
+ removeEventListener() {
+ return this._events.removeEventListener.apply(this, arguments);
+ }
+ off() {
+ return this._events.removeEventListener.apply(this, arguments);
+ }
+ unbind() {
+ return this._events.removeEventListener.apply(this, arguments);
+ }
+ dispatchEvent() {
+ return this._events.dispatchEvent.apply(this, arguments);
+ }
+ trigger() {
+ return this._events.dispatchEvent.apply(this, arguments);
+ }
+ listen() {
+ return this._events.listen.apply(this, arguments);
+ }
+ ignore() {
+ return this._events.ignore.apply(this, arguments);
+ }
+ type = "";
+ renderer = null;
+ scene = null;
+ width = 0;
+ height = 0;
+ frameCount = 0;
+ timeDelta = 0;
+ playing = false;
+ constructor(options) {
+ const params = _.defaults(options || {}, {
+ fullscreen: false,
+ fitted: false,
+ width: 640,
+ height: 480,
+ type: _Two.Types.svg,
+ autostart: false
+ });
+ _.each(params, function(v, k) {
+ if (/fullscreen/i.test(k) || /autostart/i.test(k)) {
+ return;
+ }
+ this[k] = v;
+ }, this);
+ if (_.isElement(params.domElement)) {
+ const tagName = params.domElement.tagName.toLowerCase();
+ if (!/^(CanvasRenderer-canvas|WebGLRenderer-canvas|SVGRenderer-svg)$/.test(this.type + "-" + tagName)) {
+ this.type = _Two.Types[tagName];
+ }
+ }
+ this.renderer = new _Two[this.type](this);
+ this.setPlaying(params.autostart);
+ this.frameCount = 0;
+ if (params.fullscreen) {
+ this.fit = fitToWindow.bind(this);
+ this.fit.domElement = window;
+ this.fit.attached = true;
+ _.extend(document.body.style, {
+ overflow: "hidden",
+ margin: 0,
+ padding: 0,
+ top: 0,
+ left: 0,
+ right: 0,
+ bottom: 0,
+ position: "fixed"
+ });
+ _.extend(this.renderer.domElement.style, {
+ display: "block",
+ top: 0,
+ left: 0,
+ right: 0,
+ bottom: 0,
+ position: "fixed"
+ });
+ dom.bind(this.fit.domElement, "resize", this.fit);
+ this.fit();
+ } else if (params.fitted) {
+ this.fit = fitToParent.bind(this);
+ _.extend(this.renderer.domElement.style, {
+ display: "block"
+ });
+ } else if (!_.isElement(params.domElement)) {
+ this.renderer.setSize(params.width, params.height, this.ratio);
+ this.width = params.width;
+ this.height = params.height;
+ }
+ this.renderer.bind(Events.Types.resize, updateDimensions.bind(this));
+ this.scene = this.renderer.scene;
+ _Two.Instances.push(this);
+ if (params.autostart) {
+ raf.init();
+ }
+ }
+ appendTo(elem) {
+ elem.appendChild(this.renderer.domElement);
+ if (this.fit) {
+ if (this.fit.domElement !== window) {
+ this.fit.domElement = elem;
+ this.fit.attached = false;
+ }
+ this.update();
+ }
+ return this;
+ }
+ play() {
+ this.playing = true;
+ raf.init();
+ return this.trigger(Events.Types.play);
+ }
+ pause() {
+ this.playing = false;
+ return this.trigger(Events.Types.pause);
+ }
+ setPlaying(p) {
+ this.playing = p;
+ }
+ release(obj) {
+ let i, v, child;
+ if (!_.isObject(obj)) {
+ return this.release(this.scene);
+ }
+ if (typeof obj.unbind === "function") {
+ obj.unbind();
+ }
+ if (obj.vertices) {
+ if (typeof obj.vertices.unbind === "function") {
+ obj.vertices.unbind();
+ }
+ for (i = 0; i < obj.vertices.length; i++) {
+ v = obj.vertices[i];
+ if (typeof v.unbind === "function") {
+ v.unbind();
+ }
+ if (v.controls) {
+ if (v.controls.left && typeof v.controls.left.unbind === "function") {
+ v.controls.left.unbind();
+ }
+ if (v.controls.right && typeof v.controls.right.unbind === "function") {
+ v.controls.right.unbind();
+ }
+ }
+ }
+ }
+ if (obj.children) {
+ for (i = 0; i < obj.children.length; i++) {
+ child = obj.children[i];
+ this.release(child);
+ }
+ if (typeof obj.children.unbind === "function") {
+ obj.children.unbind();
+ }
+ }
+ return obj;
+ }
+ update() {
+ const animated = !!this._lastFrame;
+ const now = _.performance.now();
+ if (animated) {
+ this.timeDelta = parseFloat((now - this._lastFrame).toFixed(3));
+ }
+ this._lastFrame = now;
+ if (this.fit && this.fit.domElement && !this.fit.attached) {
+ dom.bind(this.fit.domElement, "resize", this.fit);
+ this.fit.attached = true;
+ this.fit();
+ }
+ const width = this.width;
+ const height = this.height;
+ const renderer = this.renderer;
+ if (width !== renderer.width || height !== renderer.height) {
+ renderer.setSize(width, height, this.ratio);
+ }
+ this.trigger(Events.Types.update, this.frameCount, this.timeDelta);
+ return this.render();
+ }
+ render() {
+ this.renderer.render();
+ return this.trigger(Events.Types.render, this.frameCount++);
+ }
+ add(objects) {
+ if (!(objects instanceof Array)) {
+ objects = Array.prototype.slice.call(arguments);
+ }
+ this.scene.add(objects);
+ return this;
+ }
+ remove(objects) {
+ if (!(objects instanceof Array)) {
+ objects = Array.prototype.slice.call(arguments);
+ }
+ this.scene.remove(objects);
+ return this;
+ }
+ clear() {
+ this.scene.remove(this.scene.children);
+ return this;
+ }
+ makeLine(x1, y1, x2, y2) {
+ const line = new Line(x1, y1, x2, y2);
+ this.scene.add(line);
+ return line;
+ }
+ makeArrow(x1, y1, x2, y2, size) {
+ const headlen = typeof size === "number" ? size : 10;
+ const angle = Math.atan2(y2 - y1, x2 - x1);
+ const vertices = [
+ new Anchor(x1, y1, void 0, void 0, void 0, void 0, Commands.move),
+ new Anchor(x2, y2, void 0, void 0, void 0, void 0, Commands.line),
+ new Anchor(
+ x2 - headlen * Math.cos(angle - Math.PI / 4),
+ y2 - headlen * Math.sin(angle - Math.PI / 4),
+ void 0,
+ void 0,
+ void 0,
+ void 0,
+ Commands.line
+ ),
+ new Anchor(x2, y2, void 0, void 0, void 0, void 0, Commands.move),
+ new Anchor(
+ x2 - headlen * Math.cos(angle + Math.PI / 4),
+ y2 - headlen * Math.sin(angle + Math.PI / 4),
+ void 0,
+ void 0,
+ void 0,
+ void 0,
+ Commands.line
+ )
+ ];
+ const path = new Path(vertices, false, false, true);
+ path.noFill();
+ path.cap = "round";
+ path.join = "round";
+ this.scene.add(path);
+ return path;
+ }
+ makeRectangle(x, y, width, height) {
+ const rect = new Rectangle(x, y, width, height);
+ this.scene.add(rect);
+ return rect;
+ }
+ makeRoundedRectangle(x, y, width, height, sides) {
+ const rect = new RoundedRectangle(x, y, width, height, sides);
+ this.scene.add(rect);
+ return rect;
+ }
+ makeCircle(x, y, radius, resolution) {
+ const circle = new Circle(x, y, radius, resolution);
+ this.scene.add(circle);
+ return circle;
+ }
+ makeEllipse(x, y, rx, ry, resolution) {
+ const ellipse = new Ellipse(x, y, rx, ry, resolution);
+ this.scene.add(ellipse);
+ return ellipse;
+ }
+ makeStar(x, y, outerRadius, innerRadius, sides) {
+ const star = new Star(x, y, outerRadius, innerRadius, sides);
+ this.scene.add(star);
+ return star;
+ }
+ makeCurve(points) {
+ const l = arguments.length;
+ if (!Array.isArray(points)) {
+ points = [];
+ for (let i = 0; i < l; i += 2) {
+ const x = arguments[i];
+ if (typeof x !== "number") {
+ break;
+ }
+ const y = arguments[i + 1];
+ points.push(new Anchor(x, y));
+ }
+ }
+ const last = arguments[l - 1];
+ const curve = new Path(points, !(typeof last === "boolean" ? last : void 0), true);
+ const rect = curve.getBoundingClientRect();
+ curve.center().translation.set(rect.left + rect.width / 2, rect.top + rect.height / 2);
+ this.scene.add(curve);
+ return curve;
+ }
+ makePolygon(x, y, radius, sides) {
+ const poly = new Polygon(x, y, radius, sides);
+ this.scene.add(poly);
+ return poly;
+ }
+ makeArcSegment(x, y, innerRadius, outerRadius, startAngle, endAngle, resolution) {
+ const arcSegment = new ArcSegment(
+ x,
+ y,
+ innerRadius,
+ outerRadius,
+ startAngle,
+ endAngle,
+ resolution
+ );
+ this.scene.add(arcSegment);
+ return arcSegment;
+ }
+ makePoints(p) {
+ const l = arguments.length;
+ let vertices = p;
+ if (!Array.isArray(p)) {
+ vertices = [];
+ for (let i = 0; i < l; i += 2) {
+ const x = arguments[i];
+ if (typeof x !== "number") {
+ break;
+ }
+ const y = arguments[i + 1];
+ vertices.push(new Vector(x, y));
+ }
+ }
+ const points = new Points(vertices);
+ this.scene.add(points);
+ return points;
+ }
+ makePath(p) {
+ const l = arguments.length;
+ let points = p;
+ if (!Array.isArray(p)) {
+ points = [];
+ for (let i = 0; i < l; i += 2) {
+ const x = arguments[i];
+ if (typeof x !== "number") {
+ break;
+ }
+ const y = arguments[i + 1];
+ points.push(new Anchor(x, y));
+ }
+ }
+ const last = arguments[l - 1];
+ const path = new Path(points, !(typeof last === "boolean" ? last : void 0));
+ const rect = path.getBoundingClientRect();
+ if (typeof rect.top === "number" && typeof rect.left === "number" && typeof rect.right === "number" && typeof rect.bottom === "number") {
+ path.center().translation.set(rect.left + rect.width / 2, rect.top + rect.height / 2);
+ }
+ this.scene.add(path);
+ return path;
+ }
+ makeText(message, x, y, styles) {
+ const text = new Text(message, x, y, styles);
+ this.add(text);
+ return text;
+ }
+ makeLinearGradient(x1, y1, x2, y2) {
+ const stops = Array.prototype.slice.call(arguments, 4);
+ const gradient = new LinearGradient(x1, y1, x2, y2, stops);
+ this.add(gradient);
+ return gradient;
+ }
+ makeRadialGradient(x1, y1, radius) {
+ const stops = Array.prototype.slice.call(arguments, 3);
+ const gradient = new RadialGradient(x1, y1, radius, stops);
+ this.add(gradient);
+ return gradient;
+ }
+ makeSprite(pathOrTexture, x, y, columns, rows, frameRate, autostart) {
+ const sprite = new Sprite(pathOrTexture, x, y, columns, rows, frameRate);
+ if (autostart) {
+ sprite.play();
+ }
+ this.add(sprite);
+ return sprite;
+ }
+ makeImageSequence(pathsOrTextures, x, y, frameRate, autostart) {
+ const imageSequence = new ImageSequence(pathsOrTextures, x, y, frameRate);
+ if (autostart) {
+ imageSequence.play();
+ }
+ this.add(imageSequence);
+ return imageSequence;
+ }
+ makeTexture(pathOrSource, callback) {
+ const texture = new Texture(pathOrSource, callback);
+ return texture;
+ }
+ makeGroup(objects) {
+ if (!(objects instanceof Array)) {
+ objects = Array.prototype.slice.call(arguments);
+ }
+ const group = new Group();
+ this.scene.add(group);
+ group.add(objects);
+ return group;
+ }
+ interpret(svg2, shallow, add) {
+ const tag = svg2.tagName.toLowerCase();
+ add = typeof add !== "undefined" ? add : true;
+ if (!(tag in read)) {
+ return null;
+ }
+ const node = read[tag].call(this, svg2);
+ if (add) {
+ this.add(shallow && node instanceof Group ? node.children : node);
+ } else if (node.parent) {
+ node.remove();
+ }
+ return node;
+ }
+ load(pathOrSVGContent, callback) {
+ const group = new Group();
+ let elem, i, child;
+ const attach = function(data) {
+ dom.temp.innerHTML = data;
+ for (i = 0; i < dom.temp.children.length; i++) {
+ elem = dom.temp.children[i];
+ child = this.interpret(elem, false, false);
+ if (child !== null) {
+ group.add(child);
+ }
+ }
+ if (typeof callback === "function") {
+ const svg2 = dom.temp.children.length <= 1 ? dom.temp.children[0] : dom.temp.children;
+ callback(group, svg2);
+ }
+ }.bind(this);
+ if (/\.svg$/i.test(pathOrSVGContent)) {
+ xhr(pathOrSVGContent, attach);
+ return group;
+ }
+ attach(pathOrSVGContent);
+ return group;
+ }
+ };
+ var Two = _Two;
+ __publicField(Two, "nextFrameID", Constants.nextFrameID);
+ __publicField(Two, "Types", Constants.Types);
+ __publicField(Two, "Version", Constants.Version);
+ __publicField(Two, "PublishDate", Constants.PublishDate);
+ __publicField(Two, "Identifier", Constants.Identifier);
+ __publicField(Two, "Resolution", Constants.Resolution);
+ __publicField(Two, "AutoCalculateImportedMatrices", Constants.AutoCalculateImportedMatrices);
+ __publicField(Two, "Instances", Constants.Instances);
+ __publicField(Two, "uniqueId", Constants.uniqueId);
+ __publicField(Two, "Anchor", Anchor);
+ __publicField(Two, "Collection", Collection);
+ __publicField(Two, "Events", Events);
+ __publicField(Two, "Group", Group);
+ __publicField(Two, "Matrix", Matrix2);
+ __publicField(Two, "Path", Path);
+ __publicField(Two, "Registry", Registry);
+ __publicField(Two, "Shape", Shape);
+ __publicField(Two, "Text", Text);
+ __publicField(Two, "Vector", Vector);
+ __publicField(Two, "Gradient", Gradient);
+ __publicField(Two, "ImageSequence", ImageSequence);
+ __publicField(Two, "LinearGradient", LinearGradient);
+ __publicField(Two, "RadialGradient", RadialGradient);
+ __publicField(Two, "Sprite", Sprite);
+ __publicField(Two, "Stop", Stop);
+ __publicField(Two, "Texture", Texture);
+ __publicField(Two, "ArcSegment", ArcSegment);
+ __publicField(Two, "Circle", Circle);
+ __publicField(Two, "Ellipse", Ellipse);
+ __publicField(Two, "Line", Line);
+ __publicField(Two, "Points", Points);
+ __publicField(Two, "Polygon", Polygon);
+ __publicField(Two, "Rectangle", Rectangle);
+ __publicField(Two, "RoundedRectangle", RoundedRectangle);
+ __publicField(Two, "Star", Star);
+ __publicField(Two, "CanvasRenderer", Renderer);
+ __publicField(Two, "SVGRenderer", Renderer2);
+ __publicField(Two, "WebGLRenderer", Renderer3);
+ __publicField(Two, "Commands", Commands);
+ __publicField(Two, "Utils", Utils);
+ function fitToWindow() {
+ const wr = document.body.getBoundingClientRect();
+ const width = this.width = wr.width;
+ const height = this.height = wr.height;
+ this.renderer.setSize(width, height, this.ratio);
+ }
+ function fitToParent() {
+ const parent = this.renderer.domElement.parentElement;
+ if (!parent) {
+ console.warn("Two.js: Attempting to fit to parent, but no parent found.");
+ return;
+ }
+ const wr = parent.getBoundingClientRect();
+ const width = this.width = wr.width;
+ const height = this.height = wr.height;
+ this.renderer.setSize(width, height, this.ratio);
+ }
+ function updateDimensions(width, height) {
+ this.width = width;
+ this.height = height;
+ this.trigger(Events.Types.resize, width, height);
+ }
+ var raf = dom.getRequestAnimationFrame();
+ function loop() {
+ for (let i = 0; i < Two.Instances.length; i++) {
+ const t = Two.Instances[i];
+ if (t.playing) {
+ t.update();
+ }
+ }
+ Two.nextFrameID = raf(loop);
+ }
+ raf.init = function() {
+ loop();
+ raf.init = function() {
+ };
+ };
+ return __toCommonJS(two_exports);
+})().default;
+
+(function(){if(typeof exports==='object'&&typeof module!=='undefined'){module.exports=Two}})()
\ No newline at end of file
diff --git a/httpdocs/themes/vuexy/vendor/libs/two/two.min.js b/httpdocs/themes/vuexy/vendor/libs/two/two.min.js
new file mode 100644
index 00000000..fc20d934
--- /dev/null
+++ b/httpdocs/themes/vuexy/vendor/libs/two/two.min.js
@@ -0,0 +1,89 @@
+/*
+MIT License
+
+Copyright (c) 2012 - 2021 @jonobr1 / http://jono.fyi
+
+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.
+*/
+var Two=(()=>{var me=Object.defineProperty;var Yi=Object.getOwnPropertyDescriptor;var qi=Object.getOwnPropertyNames;var Gi=Object.prototype.hasOwnProperty;var Ki=(i,t,e)=>t in i?me(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var Me=(i,t)=>{for(var e in t)me(i,e,{get:t[e],enumerable:!0})},$i=(i,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of qi(t))!Gi.call(i,r)&&r!==e&&me(i,r,{get:()=>t[r],enumerable:!(s=Yi(t,r))||s.enumerable});return i};var Ji=i=>$i(me({},"__esModule",{value:!0}),i);var v=(i,t,e)=>(Ki(i,typeof t!="symbol"?t+"":t,e),e);var Gs={};Me(Gs,{default:()=>P});var w={move:"M",line:"L",curve:"C",arc:"A",close:"Z"};var Ie={};Me(Ie,{HALF_PI:()=>J,NumArray:()=>yt,TWO_PI:()=>$,decomposeMatrix:()=>St,getComputedMatrix:()=>Oe,getPoT:()=>Pe,lerp:()=>nt,mod:()=>it,setMatrix:()=>Le,toFixed:()=>K});var H;typeof window<"u"?H=window:typeof global<"u"?H=global:typeof self<"u"&&(H=self);var li,$=Math.PI*2,J=Math.PI*.5;function St(i,t,e,s,r,n){let a;return arguments.length<=1?(a=i.a,t=i.b,e=i.c,s=i.d,r=i.e,n=i.f):a=i,{translateX:r,translateY:n,scaleX:Math.sqrt(a*a+t*t),scaleY:Math.sqrt(e*e+s*s),rotation:180*Math.atan2(t,a)/Math.PI}}function Le(i){li=i}function Oe(i,t){t=t&&t.identity()||new li;let e=i,s=[];for(;e&&e._matrix;)s.push(e._matrix),e=e.parent;s.reverse();for(let r=0;r
jt,getAnchorsFromArcData:()=>ts,getComponentOnCubicBezier:()=>Ut,getControlPoints:()=>ui,getCurveBoundingBox:()=>Ne,getCurveFromPoints:()=>je,getCurveLength:()=>Be,getReflection:()=>ye,integrate:()=>ci,subdivide:()=>se});var p=class{_events={};_bound=!1;constructor(){}addEventListener(t,e){return(this._events[t]||(this._events[t]=[])).push(e),this._bound=!0,this}on(){return this.addEventListener.apply(this,arguments)}bind(){return this.addEventListener.apply(this,arguments)}removeEventListener(t,e){if(!this._events)return this;if(!t&&!e)return this._events={},this._bound=!1,this;let s=t?[t]:Object.keys(this._events);for(let r=0,n=s.length;r=4){let n=arguments[0]-arguments[2],a=arguments[1]-arguments[3];return Math.atan2(a,n)}let s=t.x-e.x,r=t.y-e.y;return Math.atan2(r,s)}static distanceBetween(t,e){return Math.sqrt(bt.distanceBetweenSquared(t,e))}static distanceBetweenSquared(t,e){let s=t.x-e.x,r=t.y-e.y;return s*s+r*r}set(t,e){return this.x=t,this.y=e,this}copy(t){return this.x=t.x,this.y=t.y,this}clear(){return this.x=0,this.y=0,this}clone(){return new bt(this.x,this.y)}add(t,e){return arguments.length<=0?this:(arguments.length<=1?typeof t=="number"?(this.x+=t,this.y+=t):t&&typeof t.x=="number"&&typeof t.y=="number"&&(this.x+=t.x,this.y+=t.y):(this.x+=t,this.y+=e),this)}addSelf(t){return this.add.apply(this,arguments)}sub(t,e){return arguments.length<=0?this:(arguments.length<=1?typeof t=="number"?(this.x-=t,this.y-=t):t&&typeof t.x=="number"&&typeof t.y=="number"&&(this.x-=t.x,this.y-=t.y):(this.x-=t,this.y-=e),this)}subtract(){return this.sub.apply(this,arguments)}subSelf(t){return this.sub.apply(this,arguments)}subtractSelf(t){return this.sub.apply(this,arguments)}multiply(t,e){return arguments.length<=0?this:(arguments.length<=1?typeof t=="number"?(this.x*=t,this.y*=t):t&&typeof t.x=="number"&&typeof t.y=="number"&&(this.x*=t.x,this.y*=t.y):(this.x*=t,this.y*=e),this)}multiplySelf(t){return this.multiply.apply(this,arguments)}multiplyScalar(t){return this.multiply(t)}divide(t,e){return arguments.length<=0?this:(arguments.length<=1?typeof t=="number"?(this.x/=t,this.y/=t):t&&typeof t.x=="number"&&typeof t.y=="number"&&(this.x/=t.x,this.y/=t.y):(this.x/=t,this.y/=e),isNaN(this.x)&&(this.x=0),isNaN(this.y)&&(this.y=0),this)}divideSelf(t){return this.divide.apply(this,arguments)}divideScalar(t){return this.divide(t)}negate(){return this.multiply(-1)}dot(t){return this.x*t.x+this.y*t.y}length(){return Math.sqrt(this.lengthSquared())}lengthSquared(){return this.x*this.x+this.y*this.y}normalize(){return this.divideScalar(this.length())}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){let e=this.x-t.x,s=this.y-t.y;return e*e+s*s}setLength(t){return this.normalize().multiplyScalar(t)}equals(t,e){return e=typeof e>"u"?1e-4:e,this.distanceTo(t)"u"?1e-4:t,this.length()>1,f=s&1?n[h++]*i(o):0;for(;h=0&&t<4294967296}var R={isNaN:function(i){return typeof i=="number"&&i!==+i},isElement:function(i){return!!(i&&i.nodeType===1)},isObject:function(i){let t=typeof i;return t==="function"||t==="object"&&!!i},extend:function(i){let t=di.call(arguments,1);for(let e=0;e0&&this.set(o)}static Multiply(t,e,s){if(e.length<=3){let E=t,M,B,C,T=e[0]||0,j=e[1]||0,z=e[2]||0;return M=E[0]*T+E[1]*j+E[2]*z,B=E[3]*T+E[4]*j+E[5]*z,C=E[6]*T+E[7]*j+E[8]*z,[M,B,C]}let r=t[0],n=t[1],a=t[2],o=t[3],h=t[4],l=t[5],f=t[6],c=t[7],d=t[8],_=e[0],u=e[1],m=e[2],b=e[3],g=e[4],y=e[5],x=e[6],S=e[7],A=e[8];return s=s||new yt(9),s[0]=r*_+n*b+a*x,s[1]=r*u+n*g+a*S,s[2]=r*m+n*y+a*A,s[3]=o*_+h*b+l*x,s[4]=o*u+h*g+l*S,s[5]=o*m+h*y+l*A,s[6]=f*_+c*b+d*x,s[7]=f*u+c*g+d*S,s[8]=f*m+c*y+d*A,s}set(t,e,s,r,n,a,o,h,l){if(typeof e>"u"){let f=t;t=f[0],e=f[1],s=f[2],r=f[3],n=f[4],a=f[5],o=f[6],h=f[7],l=f[8]}return this.elements[0]=t,this.elements[1]=e,this.elements[2]=s,this.elements[3]=r,this.elements[4]=n,this.elements[5]=a,this.elements[6]=o,this.elements[7]=h,this.elements[8]=l,this.trigger(p.Types.change)}copy(t){return this.elements[0]=t.elements[0],this.elements[1]=t.elements[1],this.elements[2]=t.elements[2],this.elements[3]=t.elements[3],this.elements[4]=t.elements[4],this.elements[5]=t.elements[5],this.elements[6]=t.elements[6],this.elements[7]=t.elements[7],this.elements[8]=t.elements[8],this.manual=t.manual,this.trigger(p.Types.change)}identity(){return this.elements[0]=gt.Identity[0],this.elements[1]=gt.Identity[1],this.elements[2]=gt.Identity[2],this.elements[3]=gt.Identity[3],this.elements[4]=gt.Identity[4],this.elements[5]=gt.Identity[5],this.elements[6]=gt.Identity[6],this.elements[7]=gt.Identity[7],this.elements[8]=gt.Identity[8],this.trigger(p.Types.change)}multiply(t,e,s,r,n,a,o,h,l){if(typeof e>"u")return this.elements[0]*=t,this.elements[1]*=t,this.elements[2]*=t,this.elements[3]*=t,this.elements[4]*=t,this.elements[5]*=t,this.elements[6]*=t,this.elements[7]*=t,this.elements[8]*=t,this.trigger(p.Types.change);if(typeof s>"u"&&(s=1),typeof r>"u"){t=t||0,e=e||0,s=s||0,n=this.elements;let V=n[0]*t+n[1]*e+n[2]*s,ct=n[3]*t+n[4]*e+n[5]*s,ut=n[6]*t+n[7]*e+n[8]*s;return[V,ct,ut]}let f=this.elements,c=[t,e,s,r,n,a,o,h,l],d=f[0],_=f[1],u=f[2],m=f[3],b=f[4],g=f[5],y=f[6],x=f[7],S=f[8],A=c[0],E=c[1],M=c[2],B=c[3],C=c[4],T=c[5],j=c[6],z=c[7],X=c[8];return this.elements[0]=d*A+_*B+u*j,this.elements[1]=d*E+_*C+u*z,this.elements[2]=d*M+_*T+u*X,this.elements[3]=m*A+b*B+g*j,this.elements[4]=m*E+b*C+g*z,this.elements[5]=m*M+b*T+g*X,this.elements[6]=y*A+x*B+S*j,this.elements[7]=y*E+x*C+S*z,this.elements[8]=y*M+x*T+S*X,this.trigger(p.Types.change)}inverse(t){let e=this.elements;t=t||new gt;let s=e[0],r=e[1],n=e[2],a=e[3],o=e[4],h=e[5],l=e[6],f=e[7],c=e[8],d=c*o-h*f,_=-c*a+h*l,u=f*a-o*l,m=s*d+r*_+n*u;return m?(m=1/m,t.elements[0]=d*m,t.elements[1]=(-c*r+n*f)*m,t.elements[2]=(h*r-n*o)*m,t.elements[3]=_*m,t.elements[4]=(c*s-n*l)*m,t.elements[5]=(-h*s+n*a)*m,t.elements[6]=u*m,t.elements[7]=(-f*s+r*l)*m,t.elements[8]=(o*s-r*a)*m,t):null}scale(t,e){return arguments.length<=1&&(e=t),this.multiply(t,0,0,0,e,0,0,0,1)}rotate(t){let e=rs(t),s=ns(t);return this.multiply(e,-s,0,s,e,0,0,0,1)}translate(t,e){return this.multiply(1,0,t,0,1,e,0,0,1)}skewX(t){let e=gi(t);return this.multiply(1,e,0,0,1,0,0,0,1)}skewY(t){let e=gi(t);return this.multiply(1,0,0,e,1,0,0,0,1)}toString(t){return ze.length=0,this.toTransformArray(t,ze),ze.map(K).join(" ")}toTransformArray(t,e){let s=this.elements,r=!!e,n=s[0],a=s[1],o=s[2],h=s[3],l=s[4],f=s[5];if(t){let c=s[6],d=s[7],_=s[8];if(r){e[0]=n,e[1]=h,e[2]=c,e[3]=a,e[4]=l,e[5]=d,e[6]=o,e[7]=f,e[8]=_;return}return[n,h,c,a,l,d,o,f,_]}if(r){e[0]=n,e[1]=h,e[2]=a,e[3]=l,e[4]=o,e[5]=f;return}return[n,h,a,l,o,f]}toArray(t,e){let s=this.elements,r=!!e,n=s[0],a=s[1],o=s[2],h=s[3],l=s[4],f=s[5];if(t){let c=s[6],d=s[7],_=s[8];if(r){e[0]=n,e[1]=a,e[2]=o,e[3]=h,e[4]=l,e[5]=f,e[6]=c,e[7]=d,e[8]=_;return}return[n,a,o,h,l,f,c,d,_]}if(r){e[0]=n,e[1]=a,e[2]=o,e[3]=h,e[4]=l,e[5]=f;return}return[n,a,o,h,l,f]}toObject(){return{elements:this.toArray(!0),manual:!!this.manual}}clone(){return new gt().copy(this)}},xt=gt;v(xt,"Identity",[1,0,0,0,1,0,0,0,1]);Le(xt);var at=class extends Rt{_flagMatrix=!0;_flagScale=!1;_matrix=null;_worldMatrix=null;_position=null;_rotation=0;_scale=1;_skewX=0;_skewY=0;constructor(){super();for(let t in be)Object.defineProperty(this,t,be[t]);this._renderer.flagMatrix=pi.bind(this),this.isShape=!0,this.id=Y.Identifier+Y.uniqueId(),this.matrix=new xt,this.worldMatrix=new xt,this.position=new k,this.rotation=0,this.scale=1,this.skewX=0,this.skewY=0}get renderer(){return this._renderer}set renderer(t){this._renderer=t}get translation(){return be.position.get.apply(this,arguments)}set translation(t){be.position.set.apply(this,arguments)}addTo(t){return t.add(this),this}remove(){return this.parent?(this.parent.remove(this),this):this}clone(t){let e=new at;return e.position.copy(this.position),e.rotation=this.rotation,e.scale=this.scale,e.skewX=this.skewX,e.skewY=this.skewY,this.matrix.manual&&e.matrix.copy(this.matrix),t&&t.add(e),e._update()}_update(t){return!this._matrix.manual&&this._flagMatrix&&(this._matrix.identity().translate(this.position.x,this.position.y),this._scale instanceof k?this._matrix.scale(this._scale.x,this._scale.y):this._matrix.scale(this._scale),this._matrix.rotate(this.rotation),this._matrix.skewX(this.skewX),this._matrix.skewY(this.skewY)),t&&this.parent&&this.parent._update&&this.parent._update(),this}flagReset(){return this._flagMatrix=this._flagScale=!1,super.flagReset.call(this),this}},be={position:{enumerable:!0,get:function(){return this._position},set:function(i){this._position&&this._position.unbind(p.Types.change,this._renderer.flagMatrix),this._position=i,this._position.bind(p.Types.change,this._renderer.flagMatrix),pi.call(this)}},rotation:{enumerable:!0,get:function(){return this._rotation},set:function(i){this._rotation=i,this._flagMatrix=!0}},scale:{enumerable:!0,get:function(){return this._scale},set:function(i){this._scale instanceof k&&this._scale.unbind(p.Types.change,this._renderer.flagMatrix),this._scale=i,this._scale instanceof k&&this._scale.bind(p.Types.change,this._renderer.flagMatrix),this._flagMatrix=!0,this._flagScale=!0}},skewX:{enumerable:!0,get:function(){return this._skewX},set:function(i){this._skewX=i,this._flagMatrix=!0}},skewY:{enumerable:!0,get:function(){return this._skewY},set:function(i){this._skewY=i,this._flagMatrix=!0}},matrix:{enumerable:!0,get:function(){return this._matrix},set:function(i){this._matrix=i,this._flagMatrix=!0}},worldMatrix:{enumerable:!0,get:function(){return Oe(this,this._worldMatrix),this._worldMatrix},set:function(i){this._worldMatrix=i}}};function pi(){this._flagMatrix=!0}var ot=class extends Array{_events=new p;get _bound(){return this._events._bound}set _bound(t){this._events._bound=t}addEventListener(){return this._events.addEventListener.apply(this,arguments)}on(){return this._events.on.apply(this,arguments)}bind(){return this._events.bind.apply(this,arguments)}removeEventListener(){return this._events.removeEventListener.apply(this,arguments)}off(){return this._events.off.apply(this,arguments)}unbind(){return this._events.unbind.apply(this,arguments)}dispatchEvent(){return this._events.dispatchEvent.apply(this,arguments)}trigger(){return this._events.trigger.apply(this,arguments)}listen(){return this._events.listen.apply(this,arguments)}ignore(){return this._events.ignore.apply(this,arguments)}constructor(){super(),arguments[0]&&Array.isArray(arguments[0])?arguments[0].length>0&&this.push.apply(this,arguments[0]):arguments.length>0&&this.push.apply(this,arguments)}pop(){let t=super.pop.apply(this,arguments);return this.trigger(p.Types.remove,[t]),t}shift(){let t=super.shift.apply(this,arguments);return this.trigger(p.Types.remove,[t]),t}push(){let t=super.push.apply(this,arguments);return this.trigger(p.Types.insert,arguments),t}unshift(){let t=super.unshift.apply(this,arguments);return this.trigger(p.Types.insert,arguments),t}splice(){let t=super.splice.apply(this,arguments);if(this.trigger(p.Types.remove,t),arguments.length>2){let e=this.slice(arguments[0],arguments[0]+arguments.length-2);this.trigger(p.Types.insert,e),this.trigger(p.Types.order)}return t}sort(){return super.sort.apply(this,arguments),this.trigger(p.Types.order),this}reverse(){return super.reverse.apply(this,arguments),this.trigger(p.Types.order),this}indexOf(){return super.indexOf.apply(this,arguments)}map(t,e){let s=[];for(let r=0;r=0&&e.push(r),r.children)for(let n=0;n=0&&this.children.splice(r,1),this.children.push(s)}return this}remove(t){let e=arguments.length,s=this.parent;if(e<=0&&s)return s.remove(this),this;t instanceof Array?t=t.slice():t=Array.prototype.slice.call(arguments);for(let r=0;r=0&&this.children.splice(a,1)}return this}getBoundingClientRect(t){let e,s,r,n,a,o;this._update(!0);let h=1/0,l=-1/0,f=1/0,c=-1/0,d=/texture|gradient/i;s=t?this.matrix:this.worldMatrix;for(let _=0;_o+e?(s.beginning=1,s.ending=1):lo&&ho&&l0&&e(this._children)),this._children=new re(i),this._children.bind(p.Types.insert,t),this._children.bind(p.Types.remove,e),this._children.bind(p.Types.order,s),i.length>0&&t(i)}},mask:{enumerable:!0,get:function(){return this._mask},set:function(i){this._mask=i,this._flagMask=!0,R.isObject(i)&&!i.clip&&(i.clip=!0)}}};function yi(i,t){let e=i.parent,s;if(e===t){r();return}if(e&&e.children.ids[i.id]&&(s=Array.prototype.indexOf.call(e.children,i),e.children.splice(s,1),n()),t){r();return}n(),e._flagAdditions&&e.additions.length===0&&(e._flagAdditions=!1),e._flagSubtractions&&e.subtractions.length===0&&(e._flagSubtractions=!1),delete i.parent;function r(){t.subtractions.length>0&&(s=Array.prototype.indexOf.call(t.subtractions,i),s>=0&&t.subtractions.splice(s,1)),t.additions.length>0&&(s=Array.prototype.indexOf.call(t.additions,i),s>=0&&t.additions.splice(s,1)),i.parent=t,t.additions.push(i),t._flagAdditions=!0}function n(){s=Array.prototype.indexOf.call(e.additions,i),s>=0&&e.additions.splice(s,1),s=Array.prototype.indexOf.call(e.subtractions,i),s<0&&(e.subtractions.push(i),e._flagSubtractions=!0)}}var De=[],He=Math.max,as=Math.min,bi=Math.abs,we=Math.sin,ke=Math.cos,os=Math.acos,Se=Math.sqrt,tt={isHidden:/(undefined|none|transparent)/i,alignments:{left:"start",middle:"center",right:"end"},shim:function(i,t){return i.tagName=i.nodeName=t||"canvas",i.nodeType=1,i.getAttribute=function(e){return this[e]},i.setAttribute=function(e,s){return this[e]=s,this},i},group:{renderChild:function(i){tt[i._renderer.type].render.call(i,this.ctx,!0,this.clip)},render:function(i){if(!this._visible)return this;this._update();let t=this._matrix.elements,e=this.parent;this._renderer.opacity=this._opacity*(e&&e._renderer?e._renderer.opacity:1);let s=this._mask,r=Ae(t),n=!r||!!s;if(this._renderer.context||(this._renderer.context={}),this._renderer.context.ctx=i,n&&(i.save(),r||i.transform(t[0],t[3],t[1],t[4],t[2],t[5])),s&&tt[s._renderer.type].render.call(s,i,!0),this._opacity>0&&this._scale!==0)for(let a=0;a0&&(i.lineDashOffset=rt.offset||0,i.setLineDash(rt)),i.beginPath();let Ct,te,ee,ie,wt,Q,oi;for(let Lt=0;Lt=m&&d&&(x=S,j=y.controls&&y.controls.right||k.zero,z=x.controls&&x.controls.left||k.zero,y._relative?(M=j.x+y.x,B=j.y+y.y):(M=j.x,B=j.y),x._relative?(A=z.x+x.x,E=z.y+x.y):(A=z.x,E=z.y),X=x.x,V=x.y,i.bezierCurveTo(M,B,A,E,X,V));break;case w.line:i.lineTo(X,V);break;case w.move:S=y,i.moveTo(X,V);break}return d&&i.closePath(),!ut&&!e&&(tt.isHidden.test(a)||(dt=a._renderer&&a._renderer.offset,dt&&(i.save(),i.translate(-a._renderer.offset.x,-a._renderer.offset.y),i.scale(a._renderer.scale.x,a._renderer.scale.y)),i.fill(),dt&&i.restore()),tt.isHidden.test(r)||(dt=r._renderer&&r._renderer.offset,dt&&(i.save(),i.translate(-r._renderer.offset.x,-r._renderer.offset.y),i.scale(r._renderer.scale.x,r._renderer.scale.y),i.lineWidth=n/r._renderer.scale.x),i.stroke(),dt&&i.restore())),Z||i.restore(),ut&&!e&&i.clip(),rt&&rt.length>0&&i.setLineDash(De),this.flagReset()}},points:{render:function(i,t,e){let s,r,n,a,o,h,l,f,c,d,_,u,m,b,g,y;if(y=this.parent&&this.parent._renderer?this.parent._renderer.opacity:1,o=this._opacity*(y||1),h=this._visible,!t&&(!h||o===0))return this;this._update(),s=this._matrix.elements,r=this._stroke,n=this._linewidth,a=this._fill,f=this._renderer.collection,c=f.length,m=Ae(s),g=this.dashes,l=this._size,m||(i.save(),i.transform(s[0],s[3],s[1],s[4],s[2],s[5])),a&&(typeof a=="string"?i.fillStyle=a:(tt[a._renderer.type].render.call(a,i,this),i.fillStyle=a._renderer.effect)),r&&(typeof r=="string"?i.strokeStyle=r:(tt[r._renderer.type].render.call(r,i,this),i.strokeStyle=r._renderer.effect),n&&(i.lineWidth=n)),typeof o=="number"&&(i.globalAlpha=o),g&&g.length>0&&(i.lineDashOffset=g.offset||0,i.setLineDash(g)),i.beginPath();let x=l*.5,S;this._sizeAttenuation||(S=this.worldMatrix.elements,S=St(S[0],S[3],S[1],S[4],S[2],S[5]),x/=Math.max(S.scaleX,S.scaleY));for(let A=0;A0&&i.setLineDash(De),this.flagReset()}},text:{render:function(i,t,e){let s=this.parent&&this.parent._renderer?this.parent._renderer.opacity:1,r=this._opacity*s,n=this._visible,a=this._mask,o=this._clip;if(!t&&(!n||o||r===0))return this;this._update();let h=this._matrix.elements,l=this._stroke,f=this._linewidth,c=this._fill,d=this._decoration,_=Ae(h),u=c._renderer&&c._renderer.offset&&l._renderer&&l._renderer.offset,m=this.dashes,b=tt.alignments[this._alignment]||this._alignment,g=this._baseline,y,x,S,A,E,M,B,C,T,j,z;if(_||(i.save(),i.transform(h[0],h[3],h[1],h[4],h[2],h[5])),a&&tt[a._renderer.type].render.call(a,i,!0),u||(i.font=[this._style,this._weight,this._size+"px/"+this._leading+"px",this._family].join(" ")),i.textAlign=b,i.textBaseline=g,c&&(typeof c=="string"?i.fillStyle=c:(tt[c._renderer.type].render.call(c,i,this),i.fillStyle=c._renderer.effect)),l&&(typeof l=="string"?i.strokeStyle=l:(tt[l._renderer.type].render.call(l,i,this),i.strokeStyle=l._renderer.effect),f&&(i.lineWidth=f)),typeof r=="number"&&(i.globalAlpha=r),m&&m.length>0&&(i.lineDashOffset=m.offset||0,i.setLineDash(m)),!o&&!e&&(tt.isHidden.test(c)||(c._renderer&&c._renderer.offset?(M=c._renderer.scale.x,B=c._renderer.scale.y,i.save(),i.translate(-c._renderer.offset.x,-c._renderer.offset.y),i.scale(M,B),y=this._size/c._renderer.scale.y,x=this._leading/c._renderer.scale.y,i.font=[this._style,this._weight,y+"px/",x+"px",this._family].join(" "),S=c._renderer.offset.x/c._renderer.scale.x,A=c._renderer.offset.y/c._renderer.scale.y,i.fillText(this.value,S,A),i.restore()):i.fillText(this.value,0,0)),tt.isHidden.test(l)||(l._renderer&&l._renderer.offset?(M=l._renderer.scale.x,B=l._renderer.scale.y,i.save(),i.translate(-l._renderer.offset.x,-l._renderer.offset.y),i.scale(M,B),y=this._size/l._renderer.scale.y,x=this._leading/l._renderer.scale.y,i.font=[this._style,this._weight,y+"px/",x+"px",this._family].join(" "),S=l._renderer.offset.x/l._renderer.scale.x,A=l._renderer.offset.y/l._renderer.scale.y,E=f/l._renderer.scale.x,i.lineWidth=E,i.strokeText(this.value,S,A),i.restore()):i.strokeText(this.value,0,0))),/(underline|strikethrough)/i.test(d)){let X=i.measureText(this.value),V=1;switch(d){case"underline":T=X.actualBoundingBoxAscent,z=X.actualBoundingBoxAscent;break;case"strikethrough":T=0,z=0,V=.5;break}switch(g){case"top":T+=this._size*V,z+=this._size*V;break;case"baseline":case"bottom":T-=this._size*V,z-=this._size*V;break}switch(b){case"left":case"start":C=0,j=X.width;break;case"right":case"end":C=-X.width,j=0;break;default:C=-X.width/2,j=X.width/2}i.lineWidth=Math.max(Math.floor(this._size/15),1),i.strokeStyle=i.fillStyle,i.beginPath(),i.moveTo(C,T),i.lineTo(j,z),i.stroke()}return _||i.restore(),o&&!e&&i.clip(),m&&m.length>0&&i.setLineDash(De),this.flagReset()}},"linear-gradient":{render:function(i,t){if(!!t){if(this._update(),!this._renderer.effect||this._flagEndPoints||this._flagStops||this._flagUnits){let e,s=this.left._x,r=this.left._y,n=this.right._x,a=this.right._y;/objectBoundingBox/i.test(this._units)&&(e=t.getBoundingClientRect(!0),s=(s-.5)*e.width,r=(r-.5)*e.height,n=(n-.5)*e.width,a=(a-.5)*e.height),this._renderer.effect=i.createLinearGradient(s,r,n,a);for(let o=0;o1){let V=Se(y);s=V*s,r=V*r,b=s*s,g=r*r}let x=b*m+g*u,S=(b*g-x)/x,A=Se(He(0,S));n===a&&(A=-A);let E=A*s*_/r,M=-A*r*d/s,B=ke(o)*E-we(o)*M+(t+h)/2,C=we(o)*E+ke(o)*M+(e+l)/2,T=xi(1,0,(d-E)/s,(_-M)/r),j=xi((d-E)/s,(_-M)/r,(-d-E)/s,(-_-M)/r)%$,z=T+j;ls(i,B,C,s,r,T,z,a===0,o)}},kt=class extends p{constructor(t){super();let e=t.smoothing!==!1;this.domElement=t.domElement||document.createElement("canvas"),this.ctx=this.domElement.getContext("2d"),this.overdraw=t.overdraw||!1,typeof this.ctx.imageSmoothingEnabled<"u"&&(this.ctx.imageSmoothingEnabled=e),this.scene=new q,this.scene.parent=this}setSize(t,e,s){return this.width=t,this.height=e,this.ratio=typeof s>"u"?Dt(this.ctx):s,this.domElement.width=t*this.ratio,this.domElement.height=e*this.ratio,this.domElement.style&&R.extend(this.domElement.style,{width:t+"px",height:e+"px"}),this.trigger(p.Types.resize,t,e,s)}render(){let t=this.ratio===1;return t||(this.ctx.save(),this.ctx.scale(this.ratio,this.ratio)),this.overdraw||this.ctx.clearRect(0,0,this.width,this.height),tt.group.render.call(this.scene,this.ctx),t||this.ctx.restore(),this}};v(kt,"Utils",tt);function ls(i,t,e,s,r,n,a,o,h){let l=a-n,f=jt.Tolerance.epsilon,c=Math.abs(l)=s)return s-r>=0;r+=a}return!1}function Wt(i,t){let e=i._length;if(t<=0)return 0;if(t>=e)return i._lengths.length-1;for(let s=0,r=0;s=t)return t-=r,Math.max(s-1,0)+t/i._lengths[s];r+=i._lengths[s]}return-1}function Re(i,t,e){let s,r,n,a,o,h,l,f,c=t.controls&&t.controls.right,d=i.controls&&i.controls.left;return s=t.x,o=t.y,r=(c||t).x,h=(c||t).y,n=(d||i).x,l=(d||i).y,a=i.x,f=i.y,c&&t._relative&&(r+=t.x,h+=t.y),d&&i._relative&&(n+=i.x,l+=i.y),Be(s,o,r,h,n,l,a,f,e)}function Xe(i,t,e){let s,r,n,a,o,h,l,f,c=t.controls&&t.controls.right,d=i.controls&&i.controls.left;return s=t.x,o=t.y,r=(c||t).x,h=(c||t).y,n=(d||i).x,l=(d||i).y,a=i.x,f=i.y,c&&t._relative&&(r+=t.x,h+=t.y),d&&i._relative&&(n+=i.x,l+=i.y),se(s,o,r,h,n,l,a,f,e)}var Mt=class extends Rt{_flagOffset=!0;_flagOpacity=!0;_flagColor=!0;_offset=0;_opacity=1;_color="#fff";constructor(t,e,s){super();for(let r in vi)Object.defineProperty(this,r,vi[r]);this._renderer.type="stop",this.offset=typeof t=="number"?t:Mt.Index<=0?0:1,this.opacity=typeof s=="number"?s:1,this.color=typeof e=="string"?e:Mt.Index<=0?"#fff":"#000",Mt.Index=(Mt.Index+1)%2}clone(t){let e=new Mt;return R.each(Mt.Properties,function(s){e[s]=this[s]},this),t&&t.stops&&t.stops.push(e),e}toObject(){let t={};return R.each(Mt.Properties,function(e){t[e]=this[e]},this),t}flagReset(){return this._flagOffset=this._flagColor=this._flagOpacity=!1,super.flagReset.call(this),this}},ht=Mt;v(ht,"Index",0),v(ht,"Properties",["offset","opacity","color"]);var vi={offset:{enumerable:!0,get:function(){return this._offset},set:function(i){this._offset=i,this._flagOffset=!0,this.parent&&(this.parent._flagStops=!0)}},opacity:{enumerable:!0,get:function(){return this._opacity},set:function(i){this._opacity=i,this._flagOpacity=!0,this.parent&&(this.parent._flagStops=!0)}},color:{enumerable:!0,get:function(){return this._color},set:function(i){this._color=i,this._flagColor=!0,this.parent&&(this.parent._flagStops=!0)}}};var ne=class extends Rt{_flagStops=!1;_flagSpread=!1;_flagUnits=!1;_spread="";_units="";constructor(t){super();for(let e in wi)Object.defineProperty(this,e,wi[e]);this._renderer.type="gradient",this.id=Y.Identifier+Y.uniqueId(),this.classList=[],this._renderer.flagStops=hs.bind(this),this._renderer.bindStops=fs.bind(this),this._renderer.unbindStops=cs.bind(this),this.spread="pad",this.units="objectBoundingBox",t&&(this.stops=t)}clone(t){let e=this.stops.map(function(r){return r.clone()}),s=new ne(e);return R.each(ne.Properties,function(r){s[r]=this[r]},this),t&&t.add(s),s}toObject(){let t={stops:this.stops.map(function(e){return e.toObject()})};return R.each(ne.Properties,function(e){t[e]=this[e]},this),t}_update(){return(this._flagSpread||this._flagStops)&&this.trigger(p.Types.change),this}flagReset(){return this._flagSpread=this._flagUnits=this._flagStops=!1,super.flagReset.call(this),this}},W=ne;v(W,"Stop",ht),v(W,"Properties",["spread","stops","renderer","units"]);var wi={spread:{enumerable:!0,get:function(){return this._spread},set:function(i){this._spread=i,this._flagSpread=!0}},units:{enumerable:!0,get:function(){return this._units},set:function(i){this._units=i,this._flagUnits=!0}},stops:{enumerable:!0,get:function(){return this._stops},set:function(i){let t=this._renderer.bindStops,e=this._renderer.unbindStops;this._stops&&this._stops.unbind(p.Types.insert,t).unbind(p.Types.remove,e),this._stops=new ot((i||[]).slice(0)),this._stops.bind(p.Types.insert,t).bind(p.Types.remove,e),t(this._stops)}}};function hs(){this._flagStops=!0}function fs(i){let t=i.length;for(;t--;)i[t].bind(p.Types.change,this._renderer.flagStops),i[t].parent=this;this._renderer.flagStops()}function cs(i){let t=i.length;for(;t--;)i[t].unbind(p.Types.change,this._renderer.flagStops),delete i[t].parent;this._renderer.flagStops()}var Ye=class extends W{_flagEndPoints=!1;_left=null;_right=null;constructor(t,e,s,r,n){super(n);for(let a in ki)Object.defineProperty(this,a,ki[a]);this._renderer.type="linear-gradient",this._renderer.flagEndPoints=us.bind(this),this.left=new k,this.right=new k,typeof t=="number"&&(this.left.x=t),typeof e=="number"&&(this.left.y=e),typeof s=="number"&&(this.right.x=s),typeof r=="number"&&(this.right.y=r)}clone(t){let e=this.stops.map(function(r){return r.clone()}),s=new Ye(this.left._x,this.left._y,this.right._x,this.right._y,e);return R.each(W.Properties,function(r){s[r]=this[r]},this),t&&t.add(s),s}toObject(){let t=super.toObject.call(this);return t.left=this.left.toObject(),t.right=this.right.toObject(),t}_update(){return(this._flagEndPoints||this._flagSpread||this._flagStops)&&this.trigger(p.Types.change),this}flagReset(){return this._flagEndPoints=!1,super.flagReset.call(this),this}},U=Ye;v(U,"Properties",["left","right"]),v(U,"Stop",ht);var ki={left:{enumerable:!0,get:function(){return this._left},set:function(i){this._left instanceof k&&this._left.unbind(p.Types.change,this._renderer.flagEndPoints),this._left=i,this._left.bind(p.Types.change,this._renderer.flagEndPoints),this._flagEndPoints=!0}},right:{enumerable:!0,get:function(){return this._right},set:function(i){this._right instanceof k&&this._right.unbind(p.Types.change,this._renderer.flagEndPoints),this._right=i,this._right.bind(p.Types.change,this._renderer.flagEndPoints),this._flagEndPoints=!0}}};function us(){this._flagEndPoints=!0}var ae=class extends W{_flagRadius=!1;_flagCenter=!1;_flagFocal=!1;_radius=0;_center=null;_focal=null;constructor(t,e,s,r,n,a){super(r);for(let o in Ai)Object.defineProperty(this,o,Ai[o]);this._renderer.type="radial-gradient",this._renderer.flagCenter=ds.bind(this),this._renderer.flagFocal=_s.bind(this),this.center=new k,this.radius=typeof s=="number"?s:1,this.focal=new k,typeof t=="number"&&(this.center.x=t),typeof e=="number"&&(this.center.y=e),this.focal.copy(this.center),typeof n=="number"&&(this.focal.x=n),typeof a=="number"&&(this.focal.y=a)}clone(t){let e=this.stops.map(function(r){return r.clone()}),s=new ae(this.center._x,this.center._y,this._radius,e,this.focal._x,this.focal._y);return R.each(W.Properties.concat(ae.Properties),function(r){s[r]=this[r]},this),t&&t.add(s),s}toObject(){let t=super.toObject.call(this);return R.each(ae.Properties,function(e){t[e]=this[e]},this),t.center=this.center.toObject(),t.focal=this.focal.toObject(),t}_update(){return(this._flagRadius||this._flatCenter||this._flagFocal||this._flagSpread||this._flagStops)&&this.trigger(p.Types.change),this}flagReset(){return this._flagRadius=this._flagCenter=this._flagFocal=!1,super.flagReset.call(this),this}},D=ae;v(D,"Stop",ht),v(D,"Properties",["center","radius","focal"]);var Ai={radius:{enumerable:!0,get:function(){return this._radius},set:function(i){this._radius=i,this._flagRadius=!0}},center:{enumerable:!0,get:function(){return this._center},set:function(i){this._center&&this._center.unbind(p.Types.change,this._renderer.flagCenter),this._center=i,this._center.bind(p.Types.change,this._renderer.flagCenter),this._flagCenter=!0}},focal:{enumerable:!0,get:function(){return this._focal},set:function(i){this._focal&&this._focal.unbind(p.Types.change,this._renderer.flagFocal),this._focal=i,this._focal.bind(p.Types.change,this._renderer.flagFocal),this._flagFocal=!0}}};function ds(){this._flagCenter=!0}function _s(){this._flagFocal=!0}var Ee,Si={video:/\.(mp4|webm|ogg)$/i,image:/\.(jpe?g|png|gif|tiff|webp)$/i,effect:/texture|gradient/i};H.document&&(Ee=document.createElement("a"));var st=class extends Rt{_flagSrc=!1;_flagImage=!1;_flagVideo=!1;_flagLoaded=!1;_flagRepeat=!1;_flagOffset=!1;_flagScale=!1;_src="";_image=null;_loaded=!1;_repeat="no-repeat";_scale=1;_offset=null;constructor(t,e){super(),this._renderer={};for(let s in Ri)Object.defineProperty(this,s,Ri[s]);if(this._renderer.type="texture",this._renderer.flagOffset=gs.bind(this),this._renderer.flagScale=ps.bind(this),this.id=Y.Identifier+Y.uniqueId(),this.classList=[],this.loaded=!1,this.repeat="no-repeat",this.offset=new k,typeof e=="function"){let s=function(){this.unbind(p.Types.load,s),typeof e=="function"&&e()}.bind(this);this.bind(p.Types.load,s)}if(typeof t=="string")this.src=t;else if(typeof t=="object"){let s=Object.prototype.toString.call(t);(s==="[object HTMLImageElement]"||s==="[object HTMLCanvasElement]"||s==="[object HTMLVideoElement]"||s==="[object Image]")&&(this.image=t)}this._update()}static getAbsoluteURL(t){return Ee?(Ee.href=t,Ee.href):t}static loadHeadlessBuffer(t,e){t.image.onload=e,t.image.src=t.src}static getTag(t){return t&&t.nodeName&&t.nodeName.toLowerCase()||"img"}static getImage(t){let e=st.getAbsoluteURL(t);if(st.ImageRegistry.contains(e))return st.ImageRegistry.get(e);let s;return lt.Image?(s=new lt.Image,kt.Utils.shim(s,"img")):H.document?Si.video.test(e)?s=document.createElement("video"):s=document.createElement("img"):console.warn("Two.js: no prototypical image defined for Two.Texture"),s.crossOrigin="anonymous",s.referrerPolicy="no-referrer",s}static load(t,e){let s=t.image,r=st.getTag(s);t._flagImage&&(/canvas/i.test(r)?st.Register.canvas(t,e):(t._src=!lt.isHeadless&&s.getAttribute("two-src")||s.src,st.Register[r](t,e))),t._flagSrc&&(s||(s=st.getImage(t.src),t.image=s),r=st.getTag(s),st.Register[r](t,e))}clone(){let t=new st(this.src);return t.repeat=this.repeat,t.offset.copy(this.origin),t.scale=this.scale,t}toObject(){return{src:this.src,repeat:this.repeat,origin:this.origin.toObject(),scale:typeof this.scale=="number"?this.scale:this.scale.toObject()}}_update(){return(this._flagSrc||this._flagImage)&&(this.trigger(p.Types.change),(this._flagSrc||this._flagImage)&&(this.loaded=!1,st.load(this,function(){this.loaded=!0,this.trigger(p.Types.change).trigger(p.Types.load)}.bind(this)))),this._image&&this._image.readyState>=4&&(this._flagVideo=!0),this}flagReset(){return this._flagSrc=this._flagImage=this._flagLoaded=this._flagRepeat=this._flagVideo=this._flagScale=this._flagOffset=!1,super.flagReset.call(this),this}},N=st;v(N,"Properties",["src","loaded","repeat","scale","offset","image"]),v(N,"RegularExpressions",Si),v(N,"ImageRegistry",new Et),v(N,"Register",{canvas:function(t,e){t._src="#"+t.id,st.ImageRegistry.add(t.src,t.image),typeof e=="function"&&e()},img:function(t,e){let s=t.image,r=function(a){!lt.isHeadless&&s.removeEventListener&&typeof s.removeEventListener=="function"&&(s.removeEventListener("load",r,!1),s.removeEventListener("error",n,!1)),typeof e=="function"&&e()},n=function(a){throw!lt.isHeadless&&typeof s.removeEventListener=="function"&&(s.removeEventListener("load",r,!1),s.removeEventListener("error",n,!1)),new et("unable to load "+t.src)};typeof s.width=="number"&&s.width>0&&typeof s.height=="number"&&s.height>0?r():!lt.isHeadless&&typeof s.addEventListener=="function"&&(s.addEventListener("load",r,!1),s.addEventListener("error",n,!1)),t._src=st.getAbsoluteURL(t._src),!(!lt.isHeadless&&s&&s.getAttribute("two-src"))&&(lt.isHeadless||s.setAttribute("two-src",t.src),st.ImageRegistry.add(t.src,s),lt.isHeadless?st.loadHeadlessBuffer(t,r):t.image.src=t.src)},video:function(t,e){if(lt.isHeadless)throw new et("video textures are not implemented in headless environments.");let s=function(n){t.image.removeEventListener("canplaythrough",s,!1),t.image.removeEventListener("error",r,!1),t.image.width=t.image.videoWidth,t.image.height=t.image.videoHeight,typeof e=="function"&&e()},r=function(n){throw t.image.removeEventListener("canplaythrough",s,!1),t.image.removeEventListener("error",r,!1),new et("unable to load "+t.src)};t._src=st.getAbsoluteURL(t._src),t.image.getAttribute("two-src")||(t.image.setAttribute("two-src",t.src),st.ImageRegistry.add(t.src,t.image)),t.image.readyState>=4?s():(t.image.addEventListener("canplaythrough",s,!1),t.image.addEventListener("error",r,!1),t.image.src=t.src,t.image.load())}});var Ri={src:{enumerable:!0,get:function(){return this._src},set:function(i){this._src=i,this._flagSrc=!0}},loaded:{enumerable:!0,get:function(){return this._loaded},set:function(i){this._loaded=i,this._flagLoaded=!0}},repeat:{enumerable:!0,get:function(){return this._repeat},set:function(i){this._repeat=i,this._flagRepeat=!0}},image:{enumerable:!0,get:function(){return this._image},set:function(i){let t=N.getTag(i),e;switch(t){case"canvas":e="#"+i.id;break;default:e=i.src}N.ImageRegistry.contains(e)?this._image=N.ImageRegistry.get(i.src):this._image=i,this._flagImage=!0}},offset:{enumerable:!0,get:function(){return this._offset},set:function(i){this._offset&&this._offset.unbind(p.Types.change,this._renderer.flagOffset),this._offset=i,this._offset.bind(p.Types.change,this._renderer.flagOffset),this._flagOffset=!0}},scale:{enumerable:!0,get:function(){return this._scale},set:function(i){this._scale instanceof k&&this._scale.unbind(p.Types.change,this._renderer.flagScale),this._scale=i,this._scale instanceof k&&this._scale.bind(p.Types.change,this._renderer.flagScale),this._flagScale=!0}}};function gs(){this._flagOffset=!0}function ps(){this._flagScale=!0}var Xt=Math.min,Yt=Math.max,ms=Math.ceil,ys=Math.floor,bs=new k,qt=class extends at{_flagVertices=!0;_flagLength=!0;_flagFill=!0;_flagStroke=!0;_flagLinewidth=!0;_flagOpacity=!0;_flagVisible=!0;_flagCap=!0;_flagJoin=!0;_flagMiter=!0;_flagMask=!1;_flagClip=!1;_length=0;_fill="#fff";_stroke="#000";_linewidth=1;_opacity=1;_visible=!0;_cap="round";_join="round";_miter=4;_closed=!0;_curved=!1;_automatic=!0;_beginning=0;_ending=1;_mask=null;_clip=!1;_dashes=null;constructor(t,e,s,r){super();for(let n in Ei)Object.defineProperty(this,n,Ei[n]);this._renderer.type="path",this._renderer.flagVertices=qe.bind(this),this._renderer.bindVertices=Ge.bind(this),this._renderer.unbindVertices=Ke.bind(this),this._renderer.flagFill=$e.bind(this),this._renderer.flagStroke=Je.bind(this),this._renderer.vertices=[],this._renderer.collection=[],this.closed=!!e,this.curved=!!s,this.beginning=0,this.ending=1,this.fill="#fff",this.stroke="#000",this.linewidth=1,this.opacity=1,this.className="",this.visible=!0,this.cap="butt",this.join="miter",this.miter=4,this.vertices=t,this.automatic=!r,this.dashes=[],this.dashes.offset=0}clone(t){let e=new qt;for(let s=0;s0||this.stroke&&!/(transparent|none)/i.test(this.stroke))if(this.matrix.manual){let{scaleX:d,scaleY:_}=St(e.elements[0],e.elements[3],e.elements[1],e.elements[4],e.elements[2],e.elements[5]);typeof d=="number"&&typeof _=="number"&&(s=Math.max(d,_)*(this.linewidth||0)/2)}else s*=typeof this.scale=="number"?this.scale:Math.max(this.scale.x,this.scale.y);if(r<=0)return{width:0,height:0};for(n=0;n=y){this._closed?(s=it(Z,x),r=it(Z-1,x),Z===0&&(s=r,r=Z)):(s=Z,r=Math.min(Math.max(Z-1,0),S)),A=this.vertices[s],E=this.vertices[r],y-=rt,this._lengths[Z]!==0?t=y/this._lengths[Z]:t=0;break}rt+=this._lengths[Z]}if(A===null||E===null)return null;if(A){if(!E)return A}else return E;g=E.controls&&E.controls.right,b=A.controls&&A.controls.left,o=E.x,d=E.y,h=(g||E).x,_=(g||E).y,l=(b||A).x,u=(b||A).y,f=A.x,m=A.y,g&&E.relative&&(h+=E.x,_+=E.y),b&&A.relative&&(l+=A.x,u+=A.y),a=Ut(t,o,h,l,f),c=Ut(t,d,_,u,m);let M=nt(o,h,t),B=nt(d,_,t),C=nt(h,l,t),T=nt(_,u,t),j=nt(l,f,t),z=nt(u,m,t),X=nt(M,C,t),V=nt(B,T,t),ct=nt(C,j,t),ut=nt(T,z,t);return R.isObject(e)?(e.x=a,e.y=c,e instanceof F&&(e.controls.left.x=X,e.controls.left.y=V,e.controls.right.x=ct,e.controls.right.y=ut,(typeof e.relative!="boolean"||e.relative)&&(e.controls.left.x-=a,e.controls.left.y-=c,e.controls.right.x-=a,e.controls.right.y-=c)),e.t=t,e):(n=new F(a,c,X-a,V-c,ct-a,ut-c,this._curved?w.curve:w.line),n.t=t,n)}plot(){if(this.curved)return je(this._collection,this.closed),this;for(let t=0;t0&&(n[n.length-1].command=w.line),r=o;return}a=Xe(o,r,t),n=n.concat(a),R.each(a,function(l,f){f<=0&&r.command===w.move?l.command=w.move:l.command=w.line}),h>=e&&(this._closed&&this._automatic?(r=o,a=Xe(o,r,t),n=n.concat(a),R.each(a,function(l,f){f<=0&&r.command===w.move?l.command=w.move:l.command=w.line})):s&&n.push(new F(o.x,o.y)),n[n.length-1].command=s?w.close:w.line),r=o},this),this._automatic=!1,this._curved=!1,this.vertices=n,this}_updateLength(t,e){e||this._update();let s=this.vertices.length,r=s-1,n=!1,a=this.vertices[r],o=0;return typeof this._lengths>"u"&&(this._lengths=[]),R.each(this.vertices,function(h,l){if(l<=0&&!n||h.command===w.move){a=h,this._lengths[l]=0;return}this._lengths[l]=Re(h,a,t),o+=this._lengths[l],l>=r&&n&&(a=this.vertices[(l+1)%s],this._lengths[l+1]=Re(h,a,t),o+=this._lengths[l+1]),a=h},this),this._length=o,this._flagLength=!1,this}_update(){if(this._flagVertices){this._automatic&&this.plot(),this._flagLength&&this._updateLength(void 0,!0);let t=this._collection.length,e=this._closed,s=Math.min(this._beginning,this._ending),r=Math.max(this._beginning,this._ending),n=Wt(this,s*this._length),a=Wt(this,r*this._length),o=ms(n),h=ys(a),l,f,c,d,_,u;for(this._renderer.vertices.length=0,u=0;uh&&!f?(_=this._renderer.collection[u].copy(this._collection[u]),this.getPointAt(r,_),_.command=this._renderer.collection[u].command,this._renderer.vertices.push(_),f=_,c=this._collection[u-1],c&&c.controls&&(_.relative?_.controls.right.clear():_.controls.right.copy(_),c.relative?this._renderer.collection[u-1].controls.right.copy(c.controls.right).lerp(k.zero,1-_.t):this._renderer.collection[u-1].controls.right.copy(c.controls.right).lerp(c,1-_.t))):u>=o&&u<=h&&(_=this._renderer.collection[u].copy(this._collection[u]),this._renderer.vertices.push(_),u===h&&We(this,r)?(f=_,!e&&f.controls&&(f.relative?f.controls.right.clear():f.controls.right.copy(f))):u===o&&We(this,s)&&(l=_,l.command=w.move,!e&&l.controls&&(l.relative?l.controls.left.clear():l.controls.left.copy(l))));o>0&&!l&&(u=o-1,_=this._renderer.collection[u].copy(this._collection[u]),this.getPointAt(s,_),_.command=w.move,this._renderer.vertices.unshift(_),d=this._collection[u+1],d&&d.controls&&(_.controls.left.clear(),d.relative?this._renderer.collection[u+1].controls.left.copy(d.controls.left).lerp(k.zero,_.t):(bs.copy(d),this._renderer.collection[u+1].controls.left.copy(d.controls.left).lerp(d,_.t))))}return at.prototype._update.apply(this,arguments),this}flagReset(){return this._flagVertices=this._flagLength=this._flagFill=this._flagStroke=this._flagLinewidth=this._flagOpacity=this._flagVisible=this._flagCap=this._flagJoin=this._flagMiter=this._flagClip=!1,at.prototype.flagReset.call(this),this}},L=qt;v(L,"Properties",["fill","stroke","linewidth","opacity","visible","cap","join","miter","closed","curved","automatic","beginning","ending"]),v(L,"Utils",{getCurveLength:Re});var Ei={linewidth:{enumerable:!0,get:function(){return this._linewidth},set:function(i){this._linewidth=i,this._flagLinewidth=!0}},opacity:{enumerable:!0,get:function(){return this._opacity},set:function(i){this._opacity=i,this._flagOpacity=!0}},visible:{enumerable:!0,get:function(){return this._visible},set:function(i){this._visible=i,this._flagVisible=!0}},cap:{enumerable:!0,get:function(){return this._cap},set:function(i){this._cap=i,this._flagCap=!0}},join:{enumerable:!0,get:function(){return this._join},set:function(i){this._join=i,this._flagJoin=!0}},miter:{enumerable:!0,get:function(){return this._miter},set:function(i){this._miter=i,this._flagMiter=!0}},fill:{enumerable:!0,get:function(){return this._fill},set:function(i){(this._fill instanceof W||this._fill instanceof U||this._fill instanceof D||this._fill instanceof N)&&this._fill.unbind(p.Types.change,this._renderer.flagFill),this._fill=i,this._flagFill=!0,(this._fill instanceof W||this._fill instanceof U||this._fill instanceof D||this._fill instanceof N)&&this._fill.bind(p.Types.change,this._renderer.flagFill)}},stroke:{enumerable:!0,get:function(){return this._stroke},set:function(i){(this._stroke instanceof W||this._stroke instanceof U||this._stroke instanceof D||this._stroke instanceof N)&&this._stroke.unbind(p.Types.change,this._renderer.flagStroke),this._stroke=i,this._flagStroke=!0,(this._stroke instanceof W||this._stroke instanceof U||this._stroke instanceof D||this._stroke instanceof N)&&this._stroke.bind(p.Types.change,this._renderer.flagStroke)}},length:{get:function(){return this._flagLength&&this._updateLength(),this._length}},closed:{enumerable:!0,get:function(){return this._closed},set:function(i){this._closed=!!i,this._flagVertices=!0}},curved:{enumerable:!0,get:function(){return this._curved},set:function(i){this._curved=!!i,this._flagVertices=!0}},automatic:{enumerable:!0,get:function(){return this._automatic},set:function(i){if(i===this._automatic)return;this._automatic=!!i;let t=this._automatic?"ignore":"listen";R.each(this.vertices,function(e){e[t]()})}},beginning:{enumerable:!0,get:function(){return this._beginning},set:function(i){this._beginning=i,this._flagVertices=!0}},ending:{enumerable:!0,get:function(){return this._ending},set:function(i){this._ending=i,this._flagVertices=!0}},vertices:{enumerable:!0,get:function(){return this._collection},set:function(i){let t=this._renderer.bindVertices,e=this._renderer.unbindVertices;this._collection&&this._collection.unbind(p.Types.insert,t).unbind(p.Types.remove,e),i instanceof ot?this._collection=i:this._collection=new ot(i||[]),this._collection.bind(p.Types.insert,t).bind(p.Types.remove,e),t(this._collection)}},mask:{enumerable:!0,get:function(){return this._mask},set:function(i){this._mask=i,this._flagMask=!0,R.isObject(i)&&!i.clip&&(i.clip=!0)}},clip:{enumerable:!0,get:function(){return this._clip},set:function(i){this._clip=i,this._flagClip=!0}},dashes:{enumerable:!0,get:function(){return this._dashes},set:function(i){typeof i.offset!="number"&&(i.offset=this.dashes&&this._dashes.offset||0),this._dashes=i}}};function qe(){this._flagVertices=!0,this._flagLength=!0,this.parent&&(this.parent._flagLength=!0)}function Ge(i){let t=i.length;for(;t--;)i[t].bind(p.Types.change,this._renderer.flagVertices);this._renderer.flagVertices()}function Ke(i){let t=i.length;for(;t--;)i[t].unbind(p.Types.change,this._renderer.flagVertices);this._renderer.flagVertices()}function $e(){this._flagFill=!0}function Je(){this._flagStroke=!0}var Ze=class extends L{constructor(t,e,s,r){let n=[new F,new F,new F,new F];super(n,!0,!1,!0);for(let a in Fi)Object.defineProperty(this,a,Fi[a]);this.width=typeof s=="number"?s:1,this.height=typeof r=="number"?r:1,this.origin=new k,typeof t=="number"&&(this.translation.x=t),typeof e=="number"&&(this.translation.y=e),this._update()}_flagWidth=0;_flagHeight=0;_width=0;_height=0;_origin=null;_update(){if(this._flagVertices||this._flagWidth||this._flagHeight){let t=this._width/2,e=this._height/2;!this._closed&&this.vertices.length===4&&this.vertices.push(new F),this.vertices[0].set(-t,-e).sub(this._origin).command=w.move,this.vertices[1].set(t,-e).sub(this._origin).command=w.line,this.vertices[2].set(t,e).sub(this._origin).command=w.line,this.vertices[3].set(-t,e).sub(this._origin).command=w.line,this.vertices[4]&&(this.vertices[4].set(-t,-e).sub(this._origin).command=w.line)}return super._update.call(this),this}flagReset(){return this._flagWidth=this._flagHeight=!1,super.flagReset.call(this),this}clone(t){let e=new Ze(0,0,this.width,this.height);e.translation.copy(this.translation),e.rotation=this.rotation,e.scale=this.scale,e.skewX=this.skewX,e.skewY=this.skewY,this.matrix.manual&&e.matrix.copy(this.matrix);for(let s=0;s0&&(R.isNaN(this._lastFrame)&&(this._lastFrame=o-1),a=R.performance.now()-this._startTime,d=this._lastFrame+1,h=1e3*(d-this._firstFrame)/this._frameRate,this._loop?a=a%h:a=Math.min(a,h),l=nt(this._firstFrame,d,a/h),l=Math.floor(l),l!==this._index&&(this._index=l,l>=this._lastFrame-1&&this._onLastFrame&&this._onLastFrame()));let _=this._index%e,u=Math.floor(this._index/e),m=-r*_+(f-r)/2,b=-n*u+(c-n)/2;m!==t.offset.x&&(t.offset.x=m),b!==t.offset.y&&(t.offset.y=b)}return super._update.call(this),this}flagReset(){return this._flagTexture=this._flagColumns=this._flagRows=this._flagFrameRate=!1,super.flagReset.call(this),this}},Ot=Qe;v(Ot,"Properties",["texture","columns","rows","frameRate","index"]);var Ti={texture:{enumerable:!0,get:function(){return this._texture},set:function(i){this._texture=i,this._flagTexture=!0}},columns:{enumerable:!0,get:function(){return this._columns},set:function(i){this._columns=i,this._flagColumns=!0}},rows:{enumerable:!0,get:function(){return this._rows},set:function(i){this._rows=i,this._flagRows=!0}},frameRate:{enumerable:!0,get:function(){return this._frameRate},set:function(i){this._frameRate=i,this._flagFrameRate=!0}},index:{enumerable:!0,get:function(){return this._index},set:function(i){this._index=i,this._flagIndex=!0}}};var ti=Math.cos,ei=Math.sin,oe=class extends L{_flagRadius=!1;_radius=0;constructor(t,e,s,r){let n=r?Math.max(r,2):4,a=[];for(let o=0;o2&&(t-=1);let e=4/3*Math.tan(Math.PI/(t*2)),s=this._radius,r=s*e;for(let n=0;n2&&(t-=1);let e=4/3*Math.tan(Math.PI/(this.vertices.length*2)),s=this._width/2,r=this._height/2;for(let n=0;n"u"&&typeof s=="number"&&typeof r=="number"&&(n=Math.floor(Math.min(s,r)/12));let a=[];for(let o=0;o<10;o++)a.push(new F(0,0,0,0,0,0,o===0?w.move:w.curve));super(a);for(let o in Oi)Object.defineProperty(this,o,Oi[o]);this.closed=!0,this.automatic=!1,this._renderer.flagRadius=xs.bind(this),typeof s=="number"&&(this.width=s),typeof r=="number"&&(this.height=r),typeof n=="number"&&(this.radius=n),this._update(),typeof t=="number"&&(this.translation.x=t),typeof e=="number"&&(this.translation.y=e)}_update(){if(this._flagVertices||this._flagWidth||this._flagHeight||this._flagRadius){let t=this._width,e=this._height,s,r;this._radius instanceof k?(s=this._radius.x,r=this._radius.y):(s=this._radius,r=this._radius);let n,a=t/2,o=e/2;n=this.vertices[0],n.x=-(a-s),n.y=-o,n=this.vertices[1],n.x=a-s,n.y=-o,n.controls.left.clear(),n.controls.right.x=s,n.controls.right.y=0,n=this.vertices[2],n.x=a,n.y=-(o-r),n.controls.right.clear(),n.controls.left.clear(),n=this.vertices[3],n.x=a,n.y=o-r,n.controls.left.clear(),n.controls.right.x=0,n.controls.right.y=r,n=this.vertices[4],n.x=a-s,n.y=o,n.controls.right.clear(),n.controls.left.clear(),n=this.vertices[5],n.x=-(a-s),n.y=o,n.controls.left.clear(),n.controls.right.x=-s,n.controls.right.y=0,n=this.vertices[6],n.x=-a,n.y=o-r,n.controls.left.clear(),n.controls.right.clear(),n=this.vertices[7],n.x=-a,n.y=-(o-r),n.controls.left.clear(),n.controls.right.x=0,n.controls.right.y=-r,n=this.vertices[8],n.x=-(a-s),n.y=-o,n.controls.left.clear(),n.controls.right.clear(),n=this.vertices[9],n.copy(this.vertices[8])}return super._update.call(this),this}flagReset(){return this._flagWidth=this._flagHeight=this._flagRadius=!1,super.flagReset.call(this),this}clone(t){let e=this.width,s=this.height,r=this.radius,n=new he(0,0,e,s,r);n.translation.copy(this.translation),n.rotation=this.rotation,n.scale=this.scale,n.skewX=this.skewX,n.skewY=this.skewY,this.matrix.manual&&n.matrix.copy(this.matrix);for(let a=0;a"u"||typeof a>"u"||(t[n]=a.replace(/\s/,""))}return t}function Fs(i){let t={},e=Ts(i),s=Math.max(e.length,i.style.length);for(let r=0;r=0&&t.splice(r,1)}return t}function Ms(i,t){let e=t.split(/[\s,]/),s=-parseFloat(e[0]),r=-parseFloat(e[1]),n=parseFloat(e[2]),a=parseFloat(e[3]);if(s&&r)for(let c=0;c"u"&&/none/i.test(s.display))||typeof s.visibility>"u"&&/hidden/i.test(s.visibility);for(h in s)switch(l=s[h],h){case"gradientTransform":if(/none/i.test(l)||(o=i.gradientTransform&&i.gradientTransform.baseVal&&i.gradientTransform.baseVal.length>0?i.gradientTransform.baseVal[0].matrix:i.getCTM?i.getCTM():null,o===null))break;switch(d=St(o),t._renderer.type){case"linear-gradient":ji(d,t.left),ji(d,t.right);break;case"radial-gradient":t.center.x+=d.translateX,t.center.y+=d.translateY,t.focal.x+=d.translateX,t.focal.y+=d.translateY,t.radius*=Math.max(d.scaleX,d.scaleY);break}break;case"transform":if(/none/i.test(l)||(o=i.transform&&i.transform.baseVal&&i.transform.baseVal.length>0?i.transform.baseVal[0].matrix:i.getCTM?i.getCTM():null,o===null))break;Y.AutoCalculateImportedMatrices?(d=St(o),t.translation.set(d.translateX,d.translateY),t.rotation=Math.PI*(d.rotation/180),t.scale=new k(d.scaleX,d.scaleY),_=parseFloat((s.x+"").replace("px")),u=parseFloat((s.y+"").replace("px")),_&&(t.translation.x=_),u&&(t.translation.y=u)):(o=i.getCTM(),t._matrix.manual=!0,t._matrix.set(o.a,o.b,o.c,o.d,o.e,o.f));break;case"visible":if(t instanceof q){t._visible=l;break}t.visible=l;break;case"stroke-linecap":if(t instanceof q){t._cap=l;break}t.cap=l;break;case"stroke-linejoin":if(t instanceof q){t._join=l;break}t.join=l;break;case"stroke-miterlimit":if(t instanceof q){t._miter=l;break}t.miter=l;break;case"stroke-width":if(t instanceof q){t._linewidth=parseFloat(l);break}t.linewidth=parseFloat(l);break;case"opacity":case"stroke-opacity":case"fill-opacity":if(t instanceof q){t._opacity=parseFloat(l);break}t.opacity=parseFloat(l);break;case"clip-path":if(Ft.cssBackgroundImage.test(l)&&(m=l.replace(Ft.cssBackgroundImage,"$1"),G.defs.current&&G.defs.current.contains(m)&&(g=G.defs.current.get(m),g&&g.childNodes.length>0)))switch(g=g.childNodes[0],y=fe(g.nodeName),t.mask=G[y].call(this,g,{}),t._renderer.type){case"text":case"path":t.position.add(t.mask.position),t.mask.position.clear();break}break;case"fill":case"stroke":f=(t instanceof q?"_":"")+h,Ft.cssBackgroundImage.test(l)?(m=l.replace(Ft.cssBackgroundImage,"$1"),G.defs.current&&G.defs.current.contains(m)?(g=G.defs.current.get(m),g.object||(y=fe(g.nodeName),g.object=G[y].call(this,g,{})),g=g.object):(b=Ls(this),g=b.getById(m)),t[f]=g):t[f]=l;break;case"id":t.id=l;break;case"class":case"className":t.classList=l.split(" "),t._flagClassName=!0;break;case"x":case"y":if(x=t instanceof W,S=t instanceof U,A=t instanceof D,x||S||A)break;l.match("[a-z%]$")&&!l.endsWith("px")&&(E=new et("only pixel values are supported with the "+h+" attribute."),console.warn(E.name,E.message)),t.translation[h]=parseFloat(l);break;case"font-family":t instanceof ft&&(t.family=l);break;case"font-size":t instanceof ft&&(t.size=l);break;case"font-weight":t instanceof ft&&(t.weight=l);break;case"font-style":t instanceof ft&&(t.style=l);break;case"text-decoration":t instanceof ft&&(t.decoration=l);break;case"line-height":t instanceof ft&&(t.leading=l);break}return Object.keys(i.dataset).length&&(t.dataset=i.dataset),s}function Cs(i,t){for(let e=0,s=i.childNodes.length;e with no href."),console.warn(e.name,e.message),null;let r=s.slice(1);if(!G.defs.current.contains(r))return e=new et("unable to find element for reference "+s+"."),console.warn(e.name,e.message),null;let a=G.defs.current.get(r).cloneNode(!0);for(let h=0;h1&&(g=1);break;case"m":case"l":case"t":u.length>2&&(g=2);break;case"s":case"q":u.length>4&&(g=4);break;case"c":u.length>6&&(g=6);break;case"a":u.length>7&&(g=7);break}if(g){for(y=0,x=u.length,A=0;y0)switch(m){case"m":S="l";break;case"M":S="L";break}E.push(S+u.slice(y,y+g).join(" ")),A++}f=Array.prototype.concat.apply(f,E)}else f.push(d)}),R.each(f,function(d,_){let u,m,b,g=d[0],y=g.toLowerCase();l=d.slice(1).trim().match(Ft.path),n=g===y;let x,S,A,E,M,B,C,T,j,z,X,V,ct,ut,Z,dt,rt;switch(y){case"z":if(_>=c)r=!0;else{m=o.x,b=o.y,u=new F(m,b,void 0,void 0,void 0,void 0,w.close);for(let Tt=s.length-1;Tt>=0;Tt--){let Ct=s[Tt];if(/m/i.test(Ct.command)){o=Ct;break}}}break;case"m":case"l":h=void 0,m=parseFloat(l[0]),b=parseFloat(l[1]),u=new F(m,b,void 0,void 0,void 0,void 0,/m/i.test(y)?w.move:w.line),n&&u.addSelf(o),o=u;break;case"h":case"v":z=/h/i.test(y)?"x":"y",X=/x/i.test(z)?"y":"x",u=new F(void 0,void 0,void 0,void 0,void 0,void 0,w.line),u[z]=parseFloat(l[0]),u[X]=o[X],n&&(u[z]+=o[z]),o=u;break;case"c":case"s":x=o.x,S=o.y,h||(h=new k),/c/i.test(y)?(A=parseFloat(l[0]),E=parseFloat(l[1]),M=parseFloat(l[2]),B=parseFloat(l[3]),C=parseFloat(l[4]),T=parseFloat(l[5])):(j=ye(o,h,n),A=j.x,E=j.y,M=parseFloat(l[0]),B=parseFloat(l[1]),C=parseFloat(l[2]),T=parseFloat(l[3])),n&&(A+=x,E+=S,M+=x,B+=S,C+=x,T+=S),o.controls.right.set(A-o.x,E-o.y),u=new F(C,T,M-C,B-T,void 0,void 0,w.curve),o=u,h=u.controls.left;break;case"t":case"q":x=o.x,S=o.y,h||(h=new k),/q/i.test(y)?(A=parseFloat(l[0]),E=parseFloat(l[1]),M=parseFloat(l[0]),B=parseFloat(l[1]),C=parseFloat(l[2]),T=parseFloat(l[3])):(j=ye(o,h,n),A=j.x,E=j.y,M=j.x,B=j.y,C=parseFloat(l[0]),T=parseFloat(l[1])),n&&(A+=x,E+=S,M+=x,B+=S,C+=x,T+=S),o.controls.right.set((A-o.x)*.33,(E-o.y)*.33),u=new F(C,T,M-C,B-T,void 0,void 0,w.curve),o=u,h=u.controls.left;break;case"a":x=o.x,S=o.y,ct=parseFloat(l[0]),ut=parseFloat(l[1]),Z=parseFloat(l[2]),dt=parseFloat(l[3]),rt=parseFloat(l[4]),C=parseFloat(l[5]),T=parseFloat(l[6]),n&&(C+=x,T+=S),V=new F(C,T),V.command=w.arc,V.rx=ct,V.ry=ut,V.xAxisRotation=Z,V.largeArcFlag=dt,V.sweepFlag=rt,u=V,o=V,h=void 0;break}u&&(Array.isArray(u)?s=s.concat(u):s.push(u))})}e=new L(s,r,void 0,!0).noStroke(),e.fill="black";let a=e.getBoundingClientRect(!0);return a.centroid={x:a.left+a.width/2,y:a.top+a.height/2},R.each(e.vertices,function(o){o.subSelf(a.centroid)}),vt.call(this,i,e,t),e.translation.addSelf(a.centroid),e},circle:function(i,t){let e=parseFloat(i.getAttribute("cx")),s=parseFloat(i.getAttribute("cy")),r=parseFloat(i.getAttribute("r")),n=new Pt(0,0,r).noStroke();return n.fill="black",vt.call(this,i,n,t),n.translation.x=e,n.translation.y=s,n},ellipse:function(i,t){let e=parseFloat(i.getAttribute("cx")),s=parseFloat(i.getAttribute("cy")),r=parseFloat(i.getAttribute("rx")),n=parseFloat(i.getAttribute("ry")),a=new It(0,0,r,n).noStroke();return a.fill="black",vt.call(this,i,a,t),a.translation.x=e,a.translation.y=s,a},rect:function(i,t){let e=parseFloat(i.getAttribute("rx")),s=parseFloat(i.getAttribute("ry"));if(!R.isNaN(e)||!R.isNaN(s))return G["rounded-rect"](i);let r=parseFloat(i.getAttribute("width")),n=parseFloat(i.getAttribute("height")),a=r/2,o=n/2,h=new pt(0,0,r,n).noStroke();return h.fill="black",vt.call(this,i,h,t),h.translation.x+=a,h.translation.y+=o,h},"rounded-rect":function(i,t){let e=parseFloat(i.getAttribute("rx"))||0,s=parseFloat(i.getAttribute("ry"))||0,r=parseFloat(i.getAttribute("width")),n=parseFloat(i.getAttribute("height")),a=r/2,o=n/2,h=new k(e,s),l=new Bt(0,0,r,n,h).noStroke();return l.fill="black",vt.call(this,i,l,t),l.translation.x+=a,l.translation.y+=o,l},line:function(i,t){let e=parseFloat(i.getAttribute("x1")),s=parseFloat(i.getAttribute("y1")),r=parseFloat(i.getAttribute("x2")),n=parseFloat(i.getAttribute("y2")),a=new Vt(e,s,r,n).noFill();return vt.call(this,i,a,t),a},lineargradient:function(i,t){let e=i.getAttribute("gradientUnits"),s=i.getAttribute("spreadMethod");e||(e="objectBoundingBox"),s||(s="pad");let r=parseFloat(i.getAttribute("x1")||0),n=parseFloat(i.getAttribute("y1")||0),a=parseFloat(i.getAttribute("x2")||0),o=parseFloat(i.getAttribute("y2")||0),h=(a+r)/2,l=(o+n)/2;/userSpaceOnUse/i.test(e)&&(r-=h,n-=l,a-=h,o-=l);let f=[];for(let d=0;d1?y[1]:void 0),b===null?(y=g?g.match(/stop-opacity:\s?([0-9.-]*)/):!1,b=y&&y.length>1?parseFloat(y[1]):1):b=parseFloat(b),f.push(new ht(u,m,b))}let c=new U(r,n,a,o,f);return c.spread=s,c.units=e,vt.call(this,i,c,t),c},radialgradient:function(i,t){let e=i.getAttribute("gradientUnits"),s=i.getAttribute("spreadMethod");e||(e="objectBoundingBox"),s||(s="pad");let r=parseFloat(i.getAttribute("cx"))||0,n=parseFloat(i.getAttribute("cy"))||0,a=parseFloat(i.getAttribute("r")),o=parseFloat(i.getAttribute("fx")),h=parseFloat(i.getAttribute("fy"));R.isNaN(o)&&(o=r),R.isNaN(h)&&(h=n);let l=Math.abs(r+o)/2,f=Math.abs(n+h)/2;/userSpaceOnUse/i.test(e)&&(r-=l,n-=f,o-=l,h-=f);let c=[];for(let _=0;_1?x[1]:void 0),g===null?(x=y?y.match(/stop-opacity:\s?([0-9.-]*)/):!1,g=x&&x.length>1?parseFloat(x[1]):1):g=parseFloat(g),c.push(new ht(m,b,g))}let d=new D(r,n,a,c,o,h);return d.spread=s,d.units=e,vt.call(this,i,d,t),d},text:function(i,t){let e=Ss(i.getAttribute("text-anchor"))||"left",s=Rs(i)||"baseline",r=i.textContent,n=new ft(r);return vt.call(this,i,n,t),n.alignment=e,n.baseline=s,n},clippath:function(i,t){return G.defs.current&&!G.defs.current.contains(i.id)&&G.defs.current.add(i.id,i),null},image:function(i,t){let e,s=i.getAttribute("href")||i.getAttribute("xlink:href");if(!s)return e=new et("encountered with no href."),console.warn(e.name,e.message),null;let r=parseFloat(i.getAttribute("x"))||0,n=parseFloat(i.getAttribute("y"))||0,a=parseFloat(i.getAttribute("width")),o=parseFloat(i.getAttribute("height")),h=new Ot(s,r,n);return R.isNaN(a)||(h.width=a),R.isNaN(o)||(h.height=o),vt.call(this,i,h,t),h}};function ni(i,t){let e=new XMLHttpRequest;return e.open("GET",i),e.onreadystatechange=function(){e.readyState===4&&e.status===200&&t(e.responseText)},e.send(),e}var Fe=class extends pt{_flagTextures=!1;_flagFrameRate=!1;_flagIndex=!1;_amount=1;_duration=0;_index=0;_startTime=0;_playing=!1;_firstFrame=0;_lastFrame=0;_loop=!0;_textures=null;_frameRate=0;_origin=null;constructor(t,e,s,r){super(e,s,0,0);for(let n in Vi)Object.defineProperty(this,n,Vi[n]);this._renderer.flagTextures=Os.bind(this),this._renderer.bindTextures=Ps.bind(this),this._renderer.unbindTextures=Is.bind(this),this.noStroke(),this.noFill(),Array.isArray(t)?this.textures=t.map(zi.bind(this)):this.textures=[zi(t)],this.origin=new k,this._update(),typeof r=="number"?this.frameRate=r:this.frameRate=Fe.DefaultFrameRate,this.index=0}play(t,e,s){return this._playing=!0,this._firstFrame=0,this._lastFrame=this.amount-1,this._startTime=R.performance.now(),typeof t=="number"&&(this._firstFrame=t),typeof e=="number"&&(this._lastFrame=e),typeof s=="function"?this._onLastFrame=s:delete this._onLastFrame,this._index!==this._firstFrame&&(this._startTime-=1e3*Math.abs(this._index-this._firstFrame)/this._frameRate),this}pause(){return this._playing=!1,this}stop(){return this._playing=!1,this._index=this._firstFrame,this}clone(t){let e=new Fe(this.textures,this.translation.x,this.translation.y,this.frameRate);return e._loop=this._loop,this._playing&&e.play(),t&&t.add(e),e}toObject(){let t=super.toObject.call(this);return t.textures=this.textures.map(function(e){return e.toObject()}),t.frameRate=this.frameRate,t.index=this.index,t._firstFrame=this._firstFrame,t._lastFrame=this._lastFrame,t._loop=this._loop,t}_update(){let t=this._textures,e,s,r,n,a,o,h,l;return t&&(this._flagTextures&&(this._amount=t.length),this._flagFrameRate&&(this._duration=1e3*this._amount/this._frameRate),this._playing&&this._frameRate>0?(n=this._amount,R.isNaN(this._lastFrame)&&(this._lastFrame=n-1),r=R.performance.now()-this._startTime,l=this._lastFrame+1,a=1e3*(l-this._firstFrame)/this._frameRate,this._loop?r=r%a:r=Math.min(r,a),h=nt(this._firstFrame,l,r/a),h=Math.floor(h),h!==this._index&&(this._index=h,o=t[this._index],o.loaded&&(e=o.image.width,s=o.image.height,this.width!==e&&(this.width=e),this.height!==s&&(this.height=s),this.fill=o,h>=this._lastFrame-1&&this._onLastFrame&&this._onLastFrame()))):(this._flagIndex||!(this.fill instanceof N))&&(o=t[this._index],o.loaded&&(e=o.image.width,s=o.image.height,this.width!==e&&(this.width=e),this.height!==s&&(this.height=s)),this.fill=o)),super._update.call(this),this}flagReset(){return this._flagTextures=this._flagFrameRate=!1,super.flagReset.call(this),this}},zt=Fe;v(zt,"Properties",["textures","frameRate","index"]),v(zt,"DefaultFrameRate",30);var Vi={frameRate:{enumerable:!0,get:function(){return this._frameRate},set:function(i){this._frameRate=i,this._flagFrameRate=!0}},index:{enumerable:!0,get:function(){return this._index},set:function(i){this._index=i,this._flagIndex=!0}},textures:{enumerable:!0,get:function(){return this._textures},set:function(i){let t=this._renderer.bindTextures,e=this._renderer.unbindTextures;this._textures&&this._textures.unbind(p.Types.insert,t).unbind(p.Types.remove,e),this._textures=new ot((i||[]).slice(0)),this._textures.bind(p.Types.insert,t).bind(p.Types.remove,e),t(this._textures)}}};function Os(){this._flagTextures=!0}function Ps(i){let t=i.length;for(;t--;)i[t].bind(p.Types.change,this._renderer.flagTextures);this._renderer.flagTextures()}function Is(i){let t=i.length;for(;t--;)i[t].unbind(p.Types.change,this._renderer.flagTextures);this._renderer.flagTextures()}function zi(i){if(i instanceof N)return i;if(typeof i=="string")return new N(i)}var ce=class extends L{_flagStartAngle=!1;_flagEndAngle=!1;_flagInnerRadius=!1;_flagOuterRadius=!1;_startAngle=0;_endAngle=$;_innerRadius=0;_outerRadius=0;constructor(t,e,s,r,n,a,o){let h=o||Y.Resolution*3,l=[];for(let f=0;f0,o=this.vertices,h=a?o.length/2:o.length,l,f=0,c,d,_,u,m,b,g,y,x;for(n?h--:a||(h-=2),c=0,d=h-1;c=n&&l<=a&&(h=this._collection[l],this._renderer.collection.push(h),this._renderer.vertices[o*2+0]=h.x,this._renderer.vertices[o*2+1]=h.y,o++)}return super._update.apply(this,arguments),this}flagReset(){return this._flagVertices=this._flagLength=this._flagFill=this._flagStroke=this._flagLinewidth=this._flagOpacity=this._flagVisible=this._flagSize=this._flagSizeAttenuation=!1,super.flagReset.call(this),this}},$t=Kt;v($t,"Properties",["fill","stroke","linewidth","opacity","visible","size","sizeAttenuation","beginning","ending"]);var Di={linewidth:{enumerable:!0,get:function(){return this._linewidth},set:function(i){this._linewidth=i,this._flagLinewidth=!0}},opacity:{enumerable:!0,get:function(){return this._opacity},set:function(i){this._opacity=i,this._flagOpacity=!0}},visible:{enumerable:!0,get:function(){return this._visible},set:function(i){this._visible=i,this._flagVisible=!0}},size:{enumerable:!0,get:function(){return this._size},set:function(i){this._size=i,this._flagSize=!0}},sizeAttenuation:{enumerable:!0,get:function(){return this._sizeAttenuation},set:function(i){this._sizeAttenuation=i,this._flagSizeAttenuation=!0}},fill:{enumerable:!0,get:function(){return this._fill},set:function(i){(this._fill instanceof W||this._fill instanceof U||this._fill instanceof D||this._fill instanceof N)&&this._fill.unbind(p.Types.change,this._renderer.flagFill),this._fill=i,this._flagFill=!0,(this._fill instanceof W||this._fill instanceof U||this._fill instanceof D||this._fill instanceof N)&&this._fill.bind(p.Types.change,this._renderer.flagFill)}},stroke:{enumerable:!0,get:function(){return this._stroke},set:function(i){(this._stroke instanceof W||this._stroke instanceof U||this._stroke instanceof D||this._stroke instanceof N)&&this._stroke.unbind(p.Types.change,this._renderer.flagStroke),this._stroke=i,this._flagStroke=!0,(this._stroke instanceof W||this._stroke instanceof U||this._stroke instanceof D||this._stroke instanceof N)&&this._stroke.bind(p.Types.change,this._renderer.flagStroke)}},length:{get:function(){return this._flagLength&&this._updateLength(),this._length}},beginning:{enumerable:!0,get:function(){return this._beginning},set:function(i){this._beginning=i,this._flagVertices=!0}},ending:{enumerable:!0,get:function(){return this._ending},set:function(i){this._ending=i,this._flagVertices=!0}},vertices:{enumerable:!0,get:function(){return this._collection},set:function(i){let t=this._renderer.bindVertices,e=this._renderer.unbindVertices;this._collection&&this._collection.unbind(p.Types.insert,t).unbind(p.Types.remove,e),i instanceof ot?this._collection=i:this._collection=new ot(i||[]),this._collection.bind(p.Types.insert,t).bind(p.Types.remove,e),t(this._collection)}},dashes:{enumerable:!0,get:function(){return this._dashes},set:function(i){typeof i.offset!="number"&&(i.offset=this.dashes&&this._dashes.offset||0),this._dashes=i}}};var js=Math.cos,Vs=Math.sin,ue=class extends L{_flagWidth=!1;_flagHeight=!1;_flagSides=!1;_radius=0;_width=0;_height=0;_sides=0;constructor(t,e,s,r){r=Math.max(r||0,3),super();for(let n in Hi)Object.defineProperty(this,n,Hi[n]);this.closed=!0,this.automatic=!1,typeof s=="number"&&(this.radius=s),typeof r=="number"&&(this.sides=r),this._update(),typeof t=="number"&&(this.translation.x=t),typeof e=="number"&&(this.translation.y=e)}_update(){if(this._flagVertices||this._flagWidth||this._flagHeight||this._flagSides){let t=this._sides,e=t+1,s=this.vertices.length;s>t&&(this.vertices.splice(t-1,s-t),s=t);for(let r=0;r=s?this.vertices.push(new F(o,h)):this.vertices[r].set(o,h),this.vertices[r].command=r===0?w.move:w.line}}return super._update.call(this),this}flagReset(){return this._flagWidth=this._flagHeight=this._flagSides=!1,super.flagReset.call(this),this}clone(t){let e=new ue(0,0,0,this.sides);e.translation.copy(this.translation),e.rotation=this.rotation,e.scale=this.scale,e.skewX=this.skewX,e.skewY=this.skewY,e.width=this.width,e.height=this.height,this.matrix.manual&&e.matrix.copy(this.matrix);for(let s=0;st&&(this.vertices.splice(t-1,s-t),s=t);for(let r=0;r=s?this.vertices.push(new F(h,l)):this.vertices[r].set(h,l),this.vertices[r].command=r===0?w.move:w.line}}return super._update.call(this),this}flagReset(){return this._flagInnerRadius=this._flagOuterRadius=this._flagSides=!1,super.flagReset.call(this),this}clone(t){let e=this.innerRadius,s=this.outerRadius,r=this.sides,n=new de(0,0,e,s,r);n.translation.copy(this.translation),n.rotation=this.rotation,n.scale=this.scale,n.skewX=this.skewX,n.skewY=this.skewY,this.matrix.manual&&n.matrix.copy(this.matrix);for(let a=0;a0&&O.setAttributes(s,t),s},setAttributes:function(i,t){let e=Object.keys(t);for(let s=0;s=s&&t&&(o.command===w.curve&&(c=r,y=o.controls&&o.controls.right||o,x=c.controls&&c.controls.left||c,o.relative?(d=K(y.x+o.x),_=K(y.y+o.y)):(d=K(y.x),_=K(y.y)),c.relative?(u=K(x.x+c.x),m=K(x.y+c.y)):(u=K(x.x),m=K(x.y)),C=K(c.x),T=K(c.y),f+=" C "+d+" "+_+" "+u+" "+m+" "+C+" "+T),o.command!==w.close&&(f+=" Z")),n+=f+" "}return n},pointsToString:function(i,t){let e="",s=t*.5;for(let r=0;r"u"&&(i.defs._flagUpdate=!0,delete this._renderer.hasFillEffect)),this._stroke&&this._stroke._renderer&&(this._renderer.hasStrokeEffect=!0,this._stroke._update(),O[this._stroke._renderer.type].render.call(this._stroke,i,!0)),this._flagStroke&&(t.stroke=this._stroke&&this._stroke.id?"url(#"+this._stroke.id+")":this._stroke,this._renderer.hasStrokeEffect&&typeof this._stroke.id>"u"&&(i.defs._flagUpdate=!0,delete this._renderer.hasStrokeEffect)),this._flagLinewidth&&(t["stroke-width"]=this._linewidth),this._flagOpacity&&(t["stroke-opacity"]=this._opacity,t["fill-opacity"]=this._opacity),this._flagClassName&&(t.class=this.classList.join(" ")),this._flagVisible&&(t.visibility=this._visible?"visible":"hidden"),this._flagCap&&(t["stroke-linecap"]=this._cap),this._flagJoin&&(t["stroke-linejoin"]=this._join),this._flagMiter&&(t["stroke-miterlimit"]=this._miter),this.dashes&&this.dashes.length>0&&(t["stroke-dasharray"]=this.dashes.join(" "),t["stroke-dashoffset"]=this.dashes.offset||0),this._renderer.elem?O.setAttributes(this._renderer.elem,t):(t.id=this._id,this._renderer.elem=O.createElement("path",t),i.appendChild(this._renderer.elem)),this._flagClip){let s=O.getClip(this,i),r=this._renderer.elem;this._clip?(r.removeAttribute("id"),s.setAttribute("id",this.id),s.appendChild(r)):(s.removeAttribute("id"),r.setAttribute("id",this.id),this.parent._renderer.elem.appendChild(r))}return this._flagMask&&(this._mask?(O[this._mask._renderer.type].render.call(this._mask,i),this._renderer.elem.setAttribute("clip-path","url(#"+this._mask.id+")")):this._renderer.elem.removeAttribute("clip-path")),this.flagReset()}},points:{render:function(i){if(this._opacity===0&&!this._flagOpacity)return this;this._update();let t={};if((this._matrix.manual||this._flagMatrix)&&(t.transform="matrix("+this._matrix.toString()+")"),this._flagId&&(t.id=this._id),this._flagVertices||this._flagSize||this._flagSizeAttenuation){let s=this._size;if(!this._sizeAttenuation){let n=this.worldMatrix.elements,a=St(n[0],n[3],n[1],n[4],n[2],n[5]);s/=Math.max(a.scaleX,a.scaleY)}let r=O.pointsToString(this._renderer.collection,s);t.d=r}return this._fill&&this._fill._renderer&&(this._renderer.hasFillEffect=!0,this._fill._update(),O[this._fill._renderer.type].render.call(this._fill,i,!0)),this._flagFill&&(t.fill=this._fill&&this._fill.id?"url(#"+this._fill.id+")":this._fill,this._renderer.hasFillEffect&&typeof this._fill.id>"u"&&(i.defs._flagUpdate=!0,delete this._renderer.hasFillEffect)),this._stroke&&this._stroke._renderer&&(this._renderer.hasStrokeEffect=!0,this._stroke._update(),O[this._stroke._renderer.type].render.call(this._stroke,i,!0)),this._flagStroke&&(t.stroke=this._stroke&&this._stroke.id?"url(#"+this._stroke.id+")":this._stroke,this._renderer.hasStrokeEffect&&typeof this._stroke.id>"u"&&(i.defs._flagUpdate=!0,delete this._renderer.hasStrokeEffect)),this._flagLinewidth&&(t["stroke-width"]=this._linewidth),this._flagOpacity&&(t["stroke-opacity"]=this._opacity,t["fill-opacity"]=this._opacity),this._flagClassName&&(t.class=this.classList.join(" ")),this._flagVisible&&(t.visibility=this._visible?"visible":"hidden"),this.dashes&&this.dashes.length>0&&(t["stroke-dasharray"]=this.dashes.join(" "),t["stroke-dashoffset"]=this.dashes.offset||0),this._renderer.elem?O.setAttributes(this._renderer.elem,t):(t.id=this._id,this._renderer.elem=O.createElement("path",t),i.appendChild(this._renderer.elem)),this.flagReset()}},text:{render:function(i){this._update();let t={};if((this._matrix.manual||this._flagMatrix)&&(t.transform="matrix("+this._matrix.toString()+")"),this._flagId&&(t.id=this._id),this._flagFamily&&(t["font-family"]=this._family),this._flagSize&&(t["font-size"]=this._size),this._flagLeading&&(t["line-height"]=this._leading),this._flagAlignment&&(t["text-anchor"]=O.alignments[this._alignment]||this._alignment),this._flagBaseline&&(t["alignment-baseline"]=t["dominant-baseline"]=this._baseline),this._flagStyle&&(t["font-style"]=this._style),this._flagWeight&&(t["font-weight"]=this._weight),this._flagDecoration&&(t["text-decoration"]=this._decoration),this._fill&&this._fill._renderer&&(this._renderer.hasFillEffect=!0,this._fill._update(),O[this._fill._renderer.type].render.call(this._fill,i,!0)),this._flagFill&&(t.fill=this._fill&&this._fill.id?"url(#"+this._fill.id+")":this._fill,this._renderer.hasFillEffect&&typeof this._fill.id>"u"&&(i.defs._flagUpdate=!0,delete this._renderer.hasFillEffect)),this._stroke&&this._stroke._renderer&&(this._renderer.hasStrokeEffect=!0,this._stroke._update(),O[this._stroke._renderer.type].render.call(this._stroke,i,!0)),this._flagStroke&&(t.stroke=this._stroke&&this._stroke.id?"url(#"+this._stroke.id+")":this._stroke,this._renderer.hasStrokeEffect&&typeof this._stroke.id>"u"&&(i.defs._flagUpdate=!0,delete this._renderer.hasStrokeEffect)),this._flagLinewidth&&(t["stroke-width"]=this._linewidth),this._flagOpacity&&(t.opacity=this._opacity),this._flagClassName&&(t.class=this.classList.join(" ")),this._flagVisible&&(t.visibility=this._visible?"visible":"hidden"),this.dashes&&this.dashes.length>0&&(t["stroke-dasharray"]=this.dashes.join(" "),t["stroke-dashoffset"]=this.dashes.offset||0),this._renderer.elem?O.setAttributes(this._renderer.elem,t):(t.id=this._id,this._renderer.elem=O.createElement("text",t),i.appendChild(this._renderer.elem)),this._flagClip){let s=O.getClip(this,i),r=this._renderer.elem;this._clip?(r.removeAttribute("id"),s.setAttribute("id",this.id),s.appendChild(r)):(s.removeAttribute("id"),r.setAttribute("id",this.id),this.parent._renderer.elem.appendChild(r))}return this._flagMask&&(this._mask?(O[this._mask._renderer.type].render.call(this._mask,i),this._renderer.elem.setAttribute("clip-path","url(#"+this._mask.id+")")):this._renderer.elem.removeAttribute("clip-path")),this._flagValue&&(this._renderer.elem.textContent=this._value),this.flagReset()}},"linear-gradient":{render:function(i,t){t||this._update();let e={};if(this._flagId&&(e.id=this._id),this._flagEndPoints&&(e.x1=this.left._x,e.y1=this.left._y,e.x2=this.right._x,e.y2=this.right._y),this._flagSpread&&(e.spreadMethod=this._spread),this._flagUnits&&(e.gradientUnits=this._units),this._renderer.elem?O.setAttributes(this._renderer.elem,e):(e.id=this._id,this._renderer.elem=O.createElement("linearGradient",e)),this._renderer.elem.parentNode===null&&i.defs.appendChild(this._renderer.elem),this._flagStops){let s=this._renderer.elem.childNodes.length!==this.stops.length;if(s)for(;this._renderer.elem.lastChild;)this._renderer.elem.removeChild(this._renderer.elem.lastChild);for(let r=0;r0&&(e.x*=-1),e.y>0&&(e.y*=-1)),(this._flagScale||this._flagLoaded||this._flagRepeat)&&(e.width=0,e.height=0,r)){switch(s.width=e.width=r.width,s.height=e.height=r.height,this._repeat){case"no-repeat":e.width+=1,e.height+=1;break}this._scale instanceof k?(e.width*=this._scale.x,e.height*=this._scale.y):(e.width*=this._scale,e.height*=this._scale)}return(this._flagScale||this._flagLoaded)&&(this._renderer.image?O.setAttributes(this._renderer.image,s):this._renderer.image=O.createElement("image",s)),this._renderer.elem?Object.keys(e).length!==0&&O.setAttributes(this._renderer.elem,e):(e.id=this._id,e.patternUnits="userSpaceOnUse",this._renderer.elem=O.createElement("pattern",e)),this._renderer.elem.parentNode===null&&i.defs.appendChild(this._renderer.elem),this._renderer.elem&&this._renderer.image&&!this._renderer.appended&&(this._renderer.elem.appendChild(this._renderer.image),this._renderer.appended=!0),this.flagReset()}}},_e=class extends p{constructor(t){super(),this.domElement=t.domElement||O.createElement("svg"),this.scene=new q,this.scene.parent=this,this.defs=O.createElement("defs"),this.defs._flagUpdate=!1,this.domElement.appendChild(this.defs),this.domElement.defs=this.defs,this.domElement.style.overflow="hidden"}setSize(t,e){return this.width=t,this.height=e,O.setAttributes(this.domElement,{width:t,height:e}),this.trigger(p.Types.resize,t,e)}render(){return O.group.render.call(this.scene,this.domElement),O.defs.update(this.domElement),this}};v(_e,"Utils",O);var mt={create:function(i,t,e){let s=i.createShader(i[e]);if(i.shaderSource(s,t),i.compileShader(s),!i.getShaderParameter(s,i.COMPILE_STATUS)){let n=i.getShaderInfoLog(s);throw i.deleteShader(s),new et("unable to compile shader "+s+": "+n)}return s},types:{vertex:"VERTEX_SHADER",fragment:"FRAGMENT_SHADER"},path:{vertex:`
+ precision mediump float;
+ attribute vec2 a_position;
+
+ uniform mat3 u_matrix;
+ uniform vec2 u_resolution;
+ uniform vec4 u_rect;
+
+ varying vec2 v_textureCoords;
+
+ void main() {
+ vec2 rectCoords = (a_position * (u_rect.zw - u_rect.xy)) + u_rect.xy;
+ vec2 projected = (u_matrix * vec3(rectCoords, 1.0)).xy;
+ vec2 normal = projected / u_resolution;
+ vec2 clipspace = (normal * 2.0) - 1.0;
+
+ gl_Position = vec4(clipspace * vec2(1.0, -1.0), 0.0, 1.0);
+ v_textureCoords = a_position;
+ }
+ `,fragment:`
+ precision mediump float;
+
+ uniform sampler2D u_image;
+ varying vec2 v_textureCoords;
+
+ void main() {
+ vec4 texel = texture2D(u_image, v_textureCoords);
+ if (texel.a == 0.0) {
+ discard;
+ }
+ gl_FragColor = texel;
+ }
+ `},points:{vertex:`
+ precision mediump float;
+ attribute vec2 a_position;
+
+ uniform float u_size;
+ uniform mat3 u_matrix;
+ uniform vec2 u_resolution;
+
+ varying vec2 v_textureCoords;
+
+ void main() {
+ vec2 projected = (u_matrix * vec3(a_position, 1.0)).xy;
+ vec2 normal = projected / u_resolution;
+ vec2 clipspace = (normal * 2.0) - 1.0;
+
+ gl_PointSize = u_size;
+ gl_Position = vec4(clipspace * vec2(1.0, -1.0), 0.0, 1.0);
+ v_textureCoords = a_position;
+ }
+ `,fragment:`
+ precision mediump float;
+
+ uniform sampler2D u_image;
+
+ void main() {
+ vec4 texel = texture2D(u_image, gl_PointCoord);
+ if (texel.a == 0.0) {
+ discard;
+ }
+ gl_FragColor = texel;
+ }
+ `}};var Te=xt.Multiply,Ds=[1,0,0,0,1,0,0,0,1],Nt=new yt(9),Hs=kt.Utils,ai=new yt([0,0,1,0,0,1,0,1,1,0,1,1]),I={precision:.9,isHidden:/(undefined|none|transparent)/i,canvas:H.document?H.document.createElement("canvas"):{getContext:function(){}},alignments:{left:"start",middle:"center",right:"end"},matrix:new xt,group:{removeChild:function(i,t){if(i.children)for(let e=0;e0&&(g.lineDashOffset=j.offset||0,g.setLineDash(j));let Z,dt,rt,Tt,Ct,te,ee,ie;g.save(),g.scale(y.x,y.y),g.translate(ct,ut),g.beginPath();for(let wt=0;wt=X&&T&&(s=Z,f=Q.controls&&Q.controls.right||k.zero,c=s.controls&&s.controls.left||k.zero,Q._relative?(a=f.x+Q.x,o=f.y+Q.y):(a=f.x,o=f.y),s._relative?(r=c.x+s.x,n=c.y+s.y):(r=c.x,n=c.y),d=s.x,_=s.y,g.bezierCurveTo(a,o,r,n,d,_));break;case w.line:g.lineTo(d,_);break;case w.move:Z=Q,g.moveTo(d,_);break}}T&&g.closePath(),I.isHidden.test(A)||(u=A._renderer&&A._renderer.offset,u&&(g.save(),g.translate(-A._renderer.offset.x,-A._renderer.offset.y),g.scale(A._renderer.scale.x,A._renderer.scale.y)),g.fill(),u&&g.restore()),I.isHidden.test(x)||(u=x._renderer&&x._renderer.offset,u&&(g.save(),g.translate(-x._renderer.offset.x,-x._renderer.offset.y),g.scale(x._renderer.scale.x,x._renderer.scale.y),g.lineWidth=S/x._renderer.scale.x),g.stroke(),u&&g.restore()),g.restore()},getBoundingClientRect:function(i,t,e){let s=1/0,r=-1/0,n=1/0,a=-1/0,o,h;i.forEach(function(l){let f=l.x,c=l.y,d=l.controls,_,u,m,b,g,y;n=Math.min(c,n),s=Math.min(f,s),r=Math.max(f,r),a=Math.max(c,a),l.controls&&(g=d.left,y=d.right,!(!g||!y)&&(_=l._relative?g.x+f:g.x,u=l._relative?g.y+c:g.y,m=l._relative?y.x+f:y.x,b=l._relative?y.y+c:y.y,!(!_||!u||!m||!b)&&(n=Math.min(u,b,n),s=Math.min(_,m,s),r=Math.max(_,m,r),a=Math.max(u,b,a))))}),typeof t=="number"&&(n-=t,s-=t,r+=t,a+=t),o=r-s,h=a-n,e.top=n,e.left=s,e.right=r,e.bottom=a,e.width=o,e.height=h,e.centroid||(e.centroid={}),e.centroid.x=-s,e.centroid.y=-n},render:function(i,t,e){if(!this._visible||!this._opacity)return this;this._update();let s=e||this.parent,r=t[this._renderer.type],n=s._matrix.manual||s._flagMatrix,a=this._matrix.manual||this._flagMatrix,o=this._renderer.parent!==s,h=this._flagVertices||this._flagFill||this._fill instanceof U&&(this._fill._flagSpread||this._fill._flagStops||this._fill._flagEndPoints)||this._fill instanceof D&&(this._fill._flagSpread||this._fill._flagStops||this._fill._flagRadius||this._fill._flagCenter||this._fill._flagFocal)||this._fill instanceof N&&(this._fill._flagLoaded&&this._fill.loaded||this._fill._flagImage||this._fill._flagVideo||this._fill._flagRepeat||this._fill._flagOffset||this._fill._flagScale)||this._stroke instanceof U&&(this._stroke._flagSpread||this._stroke._flagStops||this._stroke._flagEndPoints)||this._stroke instanceof D&&(this._stroke._flagSpread||this._stroke._flagStops||this._stroke._flagRadius||this._stroke._flagCenter||this._stroke._flagFocal)||this._stroke instanceof N&&(this._stroke._flagLoaded&&this._stroke.loaded||this._stroke._flagImage||this._stroke._flagVideo||this._stroke._flagRepeat||this._stroke._flagOffset||this._fill._flagScale)||this._flagStroke||this._flagLinewidth||this._flagOpacity||s._flagOpacity||this._flagVisible||this._flagCap||this._flagJoin||this._flagMiter||this._flagScale||this.dashes&&this.dashes.length>0||!this._renderer.texture;if((n||a||o)&&(this._renderer.matrix||(this._renderer.matrix=new yt(9)),this._matrix.toTransformArray(!0,Nt),Te(Nt,s._renderer.matrix,this._renderer.matrix),this._renderer.scale instanceof k||(this._renderer.scale=new k),this._scale instanceof k?(this._renderer.scale.x=this._scale.x*s._renderer.scale.x,this._renderer.scale.y=this._scale.y*s._renderer.scale.y):(this._renderer.scale.x=this._scale*s._renderer.scale.x,this._renderer.scale.y=this._scale*s._renderer.scale.y),o&&(this._renderer.parent=s)),this._mask&&(i.clear(i.STENCIL_BUFFER_BIT),i.enable(i.STENCIL_TEST),i.stencilFunc(i.ALWAYS,1,0),i.stencilOp(i.KEEP,i.KEEP,i.REPLACE),i.colorMask(!1,!1,!1,!1),I[this._mask._renderer.type].render.call(this._mask,i,t,this),i.stencilFunc(i.EQUAL,1,255),i.stencilOp(i.KEEP,i.KEEP,i.KEEP),i.colorMask(!0,!0,!0,!0)),h?(this._renderer.rect||(this._renderer.rect={}),this._renderer.opacity=this._opacity*s._renderer.opacity,I.path.getBoundingClientRect(this._renderer.vertices,this._linewidth,this._renderer.rect),I.updateTexture.call(I,i,this)):(this._fill&&this._fill._update&&this._fill._update(),this._stroke&&this._stroke._update&&this._stroke._update()),this._clip&&!e||!this._renderer.texture)return this;t.current!==r&&(i.useProgram(r),i.bindBuffer(i.ARRAY_BUFFER,t.buffers.position),i.vertexAttribPointer(r.position,2,i.FLOAT,!1,0,0),i.enableVertexAttribArray(r.position),i.bufferData(i.ARRAY_BUFFER,ai,i.STATIC_DRAW),t.resolution.flagged||i.uniform2f(i.getUniformLocation(r,"u_resolution"),t.resolution.width,t.resolution.height),t.current=r),t.resolution.flagged&&i.uniform2f(i.getUniformLocation(r,"u_resolution"),t.resolution.width,t.resolution.height),i.bindTexture(i.TEXTURE_2D,this._renderer.texture);let l=this._renderer.rect;return i.uniformMatrix3fv(r.matrix,!1,this._renderer.matrix),i.uniform4f(r.rect,l.left,l.top,l.right,l.bottom),i.drawArrays(i.TRIANGLES,0,6),this._mask&&i.disable(i.STENCIL_TEST),this.flagReset()}},points:{updateCanvas:function(i){let t,e=this.canvas,s=this.ctx,r=i._stroke,n=i._linewidth,a=i._fill,o=i._renderer.opacity||i._opacity,h=i.dashes,l=i._size,f=l;I.isHidden.test(r)||(f+=n),e.width=Pe(f),e.height=e.width;let c=f/e.width,d=e.width/2,_=e.height/2;s.clearRect(0,0,e.width,e.height),a&&(typeof a=="string"?s.fillStyle=a:(I[a._renderer.type].render.call(a,s,i),s.fillStyle=a._renderer.effect)),r&&(typeof r=="string"?s.strokeStyle=r:(I[r._renderer.type].render.call(r,s,i),s.strokeStyle=r._renderer.effect),n&&(s.lineWidth=n/c)),typeof o=="number"&&(s.globalAlpha=o),h&&h.length>0&&(s.lineDashOffset=h.offset||0,s.setLineDash(h)),s.save(),s.translate(d,_),s.scale(I.precision,I.precision),s.beginPath(),s.arc(0,0,l/c*.5,0,$),s.restore(),closed&&s.closePath(),I.isHidden.test(a)||(t=a._renderer&&a._renderer.offset,t&&(s.save(),s.translate(-a._renderer.offset.x,-a._renderer.offset.y),s.scale(a._renderer.scale.x,a._renderer.scale.y)),s.fill(),t&&s.restore()),I.isHidden.test(r)||(t=r._renderer&&r._renderer.offset,t&&(s.save(),s.translate(-r._renderer.offset.x,-r._renderer.offset.y),s.scale(r._renderer.scale.x,r._renderer.scale.y),s.lineWidth=n/r._renderer.scale.x),s.stroke(),t&&s.restore())},render:function(i,t,e){if(!this._visible||!this._opacity)return this;this._update();let s=this._size,r=e||this.parent,n=t[this._renderer.type],a=this._sizeAttenuation,o=this._stroke,h=this._linewidth,l=r._matrix.manual||r._flagMatrix,f=this._matrix.manual||this._flagMatrix,c=this._renderer.parent!==r,d=this._renderer.vertices,_=this._renderer.collection.length,u=this._flagVertices,m=this._flagFill||this._fill instanceof U&&(this._fill._flagSpread||this._fill._flagStops||this._fill._flagEndPoints)||this._fill instanceof D&&(this._fill._flagSpread||this._fill._flagStops||this._fill._flagRadius||this._fill._flagCenter||this._fill._flagFocal)||this._fill instanceof N&&(this._fill._flagLoaded&&this._fill.loaded||this._fill._flagImage||this._fill._flagVideo||this._fill._flagRepeat||this._fill._flagOffset||this._fill._flagScale)||this._stroke instanceof U&&(this._stroke._flagSpread||this._stroke._flagStops||this._stroke._flagEndPoints)||this._stroke instanceof D&&(this._stroke._flagSpread||this._stroke._flagStops||this._stroke._flagRadius||this._stroke._flagCenter||this._stroke._flagFocal)||this._stroke instanceof N&&(this._stroke._flagLoaded&&this._stroke.loaded||this._stroke._flagImage||this._stroke._flagVideo||this._stroke._flagRepeat||this._stroke._flagOffset||this._fill._flagScale)||this._flagStroke||this._flagLinewidth||this._flagOpacity||r._flagOpacity||this._flagVisible||this._flagScale||this.dashes&&this.dashes.length>0||!this._renderer.texture;if((l||f||c)&&(this._renderer.matrix||(this._renderer.matrix=new yt(9)),this._matrix.toTransformArray(!0,Nt),Te(Nt,r._renderer.matrix,this._renderer.matrix),this._renderer.scale instanceof k||(this._renderer.scale=new k),this._scale instanceof k?(this._renderer.scale.x=this._scale.x*r._renderer.scale.x,this._renderer.scale.y=this._scale.y*r._renderer.scale.y):(this._renderer.scale.x=this._scale*r._renderer.scale.x,this._renderer.scale.y=this._scale*r._renderer.scale.y),c&&(this._renderer.parent=r)),u){let b=this._renderer.positionBuffer;b&&i.deleteBuffer(b),this._renderer.positionBuffer=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,this._renderer.positionBuffer),i.vertexAttribPointer(n.position,2,i.FLOAT,!1,0,0),i.enableVertexAttribArray(n.position),i.bufferData(i.ARRAY_BUFFER,d,i.STATIC_DRAW)}return m?(this._renderer.opacity=this._opacity*r._renderer.opacity,I.updateTexture.call(I,i,this)):(this._fill&&this._fill._update&&this._fill._update(),this._stroke&&this._stroke._update&&this._stroke._update()),this._clip&&!e||!this._renderer.texture?this:(I.isHidden.test(o)||(s+=h),s/=I.precision,a&&(s*=Math.max(this._renderer.scale.x,this._renderer.scale.y)),t.current!==n&&(i.useProgram(n),t.resolution.flagged||i.uniform2f(i.getUniformLocation(n,"u_resolution"),t.resolution.width,t.resolution.height),t.current=n),t.resolution.flagged&&i.uniform2f(i.getUniformLocation(n,"u_resolution"),t.resolution.width,t.resolution.height),i.bindTexture(i.TEXTURE_2D,this._renderer.texture),i.uniformMatrix3fv(n.matrix,!1,this._renderer.matrix),i.uniform1f(n.size,s*t.resolution.ratio),i.drawArrays(i.POINTS,0,_),this.flagReset())}},text:{updateCanvas:function(i){let t=this.canvas,e=this.ctx,s=i._renderer.scale,r=i._stroke,n=i._linewidth*s,a=i._fill,o=i._renderer.opacity||i._opacity,h=i.dashes,l=i._decoration;t.width=Math.max(Math.ceil(i._renderer.rect.width*s.x),1),t.height=Math.max(Math.ceil(i._renderer.rect.height*s.y),1);let f=i._renderer.rect.centroid,c=f.x,d=f.y,_,u,m,b,g,y,x,S,A,E,M,B=a._renderer&&a._renderer.offset&&r._renderer&&r._renderer.offset;if(e.clearRect(0,0,t.width,t.height),B||(e.font=[i._style,i._weight,i._size+"px/"+i._leading+"px",i._family].join(" ")),e.textAlign="center",e.textBaseline="middle",a&&(typeof a=="string"?e.fillStyle=a:(I[a._renderer.type].render.call(a,e,i),e.fillStyle=a._renderer.effect)),r&&(typeof r=="string"?e.strokeStyle=r:(I[r._renderer.type].render.call(r,e,i),e.strokeStyle=r._renderer.effect),n&&(e.lineWidth=n)),typeof o=="number"&&(e.globalAlpha=o),h&&h.length>0&&(e.lineDashOffset=h.offset||0,e.setLineDash(h)),e.save(),e.scale(s.x,s.y),e.translate(c,d),I.isHidden.test(a)||(a._renderer&&a._renderer.offset?(y=a._renderer.scale.x,x=a._renderer.scale.y,e.save(),e.translate(-a._renderer.offset.x,-a._renderer.offset.y),e.scale(y,x),_=i._size/a._renderer.scale.y,u=i._leading/a._renderer.scale.y,e.font=[i._style,i._weight,_+"px/",u+"px",i._family].join(" "),m=a._renderer.offset.x/a._renderer.scale.x,b=a._renderer.offset.y/a._renderer.scale.y,e.fillText(i.value,m,b),e.restore()):e.fillText(i.value,0,0)),I.isHidden.test(r)||(r._renderer&&r._renderer.offset?(y=r._renderer.scale.x,x=r._renderer.scale.y,e.save(),e.translate(-r._renderer.offset.x,-r._renderer.offset.y),e.scale(y,x),_=i._size/r._renderer.scale.y,u=i._leading/r._renderer.scale.y,e.font=[i._style,i._weight,_+"px/",u+"px",i._family].join(" "),m=r._renderer.offset.x/r._renderer.scale.x,b=r._renderer.offset.y/r._renderer.scale.y,g=n/r._renderer.scale.x,e.lineWidth=g,e.strokeText(i.value,m,b),e.restore()):e.strokeText(i.value,0,0)),/(underline|strikethrough)/i.test(l)){let C=e.measureText(i.value);switch(l){case"underline":A=C.actualBoundingBoxAscent,M=C.actualBoundingBoxAscent;break;case"strikethrough":A=0,M=0;break}S=-C.width/2,E=C.width/2,e.lineWidth=Math.max(Math.floor(i._size/15),1),e.strokeStyle=e.fillStyle,e.beginPath(),e.moveTo(S,A),e.lineTo(E,M),e.stroke()}e.restore()},getBoundingClientRect:function(i,t){let e=I.ctx;e.font=[i._style,i._weight,i._size+"px/"+i._leading+"px",i._family].join(" "),e.textAlign="center",e.textBaseline=i._baseline;let s=e.measureText(i._value).width*1.25,r=Math.max(i._size,i._leading)*1.25;this._linewidth&&!I.isHidden.test(this._stroke)&&(s+=this._linewidth*2,r+=this._linewidth*2);let n=s/2,a=r/2;switch(I.alignments[i._alignment]||i._alignment){case I.alignments.left:t.left=0,t.right=s;break;case I.alignments.right:t.left=-s,t.right=0;break;default:t.left=-n,t.right=n}switch(i._baseline){case"bottom":t.top=-r,t.bottom=0;break;case"top":t.top=0,t.bottom=r;break;default:t.top=-a,t.bottom=a}t.width=s,t.height=r,t.centroid||(t.centroid={}),t.centroid.x=n,t.centroid.y=a},render:function(i,t,e){if(!this._visible||!this._opacity)return this;this._update();let s=e||this.parent,r=t[this._renderer.type],n=s._matrix.manual||s._flagMatrix,a=this._matrix.manual||this._flagMatrix,o=this._renderer.parent!==s,h=this._flagVertices||this._flagFill||this._fill instanceof U&&(this._fill._flagSpread||this._fill._flagStops||this._fill._flagEndPoints)||this._fill instanceof D&&(this._fill._flagSpread||this._fill._flagStops||this._fill._flagRadius||this._fill._flagCenter||this._fill._flagFocal)||this._fill instanceof N&&(this._fill._flagLoaded&&this._fill.loaded||this._fill._flagImage||this._fill._flagVideo||this._fill._flagRepeat||this._fill._flagOffset||this._fill._flagScale)||this._stroke instanceof U&&(this._stroke._flagSpread||this._stroke._flagStops||this._stroke._flagEndPoints)||this._stroke instanceof D&&(this._stroke._flagSpread||this._stroke._flagStops||this._stroke._flagRadius||this._stroke._flagCenter||this._stroke._flagFocal)||this._stroke instanceof N&&(this._stroke._flagLoaded&&this._stroke.loaded||this._stroke._flagImage||this._stroke._flagVideo||this._stroke._flagRepeat||this._stroke._flagOffset||this._fill._flagScale)||this._flagStroke||this._flagLinewidth||this._flagOpacity||s._flagOpacity||this._flagVisible||this._flagScale||this._flagValue||this._flagFamily||this._flagSize||this._flagLeading||this._flagAlignment||this._flagBaseline||this._flagStyle||this._flagWeight||this._flagDecoration||this.dashes&&this.dashes.length>0||!this._renderer.texture;if((n||a||o)&&(this._renderer.matrix||(this._renderer.matrix=new yt(9)),this._matrix.toTransformArray(!0,Nt),Te(Nt,s._renderer.matrix,this._renderer.matrix),this._renderer.scale instanceof k||(this._renderer.scale=new k),this._scale instanceof k?(this._renderer.scale.x=this._scale.x*s._renderer.scale.x,this._renderer.scale.y=this._scale.y*s._renderer.scale.y):(this._renderer.scale.x=this._scale*s._renderer.scale.x,this._renderer.scale.y=this._scale*s._renderer.scale.y),o&&(this._renderer.parent=s)),this._mask&&(i.clear(i.STENCIL_BUFFER_BIT),i.enable(i.STENCIL_TEST),i.stencilFunc(i.ALWAYS,1,0),i.stencilOp(i.KEEP,i.KEEP,i.REPLACE),i.colorMask(!1,!1,!1,!1),I[this._mask._renderer.type].render.call(this._mask,i,t,this),i.stencilFunc(i.EQUAL,1,255),i.stencilOp(i.KEEP,i.KEEP,i.KEEP),i.colorMask(!0,!0,!0,!0)),h?(this._renderer.rect||(this._renderer.rect={}),this._renderer.opacity=this._opacity*s._renderer.opacity,I.text.getBoundingClientRect(this,this._renderer.rect),I.updateTexture.call(I,i,this)):(this._fill&&this._fill._update&&this._fill._update(),this._stroke&&this._stroke._update&&this._stroke._update()),this._clip&&!e||!this._renderer.texture)return this;t.current!==r&&(i.useProgram(r),i.bindBuffer(i.ARRAY_BUFFER,t.buffers.position),i.vertexAttribPointer(r.position,2,i.FLOAT,!1,0,0),i.enableVertexAttribArray(r.position),i.bufferData(i.ARRAY_BUFFER,ai,i.STATIC_DRAW),t.resolution.flagged||i.uniform2f(i.getUniformLocation(r,"u_resolution"),t.resolution.width,t.resolution.height),t.current=r),t.resolution.flagged&&i.uniform2f(i.getUniformLocation(r,"u_resolution"),t.resolution.width,t.resolution.height),i.bindTexture(i.TEXTURE_2D,this._renderer.texture);let l=this._renderer.rect;return i.uniformMatrix3fv(r.matrix,!1,this._renderer.matrix),i.uniform4f(r.rect,l.left,l.top,l.right,l.bottom),i.drawArrays(i.TRIANGLES,0,6),this._mask&&i.disable(i.STENCIL_TEST),this.flagReset()}},"linear-gradient":{render:function(i,t){if(!(!i.canvas.getContext("2d")||!t)){if(this._update(),!this._renderer.effect||this._flagEndPoints||this._flagStops||this._flagUnits){let e,s=this.left._x,r=this.left._y,n=this.right._x,a=this.right._y;/objectBoundingBox/i.test(this._units)&&(e=t.getBoundingClientRect(!0),s=(s-.5)*e.width,r=(r-.5)*e.height,n=(n-.5)*e.width,a=(a-.5)*e.height),this._renderer.effect=i.createLinearGradient(s,r,n,a);for(let o=0;o"u"?Dt(a):s,this.domElement.width=t*this.ratio,this.domElement.height=e*this.ratio,R.isObject(this.domElement.style)&&R.extend(this.domElement.style,{width:t+"px",height:e+"px"}),this._renderer.matrix[0]=this._renderer.matrix[4]=this._renderer.scale=this.ratio,this._flagMatrix=!0,r=t*this.ratio,n=e*this.ratio,a.viewport(0,0,r,n),this.programs.resolution.width=r,this.programs.resolution.height=n,this.programs.resolution.ratio=this.ratio,this.programs.resolution.flagged=!0,this.trigger(p.Types.resize,t,e,s)}render(){let t=this.ctx;return this.overdraw||t.clear(t.COLOR_BUFFER_BIT),I.group.render.call(this.scene,t,this.programs),this._flagMatrix=!1,this.programs.resolution.flagged=!0,this}};v(ge,"Utils",I);var Ws=R.extend({Error:et,getRatio:Dt,read:G,xhr:ni},R,lt,Ve,Ie),Qt=class{_events=new p;get _bound(){return this._events._bound}set _bound(t){this._events._bound=t}addEventListener(){return this._events.addEventListener.apply(this,arguments)}on(){return this._events.addEventListener.apply(this,arguments)}bind(){return this._events.addEventListener.apply(this,arguments)}removeEventListener(){return this._events.removeEventListener.apply(this,arguments)}off(){return this._events.removeEventListener.apply(this,arguments)}unbind(){return this._events.removeEventListener.apply(this,arguments)}dispatchEvent(){return this._events.dispatchEvent.apply(this,arguments)}trigger(){return this._events.dispatchEvent.apply(this,arguments)}listen(){return this._events.listen.apply(this,arguments)}ignore(){return this._events.ignore.apply(this,arguments)}type="";renderer=null;scene=null;width=0;height=0;frameCount=0;timeDelta=0;playing=!1;constructor(t){let e=R.defaults(t||{},{fullscreen:!1,fitted:!1,width:640,height:480,type:Qt.Types.svg,autostart:!1});if(R.each(e,function(s,r){/fullscreen/i.test(r)||/autostart/i.test(r)||(this[r]=s)},this),R.isElement(e.domElement)){let s=e.domElement.tagName.toLowerCase();/^(CanvasRenderer-canvas|WebGLRenderer-canvas|SVGRenderer-svg)$/.test(this.type+"-"+s)||(this.type=Qt.Types[s])}this.renderer=new Qt[this.type](this),this.setPlaying(e.autostart),this.frameCount=0,e.fullscreen?(this.fit=Xs.bind(this),this.fit.domElement=window,this.fit.attached=!0,R.extend(document.body.style,{overflow:"hidden",margin:0,padding:0,top:0,left:0,right:0,bottom:0,position:"fixed"}),R.extend(this.renderer.domElement.style,{display:"block",top:0,left:0,right:0,bottom:0,position:"fixed"}),_t.bind(this.fit.domElement,"resize",this.fit),this.fit()):e.fitted?(this.fit=Ys.bind(this),R.extend(this.renderer.domElement.style,{display:"block"})):R.isElement(e.domElement)||(this.renderer.setSize(e.width,e.height,this.ratio),this.width=e.width,this.height=e.height),this.renderer.bind(p.Types.resize,qs.bind(this)),this.scene=this.renderer.scene,Qt.Instances.push(this),e.autostart&&pe.init()}appendTo(t){return t.appendChild(this.renderer.domElement),this.fit&&(this.fit.domElement!==window&&(this.fit.domElement=t,this.fit.attached=!1),this.update()),this}play(){return this.playing=!0,pe.init(),this.trigger(p.Types.play)}pause(){return this.playing=!1,this.trigger(p.Types.pause)}setPlaying(t){this.playing=t}release(t){let e,s,r;if(!R.isObject(t))return this.release(this.scene);if(typeof t.unbind=="function"&&t.unbind(),t.vertices)for(typeof t.vertices.unbind=="function"&&t.vertices.unbind(),e=0;e