Parcourir la source

Add TOC. Add babel and npm scripts. Re-organize folder structure

Tatiana Inama il y a 7 ans
Parent
commit
5b5cb742f6

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+node_modules

+ 8 - 0
.vscode/settings.json

@@ -0,0 +1,8 @@
+{
+    "emmet.includeLanguages": {
+        "javascript": "javascriptreact",
+    },
+    "emmet.syntaxProfiles": {
+        "javascript": "jsx"
+    }
+}

+ 20 - 0
babel.config.js

@@ -0,0 +1,20 @@
+const presets = [
+    [
+      "@babel/env",
+      {
+        targets: {
+          esmodules: true,
+        },
+        useBuiltIns: "usage",
+      },
+    ], [
+        "@babel/preset-react",
+            {
+                "pragma": "dom", // default pragma is React.createElement
+                "pragmaFrag": "DomFrag", // default is React.Fragment
+                "throwIfNamespace": false // defaults to true
+            }
+    ]
+  ];
+  
+  module.exports = { presets };

+ 40 - 6
css/main.css

@@ -5,28 +5,59 @@ body {
     color: #182F40;
 }
 
+.cover {
+    text-align: center;
+}
+
+.cover .cover-logo,
+.cover .cover-products {
+    max-width: 30rem;
+    margin-top: 1rem;
+}
+
+.cover h1 {
+    font-family: 'Raleway', sans-serif;
+    font-size: 3rem;
+    padding: 3rem;
+    text-transform: uppercase;
+    font-weight: 300;
+}
 
 .eba-hero {
-    background-color: #0F305E;
+    background: #182848;
     color: white;
     text-align: center;
 }
 
-.category-name {
-    background-color: #334875;
-    padding: 2rem 1rem;
+h2,
+h2.category-name {
+    background: rgb(24,40,72);
+    background: linear-gradient(25deg, rgba(24,40,72,1) 0%, rgba(24,40,72,0.8) 100%);
+    padding: 3rem 1rem 1rem 1rem;
     color: white;
     font-family: 'Raleway', sans-serif;
     font-size: 1.8rem;
-    box-shadow: 0 3px 5px 0px rgba(0,0,0,0.5);
     text-transform: uppercase;
     font-weight: 300;
     letter-spacing: 0.05rem;
     page-break-before: always;
 }
 
+/* .category-title::after{
+    display: block;
+    content: '';
+    width: 50%;
+    height: 6rem;
+    transform: skew(-30deg);
+    background: rgba(0, 38, 84, 0.7);
+    position: relative;
+    top: 0;
+    left: -50px;
+    box-shadow: 0 3px 5px 0px rgba(0,0,0,0.5);
+} */
+
 .product-name {
-    background-color: #596992;
+    background-color: rgba(24,40,72,0.8);
     color: white;
     padding: 0.5rem 1rem;
     max-width: 75%;
@@ -34,12 +65,15 @@ body {
     font-weight: 300;
 }
 
+.us-container,
 .product-container {
     page-break-inside: avoid;
 }
 
+.us-body,
 .product-body {
     padding: 0 1rem;
+    text-align: justify;
 }
 
 .product-body p.product-short-desc {

data-parser.js → data/data-parser.js


full-products.json → data/full-products.json


products-by-category.json → data/products-by-category.json


products.json → data/products.json


BIN
images/logo.png


BIN
images/productos.png


BIN
images/varios-xs.png


BIN
images/varios.png


+ 29 - 8
index.html

@@ -7,24 +7,45 @@
     <link rel="stylesheet" href="css/spectre-exp.min.css">
     <link rel="stylesheet" href="css/main.css">
     <link href="https://fonts.googleapis.com/css?family=Fira+Sans|Raleway:300,300i,400,400i|Roboto" rel="stylesheet">
+    <!-- Polyfill file for wkhtmltopdf -->
+    <script src="lib/polyfill.min.js"></script>
+    
   </head>
   <body>
 
-    <!-- We will put our React component inside this div. -->
-    <div class="hero eba-hero">
-      <div class="hero-body">
-        <h1>Vademecum</h1>
+    <div class="cover">
+      <div class="hero eba-hero">
+        <div class="hero-body">
+        </div>
       </div>
+      <image src="images/logo.png" class="cover-logo"/>
+      <h1>Vademecum Profesional</h1>
+      <image src="images/varios.png" class="cover-products"/>
     </div>
+
+    <section class="us-container">
+      <h2>Nosotros</h2>
+      <div class="us-body">
+        <p>
+          Productos profesionales, elaborados con normas de calidad internacional GMP, basados en sustancias activas concentradas de gran pureza y vehículos específicos altamente eficaces que permiten optimizar la belleza y cuidados personalizados de la piel, con base científica.
+        </p>
+  
+        <p>
+            ESPECIFICOS Buenos Aires se compromete a garantizar productos de confianza, ultra-eficaces, tecnología de avanzada y control de calidad permanente bajo normas internacionales de bioseguridad. Texturas aterciopeladas, principios activos de gran pureza, vehículos especializados que conforman productos vanguardistas con delicadas fragancias.
+        </p>
+        <p>
+            El diagnóstico previo personalizado y seguimiento por una profesional formada en tratamientos ESPECIFICOS Buenos Aires es nuestra filosofía de excelencia, ética, seriedad y apoyo constante para un perfecto resultado.
+        </p>
+      </div>
+    </section>
     <div id="vademecum"></div>
 
     <!-- Load React. -->
     <!-- Note: when deploying, replace "development.js" with "production.min.js". -->
-    <script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
-    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
-
+    <script src="lib/react.production.min.js"></script>
+    <script src="lib/react-dom.production.min.js"></script>
     <!-- Load our React component. -->
-    <script src="js/vademecum.js"></script>
+    <script src="lib/vademecum.js"></script>
 
   </body>
 </html>

Fichier diff supprimé car celui-ci est trop grand
+ 4 - 0
js/polyfill.min.js


Fichier diff supprimé car celui-ci est trop grand
+ 220 - 0
js/react-dom.production.min.js


Fichier diff supprimé car celui-ci est trop grand
+ 33 - 0
js/react.production.min.js


+ 770 - 0
js/retard.js

@@ -0,0 +1,770 @@
+'use strict';
+
+var products = {
+  "Protección Intensiva": [{
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Potente acción antioxidante, un magnífico aporte de firmeza y elasticidad que mejora el color, la luminosidad y la hidratación de la piel retrasando el envejecimiento cutáneo. ",
+    "fullDesc": "Crema antioxidante, humecto – nutritiva, potenciada por la acción de una micro alga, Espirulina, que contiene los veinte aminoácidos en perfecto balance, minerales y proteínas. Textura suave, fluida. Indicada para pieles normales, deshidratadas, menopausia.",
+    "application": "Tras limpiar y tonificar rostro, cuello y escote, aplicar mañana y noche con un suave masaje.",
+    "actives": ["Vitamina A", "Vitamina C", "Vitamina E", "Espirulina"],
+    "ph": "",
+    "variants": [{
+      "code": 1001,
+      "content": "60 ml",
+      "price": 250,
+      "sellPrice": 500
+    }, {
+      "code": 2001,
+      "content": "250 ml.",
+      "price": 398,
+      "sellPrice": ""
+    }],
+    "name": "Complex Bio Vitamins A+E+C"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Una textura única, enriquecida con ingredientes capaces de activar signos claves de la juventud de la piel. Las arrugas se suavizan visiblemente. La piel recupera su luminosidad y turgencia",
+    "fullDesc": "Formulada específicamente para cubrir las necesidades de las pieles más secas. Dota a la piel de una nueva capacidad de autorregeneración y autodefensa. Fórmula rica y exclusiva, perfectamente equilibrada, de alto poder antioxidante. Reduce la profundidad y longitud de las arrugas y previene su aparición prematura. Reafirmante.",
+    "application": "Tras limpiar y tonificar rostro, cuello y escote, aplicar diariamente por la noche. Dependiendo de las necesidades de la piel, se combinará la Crema Sublime Uvit",
+    "actives": ["Polifenoles de pepitas de uva", "Salvia, Tocoferol", "Aceite de Jojoba"],
+    "ph": "",
+    "variants": [{
+      "code": 1002,
+      "content": "60 ml.",
+      "price": 250,
+      "sellPrice": 500
+    }, {
+      "code": 2002,
+      "content": "250 ml.",
+      "price": 398,
+      "sellPrice": ""
+    }],
+    "name": "Sublime Uvit - Crema Reparadora"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Acción altamente hidratante y regeneradora en pieles desvitalizadas. Promueve la formación de colágeno, Ayuda a evitar la pérdida de agua transepidérmica, estimula la liberación de citoquinas. Efecto luminoso en pieles secas, con necesidades. Compensa las carencias de la piel. Ayuda a disminuir estrías y cicatrices.",
+    "fullDesc": "Piel más confortable y aparece revitalizada. Incluso al final del día, la piel se siente nutrida e hidratada. Los signos de cansancio y de la edad parecen reducidos. La piel visiblemente reparada, con toda la luminosidad recuperada. Su textura rica y densa combate las arrugas y líneas de expresión y proporciona el confort que las pieles secas necesitan. Se absorbe con rapidez sin restos grasos.",
+    "application": "Aplicar en rostro, cuello y escote, luego de la crema Sublime Uvit. Aplicar en estrías y cicatrices con suave masaje circular.",
+    "actives": ["Acido Glicólico ( 7%)", "Extracto de algas"],
+    "ph": "",
+    "variants": [{
+      "code": 1003,
+      "content": "50 ml.",
+      "price": 250,
+      "sellPrice": 500
+    }, {
+      "code": 2003,
+      "content": "120 ml.",
+      "price": 380,
+      "sellPrice": ""
+    }],
+    "name": "Audace - Glico Activo"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Mejora la textura, la elasticidad, la tonicidad y la firmeza. Reduce la flacidez. ",
+    "fullDesc": "Mejora el proceso de renovación celular, ayuda a normalizar la queratinización, afinando y eliminando imperfecciones, mejora el sostén. Disminuye la profundidad de las arrugas, los signos visibles de cansancio, disminuye el contraste de manchas. Tono de piel mas uniforme y elástica, efecto matificante. Indicado para piel normal, cutis graso, de más de treinta años. Puede utilizarse en verano",
+    "application": "",
+    "actives": ["Retinol", "Aloe Barbadensis extract"],
+    "ph": "",
+    "variants": [{
+      "code": 1004,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }, {
+      "code": 2004,
+      "content": "120 ml.",
+      "price": 350,
+      "sellPrice": ""
+    }],
+    "name": "Bisome Retinol - Fluido Facial"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Una mirada más joven, las ojeras y los signos de cansancio disminuyen. Piel más fresca, clara y luminosa.",
+    "fullDesc": "Crema activa, formulada específicamente para ayudar a recuperar las funciones principales de la piel y mejorar la comunicación intercelular. Mejora la micro circulación palpebral, disminuye la hiperpigmentación, aumenta la firmeza. Protección activa frente al crono y foto envejecimiento. Testeadodermatológicamente.",
+    "application": "Aplicar diariamente, por la mañana.",
+    "actives": ["Polifenoles de pepitas de uva", "Citopeptinas", "Vitamina C", "Alfabisabolol", "FPS"],
+    "ph": "",
+    "variants": [{
+      "code": 1006,
+      "content": "30 ml.",
+      "price": 280,
+      "sellPrice": 560
+    }],
+    "name": "Repair Eye Contour"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Un tratamiento para impulsar las defensas naturales de la piel y hacerla más resistente a los efectos del estrés diario. Los signos de cansancio acumulado desaparecen, piel confortable y aliviada.",
+    "fullDesc": "Suero antioxidante intensivo, específicamente formulado para proteger a la piel de la acción medioambiental. Efecto relax en líneas de expresión. Reafirmante. Piel de seda. Indicado para todo tipo de piel. Testeado dermatológicamente.",
+    "application": "Tratamiento de peeling: Dejar actuar diez minutos, sin retirar aplicar RefreshingMask durante diez minutos, retirar con esponja y agua. Permeación de activos: Aplicar peeling Bio Regulador, dejar actuar durante tres minutos, retirar, aplicar activos concentrados del 1 al 7 de acuerdo al tratamiento a realizar",
+    "actives": ["Polifenoles de pepitas de uva", "Citopeptinas", "Vitamina C", "FPS"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1007,
+      "content": "50 ml.",
+      "price": 220,
+      "sellPrice": 440
+    }, {
+      "code": 2007,
+      "content": "120 ml.",
+      "price": 380,
+      "sellPrice": ""
+    }],
+    "name": "Uvit Serum Defense"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Innovadora fórmula desarrollada con un vehículo especializado, que no solo mejora la apariencia de la piel, sino que también actúa frente a las causas que generan el acné",
+    "fullDesc": "Específicamente formulado para actuar frente a las causas que generan el acné. Normaliza el PH de la piel, antiséptico, antinflamatorio, anti pruriginoso. Evita la deshidratación de la piel. FPS. Puede combinarse con peeling Biorregulador y Refreshing Mask en tratamiento en gabinete profesional",
+    "application": "Acné: tres aplicaciones diarias, mañana, tarde y noche. No retirar. Piel seborreica: Aplicar por la mañana. No retirar.",
+    "actives": ["Acido Salicílico", "Retinol, Resorcina", "FPS"],
+    "ph": "4,5",
+    "variants": [{
+      "code": 1011,
+      "content": "50 ml.",
+      "price": 180,
+      "sellPrice": 360
+    }, {
+      "code": 2011,
+      "content": "200 ml.",
+      "price": 320,
+      "sellPrice": ""
+    }],
+    "name": "Acne Skin Cleans"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Crema de tratamiento anti-edad inteligente, ayuda a proteger a la piel frente al paso del tiempo. La piel infunde con un desarrollado cóctel de embellecimiento. No sólo corrige, protege su piel de las agresiones externas.",
+    "fullDesc": "Un todo dinámico y simultáneo que protege las barreras de la piel para prevenir la pérdida de humedad, compensar, estimular y equilibrar la tonalidad, dejando la piel iluminada y naturalmente magnífica. Anti-envejecimiento . Hidratatante. Minimiza los poros. Minimiza Imperfecciones. Reduce Enrojecimiento. Mejora la tonalidad. Ilumina. Estimula las defensas. Mejora la vitalidad. Reafirma. Estimula la tonalidad. Estimula la tonallidad en forma pareja.",
+    "application": "Aplicar con la piel limpia por la mañana.",
+    "actives": ["Rosa Mosqueta", "Gluconolactona", "Sésamo", "Beta Caroteno", "Filtro Solar"],
+    "ph": "",
+    "variants": [{
+      "code": 1039,
+      "content": "50 ml.",
+      "price": 230,
+      "sellPrice": 460
+    }],
+    "name": "DD Cream"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Su fórmula rica en despigmentantes, con características anti- envejecimiento, anti-inflamatorios, actúa en un todo dinámico y simultáneo.",
+    "fullDesc": "Estimula los mecanismos de defensa, disminuye el estrés oxidativo, ayudando a disminuir los mecanismos de hiperpigmentación propios de la cascada pigmentaria. Marcada acción anti-envejecimiento, descongestiva- purificante. No contiene parabenos. Despigmentante. Homogeneizante. Anti-envejecimiento. Antioxidante. Descongestiva. Purificante. Foto-protectora.",
+    "application": "Aplicar diariamente por la noche, en las zonas hiperpigmentadas, dejar actuar durante 2 minutos, y extender a todo el rostro. Se puede potenciar el tratamiento con la aplicación de ampollas SKIN-DOSE.",
+    "actives": ["Skin Biolight", "Uva Ursi", "Regaliz", "Filtro solar"],
+    "ph": "",
+    "variants": [{
+      "code": 1040,
+      "content": "50 ml.",
+      "price": 200,
+      "sellPrice": 400
+    }, {
+      "code": 2040,
+      "content": "200 ml",
+      "price": 340,
+      "sellPrice": ""
+    }],
+    "name": "Whitening Cream"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Crema de tratamiento específicamente formulada para el cuidado de la piel sensible, rica en ácidos grasos insaturados, tocoferoles, beta-glucanos, minerales, oligoelementos y vitaminas que ayudan a calmar y proteger a la piel, frente a la acción medioambiental. Triple acción protectora del colágeno. Regeneradora.",
+    "fullDesc": "Equilibrante - reafirmante - antioxidante. Efecto voluminizante en lineas dinámicas. Disminuye la inflamacion. Hidrata la piel. Estimula la formación de colágeno. Estimula las defensas. Elimina bacterias. Reduce el enrojecimiento .",
+    "application": "Aplicar diariamente por la mañana Sensitive Skin, el tratamiento puede potenciarse con Monodosis-Vitamina F aplicadas durante la noche.",
+    "actives": ["Argán Oil", "Sepilifth DPHP", "Avena Sativa", "Filtro solar"],
+    "ph": "",
+    "variants": [{
+      "code": 1041,
+      "content": "50 ml.",
+      "price": 200,
+      "sellPrice": 400
+    }, {
+      "code": 2041,
+      "content": "200 ml",
+      "price": 340,
+      "sellPrice": ""
+    }],
+    "name": "Sensitive Cream"
+  }],
+  "Higiene": [{
+    "category": ["Higiene"],
+    "shortDesc": "Emulsión de limpieza, demaquillante, de PH neutro, hipoalergénica. Indicada para todo tipo de piel, aún las más sensibles.",
+    "fullDesc": "Limpia profundamente la epidermis, se equilibra el pH de la piel. Elimina suavemente las impurezas sin dañar la humedad y el equilibrio natural. Prepara, purificará y acondiciona a la piel para recibir los beneficios óptimos de los mejores cuidados. La piel está lista para recibir los productos propios de la Fase de Tratamiento.",
+    "application": "Aplicar con suaves maniobras, retirar",
+    "actives": ["Matricaria chamomilla"],
+    "ph": "7",
+    "variants": [{
+      "code": 1005,
+      "content": "120 ml.",
+      "price": 160,
+      "sellPrice": 320
+    }, {
+      "code": 2005,
+      "content": "500 ml.",
+      "price": 290,
+      "sellPrice": ""
+    }],
+    "name": "Emulsión de Higiene"
+  }, {
+    "category": ["Higiene"],
+    "shortDesc": "Piel fresca, descongestiva y limpia. Prepara a la piel para recibir el tratamiento posterior",
+    "fullDesc": "Suspensión de micro gránulos de silicatos naturales de tamaño heterogéneo. Indicado para exfoliación manual, aún en pieles sensibles. Hipoalergénico. Facial y corporal",
+    "application": "Aplicar sobre la piel, humedecer con agua y trabajar en forma suave y circular de tres a cinco minutos. Retirar con esponja y agua.",
+    "actives": ["Silicatos naturales"],
+    "ph": "",
+    "variants": [{
+      "code": 2008,
+      "content": "250 ml.",
+      "price": 290,
+      "sellPrice": ""
+    }],
+    "name": "Exfoliating Scrub"
+  }],
+  "Máscaras": [{
+    "category": ["Máscaras"],
+    "shortDesc": "Los ácidos Linoleico y Linolénico, aportan mayor protección a las células de Langerhans, mejorando notablemente la protección de la piel",
+    "fullDesc": "Máscara activa. Ayuda a aumentar los mecanismos de defensa de la piel, aportando beneficios en tratamientos de rosácea, acné, cutis graso, manchas cutáneas y pieles desvitalizadas. Aporta ácidos grasos insaturados esenciales, disminuye la inflamación, ayuda a normalizar la piel",
+    "application": "Aplicar con la piel limpia, luego de retirar Exfoliating Scrub, percibirá un suave picor durante un minuto al llegar a las zonas más profundas de la piel. Dejar actuar durante 20 minutos, observará al retirar una piel suave, limpia y fresca, aún en las instancias más sensibles. Puede combinarse en métodos sinérgicos con Micropeeling o Peeling Biorregulador",
+    "actives": ["Acido Linoleico", "Acido Linolénico", "Avena Sativa", "Malva", "Matricaria Chamomilla"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 2009,
+      "content": "250 ml.",
+      "price": 330,
+      "sellPrice": ""
+    }],
+    "name": "Refreshing Mask"
+  }, {
+    "category": ["Máscaras"],
+    "shortDesc": "SpecificMask aporta máxima tecnología en renovación celular, disminuye las arrugas más profundas de la piel otorgando firmeza y radiante apariencia. Piel más lisa que recupera la belleza y juventud",
+    "fullDesc": "Evita la pérdida de agua transepidérmica. Disminuye arrugas dinámicas. Puede aplicarse sobre labios y párpados, aún en pieles sensibles. Aplicar en combinación con Monodosis Específicas o Micropeeling en tratamientos intensivos anti-envejecimiento.",
+    "application": "Aplicar en rostro, cuello y escote, dejar actuar durante veinte minutos, retirar mediante esponja y agua",
+    "actives": ["Vitamina A", "Vitamina E", "Acido Glicólico", "Acido Salicílico"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 2010,
+      "content": "250 ml.",
+      "price": 350,
+      "sellPrice": ""
+    }],
+    "name": "Specific Mask"
+  }],
+  "Peeling": [{
+    "category": ["Peeling"],
+    "shortDesc": "Fórmula de alto desarrollo con doble función: tratamientos de peeling y aumento en la penetrabilidad de activos, mejorando la renovación celular.",
+    "fullDesc": "Fórmula de alto desarrollo con doble función: tratamientos de peeling, y aumento de penetrabilidad de activos, mejorando la recuperación celular. Indicado para Acné, piel seborreica, cutis graso, disminuir líneas de expresión.",
+    "application": "Tratamiento de peeling: Dejar actuar diez minutos, sin retirar aplicar Refreshing Mask durante diez minutos, retirar. Permeación de activos: Aplicar peeling Bio Regulador, dejar actuar durante tres minutos, retirar, aplicar Monodosis específicas o activos concentrados del 1 al 7 de acuerdo al tratamiento a realizar",
+    "actives": ["Acido Salicílico", "Acido Láctico", "Resorcina"],
+    "ph": "3,5",
+    "variants": [{
+      "code": 2012,
+      "content": "30 ml.",
+      "price": 165,
+      "sellPrice": ""
+    }],
+    "name": "Peeling Bio Regulador"
+  }, {
+    "category": ["Peeling"],
+    "shortDesc": "Peeling de efecto regenerativo de la piel. Ayuda a regular la melanogénesis actuando como blanqueador",
+    "fullDesc": "Peeling de efecto regenerativo de la piel. Ayuda a regular la melanogénesis, actuando como blanqueador. Ayuda a disminuir las imperfecciones de la piel, manchas cutáneas y de manos. Indicado para todo tipo de piel.",
+    "application": "Aplicar sobre piel limpia, luego de retirar ExfoliatingScrub, trabajar las zonas de manchas cutáneas en forma suave y circular durante tres a cinco minutos, extender a toda la piel del rostro y cuello. Dejar actuar durante cinco minutos y sin retirar aplicar SpecificMasck. Dejar actuar quince minutos y retirar mediante esponja y agua.",
+    "actives": ["Acido Glicólico", "Acido Fítico", "Acido Ascórbico"],
+    "ph": "3,5 / 10 %",
+    "variants": [{
+      "code": 2013,
+      "content": "30 ml.",
+      "price": 170,
+      "sellPrice": ""
+    }],
+    "name": "Micropeeling"
+  }],
+  "Ácido Hialurónico": [{
+    "category": ["Ácido Hialurónico"],
+    "shortDesc": "Microdermolift activa de forma inteligente los mecanismos propios de la piel, mediante la acción sinérgica del ácido hialurónico de máxima pureza y vehículos especializados.",
+    "fullDesc": "Piel hidratada con intensidad lisa y luminosa por más tiempo. Un contorno de ojos que alivia para reducir bolsas palpebrales y los signos de fatiga. Especialmente formulado para tratar la delicada zona del contorno de los ojos, esta única textura, reduce líneas de expresión y arrugas con una sensación aterciopelada",
+    "application": "Aplicar en la zona del contorno de los ojos y líneas de expresión",
+    "actives": ["Acido Hialurónico"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1016,
+      "content": "20 ml.",
+      "price": 260,
+      "sellPrice": 520
+    }],
+    "name": "Microdermo Lift"
+  }, {
+    "category": ["Ácido Hialurónico"],
+    "shortDesc": "Serum multi-acción intensivo, disminuye manchas cutáneas y evita el efecto rebote post-estacional. Aporta una intensa hidratación y resultados de suavidad incomparables",
+    "fullDesc": "Piel más firme, suave y elástica. Mejora visiblemente la luminosidad, coloración e hidratación profunda de la piel. Indicado para piel normal, manchas cutáneas, piel deshidratada. ",
+    "application": "Aplicar por la mañana",
+    "actives": ["Acido Hialurónico", "Acido Láctico", "FPS"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1017,
+      "content": "50 ml.",
+      "price": 220,
+      "sellPrice": 440
+    }, {
+      "code": 2017,
+      "content": "120 ml.",
+      "price": 380,
+      "sellPrice": ""
+    }],
+    "name": "Hydra Intensive Serum"
+  }, {
+    "category": ["Ácido Hialurónico"],
+    "shortDesc": "Resblece la hidratación, mejora la renovación celular, suavidad, elasticidad y firmeza, prolongando la juventud de la piel.",
+    "fullDesc": "Fórmula intensiva de acción sinérgica combinada, ayuda a reforzar la barrera protectora de la piel, para lograr una piel hidratada y re-nutrida. Protege a la piel del stress medioambiental. Aporta compensación intensa, inmediata, continua y calma las pieles sensibles.",
+    "application": "Aplicar por la mañana",
+    "actives": ["Acido Hialurónico", "Azuleno", "NMF", "FPS"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1018,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }, {
+      "code": 2018,
+      "content": "120 ml.",
+      "price": 320,
+      "sellPrice": ""
+    }],
+    "name": "Hydra Intensive Tonico"
+  }],
+  "Hombres": [{
+    "category": ["Hombres"],
+    "shortDesc": "Crema facial ultra ligera y elástica, específicamente formulada para la piel del hombre",
+    "fullDesc": "Piel lisa y firme. Disminuye líneas de expresión y arrugas. Indicado para piel con tendencia a seca",
+    "application": "aplicar por la mañana y por la noche",
+    "actives": ["retinol"],
+    "ph": "5",
+    "variants": [{
+      "code": 1020,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }],
+    "name": "RENOVATIO Retinol For Men"
+  }, {
+    "category": ["Hombres"],
+    "shortDesc": "Serum intensivo formulado específicamente para la piel del hombre con filtro solar.",
+    "fullDesc": "Disminuye líneas de expresión y arrugas.",
+    "application": "Aplicar después de afeitar, por la mañana y por la noche",
+    "actives": ["polifenoles de pepitas de uva", "Vitamina C", "FPS"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1021,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }],
+    "name": "RENOVATIO Serum For Men"
+  }, {
+    "category": ["Hombres"],
+    "shortDesc": "Crema facial ultra ligera y elástica formulada específicamente para la piel del hombre.",
+    "fullDesc": "Favorece el normal desarrollo de la piel, disminuye la oleosidad, aspecto saludable, uniforme y matificante de la piel. Indicado para cutis graso",
+    "application": "Aplicar después de afeitar, por la mañana y por la noche.",
+    "actives": ["Acido Salicílico", "Resorcina", "FPS"],
+    "ph": "",
+    "variants": [{
+      "code": 1022,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }],
+    "name": "RENOVATIO Skin Control For Men"
+  }],
+  "Activos Concentrados": [{
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Fórmula de tecnología innovadora, que ayuda a enriquecer, estimular y proteger a la piel de la acción de los radicales libres, compensando las carencias de la piel. Facial y corporal.",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Vitamina C Liposomada"],
+    "ph": "",
+    "variants": [{
+      "code": 2023,
+      "content": "130 ml.",
+      "price": 210,
+      "sellPrice": ""
+    }],
+    "name": "1 Vitamina C Liposomada"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Concentrado activo antioxidante, ayuda a mejorar la firmeza y tonicidad de los tejidos, disminuye el fotoenvejecimieto de la piel. Facial y corporal.",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Acido Lipoico"],
+    "ph": "",
+    "variants": [{
+      "code": 2024,
+      "content": "130 ml.",
+      "price": 200,
+      "sellPrice": ""
+    }],
+    "name": "2 Acido Lipoico"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Serum concentrado activo, específicamente formulado para compensar las carencias de la piel involutiva, mediante la acción sinérgica de oligoelementos marinos y minerales. Facial y corporal",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Oligoelementos marinos", "Zinc", "Cobre"],
+    "ph": "",
+    "variants": [{
+      "code": 2025,
+      "content": "130 ml.",
+      "price": 190,
+      "sellPrice": ""
+    }],
+    "name": "3 Oligoelementos Marinos +Zn+Cu"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Lipolítico. Específicamente formulado para el tratamiento de adiposidad localizada en abdomen, cintura y flancos, caderas, glúteos, parte interna de muslos, rodillas y brazos",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Fosfatidilcolina"],
+    "ph": "",
+    "variants": [{
+      "code": 2026,
+      "content": "130 ml.",
+      "price": 210,
+      "sellPrice": ""
+    }],
+    "name": "4 Fosfatidilcolina"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Celu active concentrado, específicamente formulado para ayudar a disminuir la celulitis, reafirmar y modelar, en el tratamiento corporal.",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Centella Asiática"],
+    "variants": [{
+      "code": 2027,
+      "content": "130 ml.",
+      "price": 200,
+      "sellPrice": ""
+    }],
+    "name": "5 Centella Asiatica"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Concentrado activo rico en algas azules. Contiene los veinte aminoácidos esenciales en perfecto balance + proteínas. Reafirmante, reequilibrante. Facial y corporal",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Espirulina"],
+    "ph": "",
+    "variants": [{
+      "code": 2028,
+      "content": "130 ml.",
+      "price": 190,
+      "sellPrice": ""
+    }],
+    "name": "6 Espirulina"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Tratamiento reafirmante con alto poder nutritivo que, por su composición rica en activos compensadores, mejora en firmeza y elasticidad de la piel, recuperando toda su vitalidad y energía.",
+    "fullDesc": "Espuma corporal, específicamente formulada para potenciar el tratamiento reductor, anticelulítico y tonificante corporal. Ayuda a eliminar el aspecto visible de la celulitis, mejora la tonicidad de los tejidos, disminuye la sensación de piernas cansadas. Reequilibra a la piel en oligoelementos, minerales, aminoácidos y proteínas. Piel más lisa, firme, elástica, suave y luminosa. Puede utilizarse también como apoyo domiciliario",
+    "application": "Apoyo domiciliario: Aplicar antes de hacer ejercicio y después de ducharse. Indicada para todo tipo de piel",
+    "actives": ["Cafeína", "Centella asiática", "Acido Lipoico", "Fosfatidilcolina", "Espirulina", "Vitamina C liposomada", "Oligoelementos marinos + Zn + CU"],
+    "ph": "",
+    "variants": [{
+      "code": 2029,
+      "content": "130 ml.",
+      "price": 200,
+      "sellPrice": ""
+    }],
+    "name": "7 Cafeina"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Tratamiento reafirmante con alto poder nutritivo que, por su composición rica en activos compensadores, mejora en firmeza y elasticidad de la piel, recuperando toda su vitalidad y energía",
+    "fullDesc": "Espuma corporal, específicamente formulada para potenciar el tratamiento reductor, anticelulítico y tonificante corporal. Ayuda a eliminar el aspecto visible de la celulitis, mejora la tonicidad de los tejidos, disminuye la sensación de piernas cansadas. Reequilibra a la piel en oligoelementos, minerales, aminoácidos y proteínas. Piel más lisa, firme, elástica, suave y luminosa. Puede utilizarse también como apoyo domiciliario",
+    "actives": ["Cafeína", "Centella Asiática", "Acido Lipoico", "Fosfatidilcolina", "Espirulina", "Vitamina C Liposomada", "Oligoelementos marinos + Zn + CU"],
+    "application": "En gabinete, aplicar luego del Scrub, en sinergia con activos concentrados, Centella Asiática, Cafeina, Fosfatidilcolina. Puede combinarse con aparatología. Apoyo domiciliario: Aplicar antes de hacer ejercicio y después de ducharse. Indicada para todo tipo de piel.",
+    "variants": [{
+      "code": 1049,
+      "content": "160 ml.",
+      "price": 290,
+      "sellPrice": 580
+    }],
+    "name": "Espuma ACTIVE 7"
+  }],
+  "Monodosis": [{
+    "category": ["Monodosis"],
+    "shortDesc": "Shock hidratante - antioxidante de acción sinérgica: Ayudan a hidratar profundamente la piel y protegerla de la acción medioambiental, revitalizando su resistencia y luminosidad",
+    "fullDesc": "Refuerzan la barrera protectora. Constituyen humectantes antioxidantes con propiedades anti envejecimiento. Indicadas para: Alta hidratación, pacientes con acné, rosácea, piel sensible, hiperqueratosis, psoriasis. Pacientes bajo tratamientos tópicos o sistémicos que resecan la piel.",
+    "application": "Aplicar con la piel limpia, por la mañana y por la noche.",
+    "actives": ["Gluconolactona", "Pentaglicanos"],
+    "ph": "",
+    "variants": [{
+      "code": 1030,
+      "content": "6 x 5 ml.",
+      "price": 540,
+      "sellPrice": 1080
+    }],
+    "name": "Hydroviton - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Ayudan a reafirmar la piel al mismo tiempo que proporcionan protección de alto nivel frente al impacto medioambiental",
+    "fullDesc": "Estimulan las defensas cutáneas y el metabolismo celular. Protectoras de células de Langerhans. Protectoras del sistema inmunitoario de la piel. Indicadas para: el cuidado de la piel sensible, roseacea o afectada por el estrés.",
+    "application": "Aplicar por la mañana y por la noche.",
+    "actives": ["Vitamina C"],
+    "ph": "",
+    "variants": [{
+      "code": 1031,
+      "content": "6 x 5 ml.",
+      "price": 515,
+      "sellPrice": 1030
+    }],
+    "name": "Vitamina F Pure - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Shock sinérgico combinado, monodosis indicadas para el tratamiento de manchas cutáneas, e irregularidades de la pigmentación",
+    "fullDesc": "Promueven la regulación del ciclo celular. Promueven la sobrevivencia celular. Resistencia al estrés y anti-envejecimiento. Activan la producción de sirtuinas acudiendo al rescate y reparando las células dañadas. Indicadas para: tratamiento de manchas cutaneas, anti-envejecimiento ",
+    "application": "Aplicación: trabajar en forma circular en las manchas o tratar zonas con irregularidades pigmentarias, luego extender a toda la piel.",
+    "actives": ["Grosella", "Reservatrol"],
+    "ph": "",
+    "variants": [{
+      "code": 1032,
+      "content": "6 x 5 ml.",
+      "price": 583,
+      "sellPrice": 1166
+    }],
+    "name": "Skin Dose - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Shock antioxidante-antiglicación sinérgico combinado de formulación avanzada.",
+    "fullDesc": "Ayudan a combatir la acción de los radicales libres, restableciendo en la piel su natural belleza y luminosidad desde las primeras aplicaciones. Mejoran el rejuvenecimiento celular. ",
+    "application": "aplicar por la mañana y por la noche",
+    "actives": ["Blueberry", "Mulberry", "Cranberry"],
+    "ph": "",
+    "variants": [{
+      "code": 1033,
+      "content": "6 x 5 ml.",
+      "price": 500,
+      "sellPrice": 1000
+    }],
+    "name": "Bio Dose - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Tratamiento reparador nocturno de contorno de ojos.",
+    "fullDesc": "Calmante, actúa como un escudo frente a las agresiones medioambientales. Fuente de Ácidos Grasos Esenciales, antioxidantes, proteínas, aminoácidos, vitaminas y minerales zinc-selenio- cobre. Las Monodosis HSP- 20, ayudan a restaurar y preservar la apariencia juvenil de la delicada piel de la zona más expresiva del rostro.",
+    "application": "Aplicar por la noche en la zona de contorno de ojos.",
+    "actives": ["Chía", "Sepicalm"],
+    "ph": "",
+    "variants": [{
+      "code": 1034,
+      "content": "6 x 5 ml.",
+      "price": 590,
+      "sellPrice": 1180
+    }],
+    "name": "HSP - 20 - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Avanzado tratamiento anti- envejecimiento. Combinan péptidos y proteínas activas que proporcionan un tratamiento efectivo para mantener la cantidad y calidad del colágeno.",
+    "fullDesc": "Indicadas para contorno de labios y líneas de expresión. Disminuyen líneas de expresión y arrugas, al mismo tiempo que mejoran y reafirman. Anti-Glicación, evitan la formación de los AGEs, subproductos de la glicación cuya acumulación induce irreversiblemente a la pérdida de elasticidad. Piel más descansada, suave y radiante desde el momento de la aplicación.",
+    "application": "Aplicar por la mañana y por la noche",
+    "actives": ["Trylagen"],
+    "ph": "",
+    "variants": [{
+      "code": 1035,
+      "content": "6 x 5 ml.",
+      "price": 630,
+      "sellPrice": 1260
+    }],
+    "name": "Complex AM 40 - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Refuerza los mecanismos de regeneración y recuperación de la piel, mediante múltiples modos de acción frente a los marcadores de envejecimiento de la piel.",
+    "fullDesc": "Tratamiento reparador nocturno. Ricas en aminoácidos. Contienen propiedades reequilibrantes, antiinflamatorias, descongestivas, nutritivas, remineralizantes y re-oxigenantes. Estimulan intercambios celulares. Triple acción reafirmante: Antioxidantes: trampas de exceso de radicales libres en una etapa temprana. Estimulan la contracción de las fibras de colágeno y protegen el tejido de soporte de la piel. Efecto relleno.",
+    "application": "Aplicar todos los días, por la noche en el rostro, cuello y escote",
+    "actives": ["Sepilifth", "Algas azules"],
+    "ph": "",
+    "variants": [{
+      "code": 1036,
+      "content": "6 x 5 ml.",
+      "price": 610,
+      "sellPrice": 1220
+    }],
+    "name": "Complex AM 45 - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Ampollas de máxima tecnología, a base de Vitamina C específicamente estabilizada.",
+    "fullDesc": "Ayudan a combatir el oxígeno reactivo, aportando mayor protección a las células madre de piel Propiedades antioxidantes. ",
+    "application": "Aplicar diariamente por la mañana.",
+    "actives": ["Vitamina C"],
+    "ph": "",
+    "variants": [{
+      "code": 1037,
+      "content": "6 x 5 ml.",
+      "price": 600,
+      "sellPrice": 1200
+    }],
+    "name": "Vitamina C - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Las ampollas ARGAN BIO+ combinan las propiedades únicas del Aceite de Argán, procedente del suroeste de Marruecos, con vehículos específicamente desarrollados",
+    "fullDesc": "Ayudan a retrasar el envejecimiento celular, disminuir estrías y cicatrices. Aportan protección a las células dérmicas. Regeneran la piel y combaten el envejecimiento. Reestructurador y renovador celular. Eliminan tanto las impurezas como las marcas de la edad o del acné. Evitan la inflamación, generan tonicidad.",
+    "application": "Aplicar diariamente. Cuando se traten estrías y cicatrices, aplicar dos veces por día",
+    "actives": ["Argan Oil"],
+    "ph": "",
+    "variants": [{
+      "code": 1038,
+      "content": "6 x 5 ml.",
+      "price": 630,
+      "sellPrice": 1260
+    }],
+    "name": "Argan Bio + - Monodosis"
+  }],
+  "Protección Solar": [{
+    "category": ["Protección Solar"],
+    "shortDesc": "Fluido Facial con color. Protección reforzada frente a los rayos UVA y UVB, gracias a un sistema filtrante óptimo Específico, combinado con Acido Hialurónico, hidratante protector de la piel.",
+    "fullDesc": "Ayuda a prevenir intolerancias solares y daño celular provocado por la acción de rayos UV. Textura fluida, no grasa. Acabado imperceptible. Sin perfume. Sin parabenos, con color",
+    "application": "Aplicar la crema antes de salir a la playa o la piscina, y como mínimo 30 minutos antes de exponerse al sol. Extender PROTECTION TIME 50+ sobre la piel bien seca. Utilizar protección solar aunque esté nublado. Reaplicar cuando sea necesario de acuerdo a cada fototipo cutáneo. Se recomienda cada dos horas para mantener la protección, especialmente después de un baño o nadar",
+    "actives": ["Ácido Hialurónico"],
+    "variants": [{
+      "code": 1044,
+      "content": "40 ml",
+      "price": 290,
+      "sellPrice": 580
+    }],
+    "name": "PROTECTION TIME  Color  Ác Hialurónico"
+  }, {
+    "category": ["Protección Solar"],
+    "shortDesc": "Fluído facial. Protección reforzada frente a los rayos UVA y UVB, gracias a un sistema filtrante óptimo Específico, combinado con Sepicalm S, biovector aminoácido con minerales, mejorando el confort cutáneo.",
+    "fullDesc": "Ayuda a prevenir intolerancias solares. Textura fluida, no graso. Acabado imperceptible. Sin perfume. Sin parabenos. Testeados en USA bajo normas FDA-COLIPA",
+    "application": "Aplicar la crema antes de salir a la playa o la piscina, y como mínimo 30 minutos antes de exponerse al sol. Extender PROTECTION TIME 50+ sobre la piel bien seca. Utilizar protección solar aunque esté nublado. Reaplicar cuando sea necesario de acuerdo a cada fototipo cutáneo. Se recomienda cada dos horas para mantener la protección, especialmente después de un baño o nadar",
+    "actives": ["Sepicalm V.G"],
+    "ph": "",
+    "variants": [{
+      "code": 1045,
+      "content": "40 ml",
+      "price": 280,
+      "sellPrice": 560
+    }],
+    "name": "PROTECTION TIME Sepicalm V.G."
+  }, {
+    "category": ["Protección Solar"],
+    "shortDesc": "Protección reforzada frente a los rayos UVA y UVB, gracias a un sistema filtrante óptimo Específico, combinado con Grosella, antioxidante protector de la piel.",
+    "fullDesc": "Ayuda a prevenir intolerancias solares, manchas pigmentarias foto-inducidas y daño celular provocado por la acción de los radicales libres y rayos UV. Textura fluida, no grasa, acabado imperceptible. Sin perfume. Sin parabenos, con color.",
+    "application": "Aplicar la crema antes de salir a la playa o la piscina, y como mínimo 30 minutos antes de exponerse al sol. Extender PROTECTION TIME 50+ sobre la piel bien seca. Utilizar protección solar aunque esté nublado. Reaplicar cuando sea necesario de acuerdo a cada fototipo cutáneo. Se recomienda cada dos horas para mantener la protección, especialmente después de un baño o nadar",
+    "actives": ["Grosella"],
+    "variants": [{
+      "code": 2044,
+      "content": "200 ml",
+      "price": 610,
+      "sellPrice": 1220
+    }],
+    "name": "PROTECTION TIME  Color Grosella"
+  }, {
+    "category": ["Protección Solar"],
+    "shortDesc": "Protección reforzada frente a los rayos UVA y UVB, gracias a un sistema filtrante óptimo Específico, combinado con Aceite de Sésamo, rico en ácidos grasos esenciales, coadyuvante en la protección.",
+    "fullDesc": "Ayuda a prevenir intolerancias solares, manchas pigmentarias foto-inducidas y daño celular provocado por la acción de rayos UV. Textura ultra fluida, no grasa, no deja marcas blancas. Acabado imperceptible. Sin perfume. Sin parabenos",
+    "application": "Aplicar la crema antes de salir a la playa o la piscina, y como mínimo 30 minutos antes de exponerse al sol. Extender PROTECTION TIME 50+ sobre la piel bien seca. Utilizar protección solar aunque esté nublado. Reaplicar cuando sea necesario de acuerdo a cada fototipo cutáneo. Se recomienda cada dos horas para mantener la protección, especialmente después de un baño o nadar",
+    "actives": ["Aceite de Sésamo"],
+    "variants": [{
+      "code": 2045,
+      "content": "200 ml",
+      "price": 600,
+      "sellPrice": 1200
+    }],
+    "name": "PROTECTION TIME  Aceite de Sésamo"
+  }],
+  "Corporales": [{
+    "category": ["Corporales"],
+    "shortDesc": "Crema antioxidante corporal, específicamente formulada para proteger a la piel de la acción de los radicales libres",
+    "fullDesc": "Aportando mayor beneficio mediante la protección de la acción solar. Evita el fotoenvejecimiento de la piel. Tonificante, Mejora la hidratación y elasticidad. Piel de seda.",
+    "application": "",
+    "actives": ["Polifenoles de pepitas de uva", "Tocoferol", "FPS"],
+    "ph": "",
+    "variants": [{
+      "code": 1046,
+      "content": "200ml.",
+      "price": 190,
+      "sellPrice": 380
+    }, {
+      "code": 2046,
+      "content": "500 ml.",
+      "price": 370,
+      "sellPrice": ""
+    }],
+    "name": "Crema Antioxidante Corporal"
+  }, {
+    "category": ["Corporales"],
+    "shortDesc": "",
+    "fullDesc": "Strialess Cell2Cell prevención y corrección, ayuda a reforzar la elasticidad. Renovación celular y flexibilidad. Mejora el aspecto visible de la piel",
+    "actives": ["Cell2Cell", "DermCom"],
+    "variants": [{
+      "code": 1050,
+      "content": "160 ml.",
+      "price": 300,
+      "sellPrice": 600
+    }],
+    "name": "Espuma Strialess"
+  }, {
+    "category": ["Corporales"],
+    "shortDesc": "",
+    "fullDesc": "Booster shot corporal, programa intensivo. Indicado para ayudar a reducir las acumulaciones grasas, donde mas lo necesitas, procurando el bienestar",
+    "actives": ["Adiposlim", "Garcinia Cambogia"],
+    "variants": [{
+      "code": 1051,
+      "content": "160ml.",
+      "price": 300,
+      "sellPrice": 600
+    }],
+    "name": "S.O.S Sculpt"
+  }, {
+    "category": ["Corporales"],
+    "shortDesc": "",
+    "fullDesc": "Booster shot corporal. Complejo de activación global que ayuda a reducir y evitar nuevos almacenamientos. Previene y protege",
+    "actives": ["Adopoless", "Cafe Verde"],
+    "variants": [{
+      "code": 1052,
+      "content": "160 ml.",
+      "price": 300,
+      "sellPrice": 600
+    }],
+    "name": "S.O.S Extreme"
+  }]
+};
+var e = React.createElement;
+var categories = ["Higiene", "Máscaras", "Ácido Hialurónico", "Peeling", "Corporales", "Hombres", "Protección Intensiva", "Monodosis", "Activos Concentrados", "Protección Solar"];
+
+var Section = function Section(title, paragraph) {
+  return e('div', null, e('h4', {
+    className: 'section-name'
+  }, title), e('p', {
+    className: 'section-body'
+  }, paragraph));
+};
+
+var Product = function Product(product, key) {
+  return e('div', {
+    key: key,
+    className: 'product-container'
+  }, e('h3', {
+    className: 'product-name'
+  }, product.name), e('div', {
+    className: 'product-body'
+  }, e('p', {
+    className: 'product-short-desc'
+  }, product.shortDesc), Section('Descripción', product.fullDesc), Section('Aplicación', product.application)));
+};
+
+var Category = function Category(categoryName, products) {
+  return e('div', {
+    className: 'category-container'
+  }, e('div', {
+    className: 'category-title',
+    id: categoryName.toLowerCase().replace(' ', '-')
+  }, e('h2', {
+    className: 'category-name'
+  }, categoryName)), products.map(function (p, i) {
+    return Product(p, i);
+  }));
+};
+
+var Vademecum = function Vademecum() {
+  return categories.map(function (categoryName, i) {
+    return e('div', {
+      key: i
+    }, Category(categoryName, products[categoryName]));
+  });
+};
+
+var domContainer = document.querySelector('#vademecum');
+ReactDOM.render(e('div', {
+  className: ''
+}, Vademecum()), domContainer);

+ 21 - 10
js/vademecum.js

@@ -1158,14 +1158,22 @@ const categories = [
   "Protección Solar",
 ]
 
-const Section = (title, paragraph) => {
-  return e(
-    'div',
-    null,
-    e('h4', {className: 'section-name'}, title),
-    e('p', {className: 'section-body'}, paragraph)
-  )
-};
+const Section = (title, paragraph) => (
+  <div>
+    <h4 className="section-name">
+      { title }
+    </h4>
+    <p className="section-body">
+      { paragraph }
+    </p>
+  </div>
+);
+
+const Product = (product, key) => (
+  <div className="product-container">
+
+  </div>
+);
 
 const Product = (product, key) => {
   return e(
@@ -1186,7 +1194,9 @@ const Category = (categoryName, products) => {
   return e(
     'div',
     {className: 'category-container'},
-    e('h2', {className: 'category-name'}, categoryName),
+    e('div', {className: 'category-title', id: categoryName.toLowerCase().replace(' ', '-')}, 
+      e('h2', {className: 'category-name'}, categoryName)
+    ),
     products.map((p, i) => Product(p, i))
   )
 }
@@ -1202,8 +1212,9 @@ const Vademecum = () => {
 }
 
 const domContainer = document.querySelector('#vademecum');
+
 ReactDOM.render(e(
   'div',
   {className: ''},
   Vademecum()
-), domContainer);
+), domContainer);

Fichier diff supprimé car celui-ci est trop grand
+ 6881 - 0
lib/polyfill.min.js


Fichier diff supprimé car celui-ci est trop grand
+ 6293 - 0
lib/react-dom.production.min.js


+ 857 - 0
lib/react.production.min.js

@@ -0,0 +1,857 @@
+/** @license React v16.8.6
+ * react.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+'use strict';
+
+require("core-js/modules/es6.regexp.split");
+
+require("core-js/modules/es7.symbol.async-iterator");
+
+require("core-js/modules/es6.symbol");
+
+require("core-js/modules/es6.regexp.to-string");
+
+require("core-js/modules/web.dom.iterable");
+
+require("core-js/modules/es6.regexp.replace");
+
+(function (N, q) {
+  "object" === typeof exports && "undefined" !== typeof module ? module.exports = q() : "function" === typeof define && define.amd ? define(q) : N.React = q();
+})(void 0, function () {
+  function N(a, b, d, g, p, c, e, h) {
+    if (!a) {
+      a = void 0;
+      if (void 0 === b) a = Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else {
+        var n = [d, g, p, c, e, h],
+            f = 0;
+        a = Error(b.replace(/%s/g, function () {
+          return n[f++];
+        }));
+        a.name = "Invariant Violation";
+      }
+      a.framesToPop = 1;
+      throw a;
+    }
+  }
+
+  function q(a) {
+    for (var b = arguments.length - 1, d = "https://reactjs.org/docs/error-decoder.html?invariant=" + a, g = 0; g < b; g++) d += "&args[]=" + encodeURIComponent(arguments[g + 1]);
+
+    N(!1, "Minified React error #" + a + "; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ", d);
+  }
+
+  function t(a, b, d) {
+    this.props = a;
+    this.context = b;
+    this.refs = ba;
+    this.updater = d || ca;
+  }
+
+  function da() {}
+
+  function O(a, b, d) {
+    this.props = a;
+    this.context = b;
+    this.refs = ba;
+    this.updater = d || ca;
+  }
+
+  function u() {
+    if (!x) {
+      var a = c.expirationTime;
+      C ? P() : C = !0;
+
+      _D(ta, a);
+    }
+  }
+
+  function Q() {
+    var a = c,
+        b = c.next;
+    if (c === b) c = null;else {
+      var d = c.previous;
+      c = d.next = b;
+      b.previous = d;
+    }
+    a.next = a.previous = null;
+    d = a.callback;
+    b = a.expirationTime;
+    a = a.priorityLevel;
+    var g = f,
+        p = E;
+    f = a;
+    E = b;
+
+    try {
+      var n = d();
+    } finally {
+      f = g, E = p;
+    }
+
+    if ("function" === typeof n) if (n = {
+      callback: n,
+      priorityLevel: a,
+      expirationTime: b,
+      next: null,
+      previous: null
+    }, null === c) c = n.next = n.previous = n;else {
+      d = null;
+      a = c;
+
+      do {
+        if (a.expirationTime >= b) {
+          d = a;
+          break;
+        }
+
+        a = a.next;
+      } while (a !== c);
+
+      null === d ? d = c : d === c && (c = n, u());
+      b = d.previous;
+      b.next = d.previous = n;
+      n.next = d;
+      n.previous = b;
+    }
+  }
+
+  function F() {
+    if (-1 === k && null !== c && 1 === c.priorityLevel) {
+      x = !0;
+
+      try {
+        do Q(); while (null !== c && 1 === c.priorityLevel);
+      } finally {
+        x = !1, null !== c ? u() : C = !1;
+      }
+    }
+  }
+
+  function ta(a) {
+    x = !0;
+    var b = G;
+    G = a;
+
+    try {
+      if (a) for (; null !== c;) {
+        var d = l();
+
+        if (c.expirationTime <= d) {
+          do Q(); while (null !== c && c.expirationTime <= d);
+        } else break;
+      } else if (null !== c) {
+        do Q(); while (null !== c && !H());
+      }
+    } finally {
+      x = !1, G = b, null !== c ? u() : C = !1, F();
+    }
+  }
+
+  function ea(a, b, d) {
+    var g = void 0,
+        p = {},
+        c = null,
+        e = null;
+    if (null != b) for (g in void 0 !== b.ref && (e = b.ref), void 0 !== b.key && (c = "" + b.key), b) fa.call(b, g) && !ha.hasOwnProperty(g) && (p[g] = b[g]);
+    var h = arguments.length - 2;
+    if (1 === h) p.children = d;else if (1 < h) {
+      for (var f = Array(h), k = 0; k < h; k++) f[k] = arguments[k + 2];
+
+      p.children = f;
+    }
+    if (a && a.defaultProps) for (g in h = a.defaultProps, h) void 0 === p[g] && (p[g] = h[g]);
+    return {
+      $$typeof: y,
+      type: a,
+      key: c,
+      ref: e,
+      props: p,
+      _owner: R.current
+    };
+  }
+
+  function ua(a, b) {
+    return {
+      $$typeof: y,
+      type: a.type,
+      key: b,
+      ref: a.ref,
+      props: a.props,
+      _owner: a._owner
+    };
+  }
+
+  function S(a) {
+    return "object" === typeof a && null !== a && a.$$typeof === y;
+  }
+
+  function va(a) {
+    var b = {
+      "=": "=0",
+      ":": "=2"
+    };
+    return "$" + ("" + a).replace(/[=:]/g, function (a) {
+      return b[a];
+    });
+  }
+
+  function ia(a, b, d, g) {
+    if (I.length) {
+      var c = I.pop();
+      c.result = a;
+      c.keyPrefix = b;
+      c.func = d;
+      c.context = g;
+      c.count = 0;
+      return c;
+    }
+
+    return {
+      result: a,
+      keyPrefix: b,
+      func: d,
+      context: g,
+      count: 0
+    };
+  }
+
+  function ja(a) {
+    a.result = null;
+    a.keyPrefix = null;
+    a.func = null;
+    a.context = null;
+    a.count = 0;
+    10 > I.length && I.push(a);
+  }
+
+  function T(a, b, d, g) {
+    var c = typeof a;
+    if ("undefined" === c || "boolean" === c) a = null;
+    var e = !1;
+    if (null === a) e = !0;else switch (c) {
+      case "string":
+      case "number":
+        e = !0;
+        break;
+
+      case "object":
+        switch (a.$$typeof) {
+          case y:
+          case wa:
+            e = !0;
+        }
+
+    }
+    if (e) return d(g, a, "" === b ? "." + U(a, 0) : b), 1;
+    e = 0;
+    b = "" === b ? "." : b + ":";
+    if (Array.isArray(a)) for (var f = 0; f < a.length; f++) {
+      c = a[f];
+      var h = b + U(c, f);
+      e += T(c, h, d, g);
+    } else if (null === a || "object" !== typeof a ? h = null : (h = ka && a[ka] || a["@@iterator"], h = "function" === typeof h ? h : null), "function" === typeof h) for (a = h.call(a), f = 0; !(c = a.next()).done;) c = c.value, h = b + U(c, f++), e += T(c, h, d, g);else "object" === c && (d = "" + a, q("31", "[object Object]" === d ? "object with keys {" + Object.keys(a).join(", ") + "}" : d, ""));
+    return e;
+  }
+
+  function V(a, b, d) {
+    return null == a ? 0 : T(a, "", b, d);
+  }
+
+  function U(a, b) {
+    return "object" === typeof a && null !== a && null != a.key ? va(a.key) : b.toString(36);
+  }
+
+  function xa(a, b, d) {
+    a.func.call(a.context, b, a.count++);
+  }
+
+  function ya(a, b, d) {
+    var g = a.result,
+        c = a.keyPrefix;
+    a = a.func.call(a.context, b, a.count++);
+    Array.isArray(a) ? W(a, g, d, function (a) {
+      return a;
+    }) : null != a && (S(a) && (a = ua(a, c + (!a.key || b && b.key === a.key ? "" : ("" + a.key).replace(la, "$&/") + "/") + d)), g.push(a));
+  }
+
+  function W(a, b, d, g, c) {
+    var e = "";
+    null != d && (e = ("" + d).replace(la, "$&/") + "/");
+    b = ia(b, e, g, c);
+    V(a, ya, b);
+    ja(b);
+  }
+
+  function m() {
+    var a = ma.current;
+    null === a ? q("321") : void 0;
+    return a;
+  }
+
+  var e = "function" === typeof Symbol && Symbol.for,
+      y = e ? Symbol.for("react.element") : 60103,
+      wa = e ? Symbol.for("react.portal") : 60106,
+      r = e ? Symbol.for("react.fragment") : 60107,
+      X = e ? Symbol.for("react.strict_mode") : 60108,
+      za = e ? Symbol.for("react.profiler") : 60114,
+      Aa = e ? Symbol.for("react.provider") : 60109,
+      Ba = e ? Symbol.for("react.context") : 60110,
+      Ca = e ? Symbol.for("react.concurrent_mode") : 60111,
+      Da = e ? Symbol.for("react.forward_ref") : 60112,
+      Ea = e ? Symbol.for("react.suspense") : 60113,
+      Fa = e ? Symbol.for("react.memo") : 60115,
+      Ga = e ? Symbol.for("react.lazy") : 60116,
+      ka = "function" === typeof Symbol && Symbol.iterator,
+      na = Object.getOwnPropertySymbols,
+      Ha = Object.prototype.hasOwnProperty,
+      Ia = Object.prototype.propertyIsEnumerable,
+      J = function () {
+    try {
+      if (!Object.assign) return !1;
+      var a = new String("abc");
+      a[5] = "de";
+      if ("5" === Object.getOwnPropertyNames(a)[0]) return !1;
+      var b = {};
+
+      for (a = 0; 10 > a; a++) b["_" + String.fromCharCode(a)] = a;
+
+      if ("0123456789" !== Object.getOwnPropertyNames(b).map(function (a) {
+        return b[a];
+      }).join("")) return !1;
+      var d = {};
+      "abcdefghijklmnopqrst".split("").forEach(function (a) {
+        d[a] = a;
+      });
+      return "abcdefghijklmnopqrst" !== Object.keys(Object.assign({}, d)).join("") ? !1 : !0;
+    } catch (g) {
+      return !1;
+    }
+  }() ? Object.assign : function (a, b) {
+    if (null === a || void 0 === a) throw new TypeError("Object.assign cannot be called with null or undefined");
+    var d = Object(a);
+
+    for (var c, e = 1; e < arguments.length; e++) {
+      var f = Object(arguments[e]);
+
+      for (var k in f) Ha.call(f, k) && (d[k] = f[k]);
+
+      if (na) {
+        c = na(f);
+
+        for (var h = 0; h < c.length; h++) Ia.call(f, c[h]) && (d[c[h]] = f[c[h]]);
+      }
+    }
+
+    return d;
+  },
+      ca = {
+    isMounted: function isMounted(a) {
+      return !1;
+    },
+    enqueueForceUpdate: function enqueueForceUpdate(a, b, d) {},
+    enqueueReplaceState: function enqueueReplaceState(a, b, d, c) {},
+    enqueueSetState: function enqueueSetState(a, b, d, c) {}
+  },
+      ba = {};
+  t.prototype.isReactComponent = {};
+
+  t.prototype.setState = function (a, b) {
+    "object" !== typeof a && "function" !== typeof a && null != a ? q("85") : void 0;
+    this.updater.enqueueSetState(this, a, b, "setState");
+  };
+
+  t.prototype.forceUpdate = function (a) {
+    this.updater.enqueueForceUpdate(this, a, "forceUpdate");
+  };
+
+  da.prototype = t.prototype;
+  e = O.prototype = new da();
+  e.constructor = O;
+  J(e, t.prototype);
+  e.isPureReactComponent = !0;
+
+  var c = null,
+      G = !1,
+      f = 3,
+      k = -1,
+      E = -1,
+      x = !1,
+      C = !1,
+      Ja = Date,
+      Ka = "function" === typeof setTimeout ? setTimeout : void 0,
+      La = "function" === typeof clearTimeout ? clearTimeout : void 0,
+      oa = "function" === typeof requestAnimationFrame ? requestAnimationFrame : void 0,
+      pa = "function" === typeof cancelAnimationFrame ? cancelAnimationFrame : void 0,
+      qa,
+      ra,
+      Y = function Y(a) {
+    qa = oa(function (b) {
+      La(ra);
+      a(b);
+    });
+    ra = Ka(function () {
+      pa(qa);
+      a(l());
+    }, 100);
+  };
+
+  if ("object" === typeof performance && "function" === typeof performance.now) {
+    var Ma = performance;
+
+    var l = function l() {
+      return Ma.now();
+    };
+  } else l = function l() {
+    return Ja.now();
+  };
+
+  e = null;
+  "undefined" !== typeof window ? e = window : "undefined" !== typeof global && (e = global);
+
+  if (e && e._schedMock) {
+    e = e._schedMock;
+    var _D = e[0];
+    var P = e[1];
+    var H = e[2];
+    l = e[3];
+  } else if ("undefined" === typeof window || "function" !== typeof MessageChannel) {
+    var v = null,
+        Na = function Na(a) {
+      if (null !== v) try {
+        v(a);
+      } finally {
+        v = null;
+      }
+    };
+
+    _D = function D(a, b) {
+      null !== v ? setTimeout(_D, 0, a) : (v = a, setTimeout(Na, 0, !1));
+    };
+
+    P = function P() {
+      v = null;
+    };
+
+    H = function H() {
+      return !1;
+    };
+  } else {
+    "undefined" !== typeof console && ("function" !== typeof oa && console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"), "function" !== typeof pa && console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"));
+    var w = null,
+        K = !1,
+        z = -1,
+        A = !1,
+        Z = !1,
+        L = 0,
+        M = 33,
+        B = 33;
+
+    H = function H() {
+      return L <= l();
+    };
+
+    e = new MessageChannel();
+    var sa = e.port2;
+
+    e.port1.onmessage = function (a) {
+      K = !1;
+      a = w;
+      var b = z;
+      w = null;
+      z = -1;
+      var d = l(),
+          c = !1;
+      if (0 >= L - d) if (-1 !== b && b <= d) c = !0;else {
+        A || (A = !0, Y(aa));
+        w = a;
+        z = b;
+        return;
+      }
+
+      if (null !== a) {
+        Z = !0;
+
+        try {
+          a(c);
+        } finally {
+          Z = !1;
+        }
+      }
+    };
+
+    var aa = function aa(a) {
+      if (null !== w) {
+        Y(aa);
+        var b = a - L + B;
+        b < B && M < B ? (8 > b && (b = 8), B = b < M ? M : b) : M = b;
+        L = a + B;
+        K || (K = !0, sa.postMessage(void 0));
+      } else A = !1;
+    };
+
+    _D = function _D(a, b) {
+      w = a;
+      z = b;
+      Z || 0 > b ? sa.postMessage(void 0) : A || (A = !0, Y(aa));
+    };
+
+    P = function P() {
+      w = null;
+      K = !1;
+      z = -1;
+    };
+  }
+
+  var Oa = 0,
+      ma = {
+    current: null
+  },
+      R = {
+    current: null
+  };
+  e = {
+    ReactCurrentDispatcher: ma,
+    ReactCurrentOwner: R,
+    assign: J
+  };
+  J(e, {
+    Scheduler: {
+      unstable_cancelCallback: function unstable_cancelCallback(a) {
+        var b = a.next;
+
+        if (null !== b) {
+          if (b === a) c = null;else {
+            a === c && (c = b);
+            var d = a.previous;
+            d.next = b;
+            b.previous = d;
+          }
+          a.next = a.previous = null;
+        }
+      },
+      unstable_shouldYield: function unstable_shouldYield() {
+        return !G && (null !== c && c.expirationTime < E || H());
+      },
+      unstable_now: l,
+      unstable_scheduleCallback: function unstable_scheduleCallback(a, b) {
+        var d = -1 !== k ? k : l();
+        if ("object" === typeof b && null !== b && "number" === typeof b.timeout) b = d + b.timeout;else switch (f) {
+          case 1:
+            b = d + -1;
+            break;
+
+          case 2:
+            b = d + 250;
+            break;
+
+          case 5:
+            b = d + 1073741823;
+            break;
+
+          case 4:
+            b = d + 1E4;
+            break;
+
+          default:
+            b = d + 5E3;
+        }
+        a = {
+          callback: a,
+          priorityLevel: f,
+          expirationTime: b,
+          next: null,
+          previous: null
+        };
+        if (null === c) c = a.next = a.previous = a, u();else {
+          d = null;
+          var g = c;
+
+          do {
+            if (g.expirationTime > b) {
+              d = g;
+              break;
+            }
+
+            g = g.next;
+          } while (g !== c);
+
+          null === d ? d = c : d === c && (c = a, u());
+          b = d.previous;
+          b.next = d.previous = a;
+          a.next = d;
+          a.previous = b;
+        }
+        return a;
+      },
+      unstable_runWithPriority: function unstable_runWithPriority(a, b) {
+        switch (a) {
+          case 1:
+          case 2:
+          case 3:
+          case 4:
+          case 5:
+            break;
+
+          default:
+            a = 3;
+        }
+
+        var d = f,
+            c = k;
+        f = a;
+        k = l();
+
+        try {
+          return b();
+        } finally {
+          f = d, k = c, F();
+        }
+      },
+      unstable_next: function unstable_next(a) {
+        switch (f) {
+          case 1:
+          case 2:
+          case 3:
+            var b = 3;
+            break;
+
+          default:
+            b = f;
+        }
+
+        var d = f,
+            c = k;
+        f = b;
+        k = l();
+
+        try {
+          return a();
+        } finally {
+          f = d, k = c, F();
+        }
+      },
+      unstable_wrapCallback: function unstable_wrapCallback(a) {
+        var b = f;
+        return function () {
+          var d = f,
+              c = k;
+          f = b;
+          k = l();
+
+          try {
+            return a.apply(this, arguments);
+          } finally {
+            f = d, k = c, F();
+          }
+        };
+      },
+      unstable_getFirstCallbackNode: function unstable_getFirstCallbackNode() {
+        return c;
+      },
+      unstable_pauseExecution: function unstable_pauseExecution() {},
+      unstable_continueExecution: function unstable_continueExecution() {
+        null !== c && u();
+      },
+      unstable_getCurrentPriorityLevel: function unstable_getCurrentPriorityLevel() {
+        return f;
+      },
+      unstable_IdlePriority: 5,
+      unstable_ImmediatePriority: 1,
+      unstable_LowPriority: 4,
+      unstable_NormalPriority: 3,
+      unstable_UserBlockingPriority: 2
+    },
+    SchedulerTracing: {
+      __interactionsRef: null,
+      __subscriberRef: null,
+      unstable_clear: function unstable_clear(a) {
+        return a();
+      },
+      unstable_getCurrent: function unstable_getCurrent() {
+        return null;
+      },
+      unstable_getThreadID: function unstable_getThreadID() {
+        return ++Oa;
+      },
+      unstable_subscribe: function unstable_subscribe(a) {},
+      unstable_trace: function unstable_trace(a, b, d) {
+        return d();
+      },
+      unstable_unsubscribe: function unstable_unsubscribe(a) {},
+      unstable_wrap: function unstable_wrap(a) {
+        return a;
+      }
+    }
+  });
+  var fa = Object.prototype.hasOwnProperty,
+      ha = {
+    key: !0,
+    ref: !0,
+    __self: !0,
+    __source: !0
+  },
+      la = /\/+/g,
+      I = [];
+  r = {
+    Children: {
+      map: function map(a, b, d) {
+        if (null == a) return a;
+        var c = [];
+        W(a, c, null, b, d);
+        return c;
+      },
+      forEach: function forEach(a, b, d) {
+        if (null == a) return a;
+        b = ia(null, null, b, d);
+        V(a, xa, b);
+        ja(b);
+      },
+      count: function count(a) {
+        return V(a, function () {
+          return null;
+        }, null);
+      },
+      toArray: function toArray(a) {
+        var b = [];
+        W(a, b, null, function (a) {
+          return a;
+        });
+        return b;
+      },
+      only: function only(a) {
+        S(a) ? void 0 : q("143");
+        return a;
+      }
+    },
+    createRef: function createRef() {
+      return {
+        current: null
+      };
+    },
+    Component: t,
+    PureComponent: O,
+    createContext: function createContext(a, b) {
+      void 0 === b && (b = null);
+      a = {
+        $$typeof: Ba,
+        _calculateChangedBits: b,
+        _currentValue: a,
+        _currentValue2: a,
+        _threadCount: 0,
+        Provider: null,
+        Consumer: null
+      };
+      a.Provider = {
+        $$typeof: Aa,
+        _context: a
+      };
+      return a.Consumer = a;
+    },
+    forwardRef: function forwardRef(a) {
+      return {
+        $$typeof: Da,
+        render: a
+      };
+    },
+    lazy: function lazy(a) {
+      return {
+        $$typeof: Ga,
+        _ctor: a,
+        _status: -1,
+        _result: null
+      };
+    },
+    memo: function memo(a, b) {
+      return {
+        $$typeof: Fa,
+        type: a,
+        compare: void 0 === b ? null : b
+      };
+    },
+    useCallback: function useCallback(a, b) {
+      return m().useCallback(a, b);
+    },
+    useContext: function useContext(a, b) {
+      return m().useContext(a, b);
+    },
+    useEffect: function useEffect(a, b) {
+      return m().useEffect(a, b);
+    },
+    useImperativeHandle: function useImperativeHandle(a, b, d) {
+      return m().useImperativeHandle(a, b, d);
+    },
+    useDebugValue: function useDebugValue(a, b) {},
+    useLayoutEffect: function useLayoutEffect(a, b) {
+      return m().useLayoutEffect(a, b);
+    },
+    useMemo: function useMemo(a, b) {
+      return m().useMemo(a, b);
+    },
+    useReducer: function useReducer(a, b, d) {
+      return m().useReducer(a, b, d);
+    },
+    useRef: function useRef(a) {
+      return m().useRef(a);
+    },
+    useState: function useState(a) {
+      return m().useState(a);
+    },
+    Fragment: r,
+    StrictMode: X,
+    Suspense: Ea,
+    createElement: ea,
+    cloneElement: function cloneElement(a, b, d) {
+      null === a || void 0 === a ? q("267", a) : void 0;
+      var c = void 0,
+          e = J({}, a.props),
+          f = a.key,
+          k = a.ref,
+          h = a._owner;
+
+      if (null != b) {
+        void 0 !== b.ref && (k = b.ref, h = R.current);
+        void 0 !== b.key && (f = "" + b.key);
+        var l = void 0;
+        a.type && a.type.defaultProps && (l = a.type.defaultProps);
+
+        for (c in b) fa.call(b, c) && !ha.hasOwnProperty(c) && (e[c] = void 0 === b[c] && void 0 !== l ? l[c] : b[c]);
+      }
+
+      c = arguments.length - 2;
+      if (1 === c) e.children = d;else if (1 < c) {
+        l = Array(c);
+
+        for (var m = 0; m < c; m++) l[m] = arguments[m + 2];
+
+        e.children = l;
+      }
+      return {
+        $$typeof: y,
+        type: a.type,
+        key: f,
+        ref: k,
+        props: e,
+        _owner: h
+      };
+    },
+    createFactory: function createFactory(a) {
+      var b = ea.bind(null, a);
+      b.type = a;
+      return b;
+    },
+    isValidElement: S,
+    version: "16.8.6",
+    unstable_ConcurrentMode: Ca,
+    unstable_Profiler: za,
+    __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: e
+  };
+  r = (X = {
+    default: r
+  }, r) || X;
+  return r.default || r;
+});

+ 772 - 0
lib/retard.js

@@ -0,0 +1,772 @@
+'use strict';
+
+require("core-js/modules/es6.regexp.replace");
+
+var products = {
+  "Protección Intensiva": [{
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Potente acción antioxidante, un magnífico aporte de firmeza y elasticidad que mejora el color, la luminosidad y la hidratación de la piel retrasando el envejecimiento cutáneo. ",
+    "fullDesc": "Crema antioxidante, humecto – nutritiva, potenciada por la acción de una micro alga, Espirulina, que contiene los veinte aminoácidos en perfecto balance, minerales y proteínas. Textura suave, fluida. Indicada para pieles normales, deshidratadas, menopausia.",
+    "application": "Tras limpiar y tonificar rostro, cuello y escote, aplicar mañana y noche con un suave masaje.",
+    "actives": ["Vitamina A", "Vitamina C", "Vitamina E", "Espirulina"],
+    "ph": "",
+    "variants": [{
+      "code": 1001,
+      "content": "60 ml",
+      "price": 250,
+      "sellPrice": 500
+    }, {
+      "code": 2001,
+      "content": "250 ml.",
+      "price": 398,
+      "sellPrice": ""
+    }],
+    "name": "Complex Bio Vitamins A+E+C"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Una textura única, enriquecida con ingredientes capaces de activar signos claves de la juventud de la piel. Las arrugas se suavizan visiblemente. La piel recupera su luminosidad y turgencia",
+    "fullDesc": "Formulada específicamente para cubrir las necesidades de las pieles más secas. Dota a la piel de una nueva capacidad de autorregeneración y autodefensa. Fórmula rica y exclusiva, perfectamente equilibrada, de alto poder antioxidante. Reduce la profundidad y longitud de las arrugas y previene su aparición prematura. Reafirmante.",
+    "application": "Tras limpiar y tonificar rostro, cuello y escote, aplicar diariamente por la noche. Dependiendo de las necesidades de la piel, se combinará la Crema Sublime Uvit",
+    "actives": ["Polifenoles de pepitas de uva", "Salvia, Tocoferol", "Aceite de Jojoba"],
+    "ph": "",
+    "variants": [{
+      "code": 1002,
+      "content": "60 ml.",
+      "price": 250,
+      "sellPrice": 500
+    }, {
+      "code": 2002,
+      "content": "250 ml.",
+      "price": 398,
+      "sellPrice": ""
+    }],
+    "name": "Sublime Uvit - Crema Reparadora"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Acción altamente hidratante y regeneradora en pieles desvitalizadas. Promueve la formación de colágeno, Ayuda a evitar la pérdida de agua transepidérmica, estimula la liberación de citoquinas. Efecto luminoso en pieles secas, con necesidades. Compensa las carencias de la piel. Ayuda a disminuir estrías y cicatrices.",
+    "fullDesc": "Piel más confortable y aparece revitalizada. Incluso al final del día, la piel se siente nutrida e hidratada. Los signos de cansancio y de la edad parecen reducidos. La piel visiblemente reparada, con toda la luminosidad recuperada. Su textura rica y densa combate las arrugas y líneas de expresión y proporciona el confort que las pieles secas necesitan. Se absorbe con rapidez sin restos grasos.",
+    "application": "Aplicar en rostro, cuello y escote, luego de la crema Sublime Uvit. Aplicar en estrías y cicatrices con suave masaje circular.",
+    "actives": ["Acido Glicólico ( 7%)", "Extracto de algas"],
+    "ph": "",
+    "variants": [{
+      "code": 1003,
+      "content": "50 ml.",
+      "price": 250,
+      "sellPrice": 500
+    }, {
+      "code": 2003,
+      "content": "120 ml.",
+      "price": 380,
+      "sellPrice": ""
+    }],
+    "name": "Audace - Glico Activo"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Mejora la textura, la elasticidad, la tonicidad y la firmeza. Reduce la flacidez. ",
+    "fullDesc": "Mejora el proceso de renovación celular, ayuda a normalizar la queratinización, afinando y eliminando imperfecciones, mejora el sostén. Disminuye la profundidad de las arrugas, los signos visibles de cansancio, disminuye el contraste de manchas. Tono de piel mas uniforme y elástica, efecto matificante. Indicado para piel normal, cutis graso, de más de treinta años. Puede utilizarse en verano",
+    "application": "",
+    "actives": ["Retinol", "Aloe Barbadensis extract"],
+    "ph": "",
+    "variants": [{
+      "code": 1004,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }, {
+      "code": 2004,
+      "content": "120 ml.",
+      "price": 350,
+      "sellPrice": ""
+    }],
+    "name": "Bisome Retinol - Fluido Facial"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Una mirada más joven, las ojeras y los signos de cansancio disminuyen. Piel más fresca, clara y luminosa.",
+    "fullDesc": "Crema activa, formulada específicamente para ayudar a recuperar las funciones principales de la piel y mejorar la comunicación intercelular. Mejora la micro circulación palpebral, disminuye la hiperpigmentación, aumenta la firmeza. Protección activa frente al crono y foto envejecimiento. Testeadodermatológicamente.",
+    "application": "Aplicar diariamente, por la mañana.",
+    "actives": ["Polifenoles de pepitas de uva", "Citopeptinas", "Vitamina C", "Alfabisabolol", "FPS"],
+    "ph": "",
+    "variants": [{
+      "code": 1006,
+      "content": "30 ml.",
+      "price": 280,
+      "sellPrice": 560
+    }],
+    "name": "Repair Eye Contour"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Un tratamiento para impulsar las defensas naturales de la piel y hacerla más resistente a los efectos del estrés diario. Los signos de cansancio acumulado desaparecen, piel confortable y aliviada.",
+    "fullDesc": "Suero antioxidante intensivo, específicamente formulado para proteger a la piel de la acción medioambiental. Efecto relax en líneas de expresión. Reafirmante. Piel de seda. Indicado para todo tipo de piel. Testeado dermatológicamente.",
+    "application": "Tratamiento de peeling: Dejar actuar diez minutos, sin retirar aplicar RefreshingMask durante diez minutos, retirar con esponja y agua. Permeación de activos: Aplicar peeling Bio Regulador, dejar actuar durante tres minutos, retirar, aplicar activos concentrados del 1 al 7 de acuerdo al tratamiento a realizar",
+    "actives": ["Polifenoles de pepitas de uva", "Citopeptinas", "Vitamina C", "FPS"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1007,
+      "content": "50 ml.",
+      "price": 220,
+      "sellPrice": 440
+    }, {
+      "code": 2007,
+      "content": "120 ml.",
+      "price": 380,
+      "sellPrice": ""
+    }],
+    "name": "Uvit Serum Defense"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Innovadora fórmula desarrollada con un vehículo especializado, que no solo mejora la apariencia de la piel, sino que también actúa frente a las causas que generan el acné",
+    "fullDesc": "Específicamente formulado para actuar frente a las causas que generan el acné. Normaliza el PH de la piel, antiséptico, antinflamatorio, anti pruriginoso. Evita la deshidratación de la piel. FPS. Puede combinarse con peeling Biorregulador y Refreshing Mask en tratamiento en gabinete profesional",
+    "application": "Acné: tres aplicaciones diarias, mañana, tarde y noche. No retirar. Piel seborreica: Aplicar por la mañana. No retirar.",
+    "actives": ["Acido Salicílico", "Retinol, Resorcina", "FPS"],
+    "ph": "4,5",
+    "variants": [{
+      "code": 1011,
+      "content": "50 ml.",
+      "price": 180,
+      "sellPrice": 360
+    }, {
+      "code": 2011,
+      "content": "200 ml.",
+      "price": 320,
+      "sellPrice": ""
+    }],
+    "name": "Acne Skin Cleans"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Crema de tratamiento anti-edad inteligente, ayuda a proteger a la piel frente al paso del tiempo. La piel infunde con un desarrollado cóctel de embellecimiento. No sólo corrige, protege su piel de las agresiones externas.",
+    "fullDesc": "Un todo dinámico y simultáneo que protege las barreras de la piel para prevenir la pérdida de humedad, compensar, estimular y equilibrar la tonalidad, dejando la piel iluminada y naturalmente magnífica. Anti-envejecimiento . Hidratatante. Minimiza los poros. Minimiza Imperfecciones. Reduce Enrojecimiento. Mejora la tonalidad. Ilumina. Estimula las defensas. Mejora la vitalidad. Reafirma. Estimula la tonalidad. Estimula la tonallidad en forma pareja.",
+    "application": "Aplicar con la piel limpia por la mañana.",
+    "actives": ["Rosa Mosqueta", "Gluconolactona", "Sésamo", "Beta Caroteno", "Filtro Solar"],
+    "ph": "",
+    "variants": [{
+      "code": 1039,
+      "content": "50 ml.",
+      "price": 230,
+      "sellPrice": 460
+    }],
+    "name": "DD Cream"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Su fórmula rica en despigmentantes, con características anti- envejecimiento, anti-inflamatorios, actúa en un todo dinámico y simultáneo.",
+    "fullDesc": "Estimula los mecanismos de defensa, disminuye el estrés oxidativo, ayudando a disminuir los mecanismos de hiperpigmentación propios de la cascada pigmentaria. Marcada acción anti-envejecimiento, descongestiva- purificante. No contiene parabenos. Despigmentante. Homogeneizante. Anti-envejecimiento. Antioxidante. Descongestiva. Purificante. Foto-protectora.",
+    "application": "Aplicar diariamente por la noche, en las zonas hiperpigmentadas, dejar actuar durante 2 minutos, y extender a todo el rostro. Se puede potenciar el tratamiento con la aplicación de ampollas SKIN-DOSE.",
+    "actives": ["Skin Biolight", "Uva Ursi", "Regaliz", "Filtro solar"],
+    "ph": "",
+    "variants": [{
+      "code": 1040,
+      "content": "50 ml.",
+      "price": 200,
+      "sellPrice": 400
+    }, {
+      "code": 2040,
+      "content": "200 ml",
+      "price": 340,
+      "sellPrice": ""
+    }],
+    "name": "Whitening Cream"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Crema de tratamiento específicamente formulada para el cuidado de la piel sensible, rica en ácidos grasos insaturados, tocoferoles, beta-glucanos, minerales, oligoelementos y vitaminas que ayudan a calmar y proteger a la piel, frente a la acción medioambiental. Triple acción protectora del colágeno. Regeneradora.",
+    "fullDesc": "Equilibrante - reafirmante - antioxidante. Efecto voluminizante en lineas dinámicas. Disminuye la inflamacion. Hidrata la piel. Estimula la formación de colágeno. Estimula las defensas. Elimina bacterias. Reduce el enrojecimiento .",
+    "application": "Aplicar diariamente por la mañana Sensitive Skin, el tratamiento puede potenciarse con Monodosis-Vitamina F aplicadas durante la noche.",
+    "actives": ["Argán Oil", "Sepilifth DPHP", "Avena Sativa", "Filtro solar"],
+    "ph": "",
+    "variants": [{
+      "code": 1041,
+      "content": "50 ml.",
+      "price": 200,
+      "sellPrice": 400
+    }, {
+      "code": 2041,
+      "content": "200 ml",
+      "price": 340,
+      "sellPrice": ""
+    }],
+    "name": "Sensitive Cream"
+  }],
+  "Higiene": [{
+    "category": ["Higiene"],
+    "shortDesc": "Emulsión de limpieza, demaquillante, de PH neutro, hipoalergénica. Indicada para todo tipo de piel, aún las más sensibles.",
+    "fullDesc": "Limpia profundamente la epidermis, se equilibra el pH de la piel. Elimina suavemente las impurezas sin dañar la humedad y el equilibrio natural. Prepara, purificará y acondiciona a la piel para recibir los beneficios óptimos de los mejores cuidados. La piel está lista para recibir los productos propios de la Fase de Tratamiento.",
+    "application": "Aplicar con suaves maniobras, retirar",
+    "actives": ["Matricaria chamomilla"],
+    "ph": "7",
+    "variants": [{
+      "code": 1005,
+      "content": "120 ml.",
+      "price": 160,
+      "sellPrice": 320
+    }, {
+      "code": 2005,
+      "content": "500 ml.",
+      "price": 290,
+      "sellPrice": ""
+    }],
+    "name": "Emulsión de Higiene"
+  }, {
+    "category": ["Higiene"],
+    "shortDesc": "Piel fresca, descongestiva y limpia. Prepara a la piel para recibir el tratamiento posterior",
+    "fullDesc": "Suspensión de micro gránulos de silicatos naturales de tamaño heterogéneo. Indicado para exfoliación manual, aún en pieles sensibles. Hipoalergénico. Facial y corporal",
+    "application": "Aplicar sobre la piel, humedecer con agua y trabajar en forma suave y circular de tres a cinco minutos. Retirar con esponja y agua.",
+    "actives": ["Silicatos naturales"],
+    "ph": "",
+    "variants": [{
+      "code": 2008,
+      "content": "250 ml.",
+      "price": 290,
+      "sellPrice": ""
+    }],
+    "name": "Exfoliating Scrub"
+  }],
+  "Máscaras": [{
+    "category": ["Máscaras"],
+    "shortDesc": "Los ácidos Linoleico y Linolénico, aportan mayor protección a las células de Langerhans, mejorando notablemente la protección de la piel",
+    "fullDesc": "Máscara activa. Ayuda a aumentar los mecanismos de defensa de la piel, aportando beneficios en tratamientos de rosácea, acné, cutis graso, manchas cutáneas y pieles desvitalizadas. Aporta ácidos grasos insaturados esenciales, disminuye la inflamación, ayuda a normalizar la piel",
+    "application": "Aplicar con la piel limpia, luego de retirar Exfoliating Scrub, percibirá un suave picor durante un minuto al llegar a las zonas más profundas de la piel. Dejar actuar durante 20 minutos, observará al retirar una piel suave, limpia y fresca, aún en las instancias más sensibles. Puede combinarse en métodos sinérgicos con Micropeeling o Peeling Biorregulador",
+    "actives": ["Acido Linoleico", "Acido Linolénico", "Avena Sativa", "Malva", "Matricaria Chamomilla"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 2009,
+      "content": "250 ml.",
+      "price": 330,
+      "sellPrice": ""
+    }],
+    "name": "Refreshing Mask"
+  }, {
+    "category": ["Máscaras"],
+    "shortDesc": "SpecificMask aporta máxima tecnología en renovación celular, disminuye las arrugas más profundas de la piel otorgando firmeza y radiante apariencia. Piel más lisa que recupera la belleza y juventud",
+    "fullDesc": "Evita la pérdida de agua transepidérmica. Disminuye arrugas dinámicas. Puede aplicarse sobre labios y párpados, aún en pieles sensibles. Aplicar en combinación con Monodosis Específicas o Micropeeling en tratamientos intensivos anti-envejecimiento.",
+    "application": "Aplicar en rostro, cuello y escote, dejar actuar durante veinte minutos, retirar mediante esponja y agua",
+    "actives": ["Vitamina A", "Vitamina E", "Acido Glicólico", "Acido Salicílico"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 2010,
+      "content": "250 ml.",
+      "price": 350,
+      "sellPrice": ""
+    }],
+    "name": "Specific Mask"
+  }],
+  "Peeling": [{
+    "category": ["Peeling"],
+    "shortDesc": "Fórmula de alto desarrollo con doble función: tratamientos de peeling y aumento en la penetrabilidad de activos, mejorando la renovación celular.",
+    "fullDesc": "Fórmula de alto desarrollo con doble función: tratamientos de peeling, y aumento de penetrabilidad de activos, mejorando la recuperación celular. Indicado para Acné, piel seborreica, cutis graso, disminuir líneas de expresión.",
+    "application": "Tratamiento de peeling: Dejar actuar diez minutos, sin retirar aplicar Refreshing Mask durante diez minutos, retirar. Permeación de activos: Aplicar peeling Bio Regulador, dejar actuar durante tres minutos, retirar, aplicar Monodosis específicas o activos concentrados del 1 al 7 de acuerdo al tratamiento a realizar",
+    "actives": ["Acido Salicílico", "Acido Láctico", "Resorcina"],
+    "ph": "3,5",
+    "variants": [{
+      "code": 2012,
+      "content": "30 ml.",
+      "price": 165,
+      "sellPrice": ""
+    }],
+    "name": "Peeling Bio Regulador"
+  }, {
+    "category": ["Peeling"],
+    "shortDesc": "Peeling de efecto regenerativo de la piel. Ayuda a regular la melanogénesis actuando como blanqueador",
+    "fullDesc": "Peeling de efecto regenerativo de la piel. Ayuda a regular la melanogénesis, actuando como blanqueador. Ayuda a disminuir las imperfecciones de la piel, manchas cutáneas y de manos. Indicado para todo tipo de piel.",
+    "application": "Aplicar sobre piel limpia, luego de retirar ExfoliatingScrub, trabajar las zonas de manchas cutáneas en forma suave y circular durante tres a cinco minutos, extender a toda la piel del rostro y cuello. Dejar actuar durante cinco minutos y sin retirar aplicar SpecificMasck. Dejar actuar quince minutos y retirar mediante esponja y agua.",
+    "actives": ["Acido Glicólico", "Acido Fítico", "Acido Ascórbico"],
+    "ph": "3,5 / 10 %",
+    "variants": [{
+      "code": 2013,
+      "content": "30 ml.",
+      "price": 170,
+      "sellPrice": ""
+    }],
+    "name": "Micropeeling"
+  }],
+  "Ácido Hialurónico": [{
+    "category": ["Ácido Hialurónico"],
+    "shortDesc": "Microdermolift activa de forma inteligente los mecanismos propios de la piel, mediante la acción sinérgica del ácido hialurónico de máxima pureza y vehículos especializados.",
+    "fullDesc": "Piel hidratada con intensidad lisa y luminosa por más tiempo. Un contorno de ojos que alivia para reducir bolsas palpebrales y los signos de fatiga. Especialmente formulado para tratar la delicada zona del contorno de los ojos, esta única textura, reduce líneas de expresión y arrugas con una sensación aterciopelada",
+    "application": "Aplicar en la zona del contorno de los ojos y líneas de expresión",
+    "actives": ["Acido Hialurónico"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1016,
+      "content": "20 ml.",
+      "price": 260,
+      "sellPrice": 520
+    }],
+    "name": "Microdermo Lift"
+  }, {
+    "category": ["Ácido Hialurónico"],
+    "shortDesc": "Serum multi-acción intensivo, disminuye manchas cutáneas y evita el efecto rebote post-estacional. Aporta una intensa hidratación y resultados de suavidad incomparables",
+    "fullDesc": "Piel más firme, suave y elástica. Mejora visiblemente la luminosidad, coloración e hidratación profunda de la piel. Indicado para piel normal, manchas cutáneas, piel deshidratada. ",
+    "application": "Aplicar por la mañana",
+    "actives": ["Acido Hialurónico", "Acido Láctico", "FPS"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1017,
+      "content": "50 ml.",
+      "price": 220,
+      "sellPrice": 440
+    }, {
+      "code": 2017,
+      "content": "120 ml.",
+      "price": 380,
+      "sellPrice": ""
+    }],
+    "name": "Hydra Intensive Serum"
+  }, {
+    "category": ["Ácido Hialurónico"],
+    "shortDesc": "Resblece la hidratación, mejora la renovación celular, suavidad, elasticidad y firmeza, prolongando la juventud de la piel.",
+    "fullDesc": "Fórmula intensiva de acción sinérgica combinada, ayuda a reforzar la barrera protectora de la piel, para lograr una piel hidratada y re-nutrida. Protege a la piel del stress medioambiental. Aporta compensación intensa, inmediata, continua y calma las pieles sensibles.",
+    "application": "Aplicar por la mañana",
+    "actives": ["Acido Hialurónico", "Azuleno", "NMF", "FPS"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1018,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }, {
+      "code": 2018,
+      "content": "120 ml.",
+      "price": 320,
+      "sellPrice": ""
+    }],
+    "name": "Hydra Intensive Tonico"
+  }],
+  "Hombres": [{
+    "category": ["Hombres"],
+    "shortDesc": "Crema facial ultra ligera y elástica, específicamente formulada para la piel del hombre",
+    "fullDesc": "Piel lisa y firme. Disminuye líneas de expresión y arrugas. Indicado para piel con tendencia a seca",
+    "application": "aplicar por la mañana y por la noche",
+    "actives": ["retinol"],
+    "ph": "5",
+    "variants": [{
+      "code": 1020,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }],
+    "name": "RENOVATIO Retinol For Men"
+  }, {
+    "category": ["Hombres"],
+    "shortDesc": "Serum intensivo formulado específicamente para la piel del hombre con filtro solar.",
+    "fullDesc": "Disminuye líneas de expresión y arrugas.",
+    "application": "Aplicar después de afeitar, por la mañana y por la noche",
+    "actives": ["polifenoles de pepitas de uva", "Vitamina C", "FPS"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1021,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }],
+    "name": "RENOVATIO Serum For Men"
+  }, {
+    "category": ["Hombres"],
+    "shortDesc": "Crema facial ultra ligera y elástica formulada específicamente para la piel del hombre.",
+    "fullDesc": "Favorece el normal desarrollo de la piel, disminuye la oleosidad, aspecto saludable, uniforme y matificante de la piel. Indicado para cutis graso",
+    "application": "Aplicar después de afeitar, por la mañana y por la noche.",
+    "actives": ["Acido Salicílico", "Resorcina", "FPS"],
+    "ph": "",
+    "variants": [{
+      "code": 1022,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }],
+    "name": "RENOVATIO Skin Control For Men"
+  }],
+  "Activos Concentrados": [{
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Fórmula de tecnología innovadora, que ayuda a enriquecer, estimular y proteger a la piel de la acción de los radicales libres, compensando las carencias de la piel. Facial y corporal.",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Vitamina C Liposomada"],
+    "ph": "",
+    "variants": [{
+      "code": 2023,
+      "content": "130 ml.",
+      "price": 210,
+      "sellPrice": ""
+    }],
+    "name": "1 Vitamina C Liposomada"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Concentrado activo antioxidante, ayuda a mejorar la firmeza y tonicidad de los tejidos, disminuye el fotoenvejecimieto de la piel. Facial y corporal.",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Acido Lipoico"],
+    "ph": "",
+    "variants": [{
+      "code": 2024,
+      "content": "130 ml.",
+      "price": 200,
+      "sellPrice": ""
+    }],
+    "name": "2 Acido Lipoico"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Serum concentrado activo, específicamente formulado para compensar las carencias de la piel involutiva, mediante la acción sinérgica de oligoelementos marinos y minerales. Facial y corporal",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Oligoelementos marinos", "Zinc", "Cobre"],
+    "ph": "",
+    "variants": [{
+      "code": 2025,
+      "content": "130 ml.",
+      "price": 190,
+      "sellPrice": ""
+    }],
+    "name": "3 Oligoelementos Marinos +Zn+Cu"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Lipolítico. Específicamente formulado para el tratamiento de adiposidad localizada en abdomen, cintura y flancos, caderas, glúteos, parte interna de muslos, rodillas y brazos",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Fosfatidilcolina"],
+    "ph": "",
+    "variants": [{
+      "code": 2026,
+      "content": "130 ml.",
+      "price": 210,
+      "sellPrice": ""
+    }],
+    "name": "4 Fosfatidilcolina"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Celu active concentrado, específicamente formulado para ayudar a disminuir la celulitis, reafirmar y modelar, en el tratamiento corporal.",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Centella Asiática"],
+    "variants": [{
+      "code": 2027,
+      "content": "130 ml.",
+      "price": 200,
+      "sellPrice": ""
+    }],
+    "name": "5 Centella Asiatica"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Concentrado activo rico en algas azules. Contiene los veinte aminoácidos esenciales en perfecto balance + proteínas. Reafirmante, reequilibrante. Facial y corporal",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Espirulina"],
+    "ph": "",
+    "variants": [{
+      "code": 2028,
+      "content": "130 ml.",
+      "price": 190,
+      "sellPrice": ""
+    }],
+    "name": "6 Espirulina"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Tratamiento reafirmante con alto poder nutritivo que, por su composición rica en activos compensadores, mejora en firmeza y elasticidad de la piel, recuperando toda su vitalidad y energía.",
+    "fullDesc": "Espuma corporal, específicamente formulada para potenciar el tratamiento reductor, anticelulítico y tonificante corporal. Ayuda a eliminar el aspecto visible de la celulitis, mejora la tonicidad de los tejidos, disminuye la sensación de piernas cansadas. Reequilibra a la piel en oligoelementos, minerales, aminoácidos y proteínas. Piel más lisa, firme, elástica, suave y luminosa. Puede utilizarse también como apoyo domiciliario",
+    "application": "Apoyo domiciliario: Aplicar antes de hacer ejercicio y después de ducharse. Indicada para todo tipo de piel",
+    "actives": ["Cafeína", "Centella asiática", "Acido Lipoico", "Fosfatidilcolina", "Espirulina", "Vitamina C liposomada", "Oligoelementos marinos + Zn + CU"],
+    "ph": "",
+    "variants": [{
+      "code": 2029,
+      "content": "130 ml.",
+      "price": 200,
+      "sellPrice": ""
+    }],
+    "name": "7 Cafeina"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Tratamiento reafirmante con alto poder nutritivo que, por su composición rica en activos compensadores, mejora en firmeza y elasticidad de la piel, recuperando toda su vitalidad y energía",
+    "fullDesc": "Espuma corporal, específicamente formulada para potenciar el tratamiento reductor, anticelulítico y tonificante corporal. Ayuda a eliminar el aspecto visible de la celulitis, mejora la tonicidad de los tejidos, disminuye la sensación de piernas cansadas. Reequilibra a la piel en oligoelementos, minerales, aminoácidos y proteínas. Piel más lisa, firme, elástica, suave y luminosa. Puede utilizarse también como apoyo domiciliario",
+    "actives": ["Cafeína", "Centella Asiática", "Acido Lipoico", "Fosfatidilcolina", "Espirulina", "Vitamina C Liposomada", "Oligoelementos marinos + Zn + CU"],
+    "application": "En gabinete, aplicar luego del Scrub, en sinergia con activos concentrados, Centella Asiática, Cafeina, Fosfatidilcolina. Puede combinarse con aparatología. Apoyo domiciliario: Aplicar antes de hacer ejercicio y después de ducharse. Indicada para todo tipo de piel.",
+    "variants": [{
+      "code": 1049,
+      "content": "160 ml.",
+      "price": 290,
+      "sellPrice": 580
+    }],
+    "name": "Espuma ACTIVE 7"
+  }],
+  "Monodosis": [{
+    "category": ["Monodosis"],
+    "shortDesc": "Shock hidratante - antioxidante de acción sinérgica: Ayudan a hidratar profundamente la piel y protegerla de la acción medioambiental, revitalizando su resistencia y luminosidad",
+    "fullDesc": "Refuerzan la barrera protectora. Constituyen humectantes antioxidantes con propiedades anti envejecimiento. Indicadas para: Alta hidratación, pacientes con acné, rosácea, piel sensible, hiperqueratosis, psoriasis. Pacientes bajo tratamientos tópicos o sistémicos que resecan la piel.",
+    "application": "Aplicar con la piel limpia, por la mañana y por la noche.",
+    "actives": ["Gluconolactona", "Pentaglicanos"],
+    "ph": "",
+    "variants": [{
+      "code": 1030,
+      "content": "6 x 5 ml.",
+      "price": 540,
+      "sellPrice": 1080
+    }],
+    "name": "Hydroviton - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Ayudan a reafirmar la piel al mismo tiempo que proporcionan protección de alto nivel frente al impacto medioambiental",
+    "fullDesc": "Estimulan las defensas cutáneas y el metabolismo celular. Protectoras de células de Langerhans. Protectoras del sistema inmunitoario de la piel. Indicadas para: el cuidado de la piel sensible, roseacea o afectada por el estrés.",
+    "application": "Aplicar por la mañana y por la noche.",
+    "actives": ["Vitamina C"],
+    "ph": "",
+    "variants": [{
+      "code": 1031,
+      "content": "6 x 5 ml.",
+      "price": 515,
+      "sellPrice": 1030
+    }],
+    "name": "Vitamina F Pure - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Shock sinérgico combinado, monodosis indicadas para el tratamiento de manchas cutáneas, e irregularidades de la pigmentación",
+    "fullDesc": "Promueven la regulación del ciclo celular. Promueven la sobrevivencia celular. Resistencia al estrés y anti-envejecimiento. Activan la producción de sirtuinas acudiendo al rescate y reparando las células dañadas. Indicadas para: tratamiento de manchas cutaneas, anti-envejecimiento ",
+    "application": "Aplicación: trabajar en forma circular en las manchas o tratar zonas con irregularidades pigmentarias, luego extender a toda la piel.",
+    "actives": ["Grosella", "Reservatrol"],
+    "ph": "",
+    "variants": [{
+      "code": 1032,
+      "content": "6 x 5 ml.",
+      "price": 583,
+      "sellPrice": 1166
+    }],
+    "name": "Skin Dose - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Shock antioxidante-antiglicación sinérgico combinado de formulación avanzada.",
+    "fullDesc": "Ayudan a combatir la acción de los radicales libres, restableciendo en la piel su natural belleza y luminosidad desde las primeras aplicaciones. Mejoran el rejuvenecimiento celular. ",
+    "application": "aplicar por la mañana y por la noche",
+    "actives": ["Blueberry", "Mulberry", "Cranberry"],
+    "ph": "",
+    "variants": [{
+      "code": 1033,
+      "content": "6 x 5 ml.",
+      "price": 500,
+      "sellPrice": 1000
+    }],
+    "name": "Bio Dose - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Tratamiento reparador nocturno de contorno de ojos.",
+    "fullDesc": "Calmante, actúa como un escudo frente a las agresiones medioambientales. Fuente de Ácidos Grasos Esenciales, antioxidantes, proteínas, aminoácidos, vitaminas y minerales zinc-selenio- cobre. Las Monodosis HSP- 20, ayudan a restaurar y preservar la apariencia juvenil de la delicada piel de la zona más expresiva del rostro.",
+    "application": "Aplicar por la noche en la zona de contorno de ojos.",
+    "actives": ["Chía", "Sepicalm"],
+    "ph": "",
+    "variants": [{
+      "code": 1034,
+      "content": "6 x 5 ml.",
+      "price": 590,
+      "sellPrice": 1180
+    }],
+    "name": "HSP - 20 - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Avanzado tratamiento anti- envejecimiento. Combinan péptidos y proteínas activas que proporcionan un tratamiento efectivo para mantener la cantidad y calidad del colágeno.",
+    "fullDesc": "Indicadas para contorno de labios y líneas de expresión. Disminuyen líneas de expresión y arrugas, al mismo tiempo que mejoran y reafirman. Anti-Glicación, evitan la formación de los AGEs, subproductos de la glicación cuya acumulación induce irreversiblemente a la pérdida de elasticidad. Piel más descansada, suave y radiante desde el momento de la aplicación.",
+    "application": "Aplicar por la mañana y por la noche",
+    "actives": ["Trylagen"],
+    "ph": "",
+    "variants": [{
+      "code": 1035,
+      "content": "6 x 5 ml.",
+      "price": 630,
+      "sellPrice": 1260
+    }],
+    "name": "Complex AM 40 - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Refuerza los mecanismos de regeneración y recuperación de la piel, mediante múltiples modos de acción frente a los marcadores de envejecimiento de la piel.",
+    "fullDesc": "Tratamiento reparador nocturno. Ricas en aminoácidos. Contienen propiedades reequilibrantes, antiinflamatorias, descongestivas, nutritivas, remineralizantes y re-oxigenantes. Estimulan intercambios celulares. Triple acción reafirmante: Antioxidantes: trampas de exceso de radicales libres en una etapa temprana. Estimulan la contracción de las fibras de colágeno y protegen el tejido de soporte de la piel. Efecto relleno.",
+    "application": "Aplicar todos los días, por la noche en el rostro, cuello y escote",
+    "actives": ["Sepilifth", "Algas azules"],
+    "ph": "",
+    "variants": [{
+      "code": 1036,
+      "content": "6 x 5 ml.",
+      "price": 610,
+      "sellPrice": 1220
+    }],
+    "name": "Complex AM 45 - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Ampollas de máxima tecnología, a base de Vitamina C específicamente estabilizada.",
+    "fullDesc": "Ayudan a combatir el oxígeno reactivo, aportando mayor protección a las células madre de piel Propiedades antioxidantes. ",
+    "application": "Aplicar diariamente por la mañana.",
+    "actives": ["Vitamina C"],
+    "ph": "",
+    "variants": [{
+      "code": 1037,
+      "content": "6 x 5 ml.",
+      "price": 600,
+      "sellPrice": 1200
+    }],
+    "name": "Vitamina C - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Las ampollas ARGAN BIO+ combinan las propiedades únicas del Aceite de Argán, procedente del suroeste de Marruecos, con vehículos específicamente desarrollados",
+    "fullDesc": "Ayudan a retrasar el envejecimiento celular, disminuir estrías y cicatrices. Aportan protección a las células dérmicas. Regeneran la piel y combaten el envejecimiento. Reestructurador y renovador celular. Eliminan tanto las impurezas como las marcas de la edad o del acné. Evitan la inflamación, generan tonicidad.",
+    "application": "Aplicar diariamente. Cuando se traten estrías y cicatrices, aplicar dos veces por día",
+    "actives": ["Argan Oil"],
+    "ph": "",
+    "variants": [{
+      "code": 1038,
+      "content": "6 x 5 ml.",
+      "price": 630,
+      "sellPrice": 1260
+    }],
+    "name": "Argan Bio + - Monodosis"
+  }],
+  "Protección Solar": [{
+    "category": ["Protección Solar"],
+    "shortDesc": "Fluido Facial con color. Protección reforzada frente a los rayos UVA y UVB, gracias a un sistema filtrante óptimo Específico, combinado con Acido Hialurónico, hidratante protector de la piel.",
+    "fullDesc": "Ayuda a prevenir intolerancias solares y daño celular provocado por la acción de rayos UV. Textura fluida, no grasa. Acabado imperceptible. Sin perfume. Sin parabenos, con color",
+    "application": "Aplicar la crema antes de salir a la playa o la piscina, y como mínimo 30 minutos antes de exponerse al sol. Extender PROTECTION TIME 50+ sobre la piel bien seca. Utilizar protección solar aunque esté nublado. Reaplicar cuando sea necesario de acuerdo a cada fototipo cutáneo. Se recomienda cada dos horas para mantener la protección, especialmente después de un baño o nadar",
+    "actives": ["Ácido Hialurónico"],
+    "variants": [{
+      "code": 1044,
+      "content": "40 ml",
+      "price": 290,
+      "sellPrice": 580
+    }],
+    "name": "PROTECTION TIME  Color  Ác Hialurónico"
+  }, {
+    "category": ["Protección Solar"],
+    "shortDesc": "Fluído facial. Protección reforzada frente a los rayos UVA y UVB, gracias a un sistema filtrante óptimo Específico, combinado con Sepicalm S, biovector aminoácido con minerales, mejorando el confort cutáneo.",
+    "fullDesc": "Ayuda a prevenir intolerancias solares. Textura fluida, no graso. Acabado imperceptible. Sin perfume. Sin parabenos. Testeados en USA bajo normas FDA-COLIPA",
+    "application": "Aplicar la crema antes de salir a la playa o la piscina, y como mínimo 30 minutos antes de exponerse al sol. Extender PROTECTION TIME 50+ sobre la piel bien seca. Utilizar protección solar aunque esté nublado. Reaplicar cuando sea necesario de acuerdo a cada fototipo cutáneo. Se recomienda cada dos horas para mantener la protección, especialmente después de un baño o nadar",
+    "actives": ["Sepicalm V.G"],
+    "ph": "",
+    "variants": [{
+      "code": 1045,
+      "content": "40 ml",
+      "price": 280,
+      "sellPrice": 560
+    }],
+    "name": "PROTECTION TIME Sepicalm V.G."
+  }, {
+    "category": ["Protección Solar"],
+    "shortDesc": "Protección reforzada frente a los rayos UVA y UVB, gracias a un sistema filtrante óptimo Específico, combinado con Grosella, antioxidante protector de la piel.",
+    "fullDesc": "Ayuda a prevenir intolerancias solares, manchas pigmentarias foto-inducidas y daño celular provocado por la acción de los radicales libres y rayos UV. Textura fluida, no grasa, acabado imperceptible. Sin perfume. Sin parabenos, con color.",
+    "application": "Aplicar la crema antes de salir a la playa o la piscina, y como mínimo 30 minutos antes de exponerse al sol. Extender PROTECTION TIME 50+ sobre la piel bien seca. Utilizar protección solar aunque esté nublado. Reaplicar cuando sea necesario de acuerdo a cada fototipo cutáneo. Se recomienda cada dos horas para mantener la protección, especialmente después de un baño o nadar",
+    "actives": ["Grosella"],
+    "variants": [{
+      "code": 2044,
+      "content": "200 ml",
+      "price": 610,
+      "sellPrice": 1220
+    }],
+    "name": "PROTECTION TIME  Color Grosella"
+  }, {
+    "category": ["Protección Solar"],
+    "shortDesc": "Protección reforzada frente a los rayos UVA y UVB, gracias a un sistema filtrante óptimo Específico, combinado con Aceite de Sésamo, rico en ácidos grasos esenciales, coadyuvante en la protección.",
+    "fullDesc": "Ayuda a prevenir intolerancias solares, manchas pigmentarias foto-inducidas y daño celular provocado por la acción de rayos UV. Textura ultra fluida, no grasa, no deja marcas blancas. Acabado imperceptible. Sin perfume. Sin parabenos",
+    "application": "Aplicar la crema antes de salir a la playa o la piscina, y como mínimo 30 minutos antes de exponerse al sol. Extender PROTECTION TIME 50+ sobre la piel bien seca. Utilizar protección solar aunque esté nublado. Reaplicar cuando sea necesario de acuerdo a cada fototipo cutáneo. Se recomienda cada dos horas para mantener la protección, especialmente después de un baño o nadar",
+    "actives": ["Aceite de Sésamo"],
+    "variants": [{
+      "code": 2045,
+      "content": "200 ml",
+      "price": 600,
+      "sellPrice": 1200
+    }],
+    "name": "PROTECTION TIME  Aceite de Sésamo"
+  }],
+  "Corporales": [{
+    "category": ["Corporales"],
+    "shortDesc": "Crema antioxidante corporal, específicamente formulada para proteger a la piel de la acción de los radicales libres",
+    "fullDesc": "Aportando mayor beneficio mediante la protección de la acción solar. Evita el fotoenvejecimiento de la piel. Tonificante, Mejora la hidratación y elasticidad. Piel de seda.",
+    "application": "",
+    "actives": ["Polifenoles de pepitas de uva", "Tocoferol", "FPS"],
+    "ph": "",
+    "variants": [{
+      "code": 1046,
+      "content": "200ml.",
+      "price": 190,
+      "sellPrice": 380
+    }, {
+      "code": 2046,
+      "content": "500 ml.",
+      "price": 370,
+      "sellPrice": ""
+    }],
+    "name": "Crema Antioxidante Corporal"
+  }, {
+    "category": ["Corporales"],
+    "shortDesc": "",
+    "fullDesc": "Strialess Cell2Cell prevención y corrección, ayuda a reforzar la elasticidad. Renovación celular y flexibilidad. Mejora el aspecto visible de la piel",
+    "actives": ["Cell2Cell", "DermCom"],
+    "variants": [{
+      "code": 1050,
+      "content": "160 ml.",
+      "price": 300,
+      "sellPrice": 600
+    }],
+    "name": "Espuma Strialess"
+  }, {
+    "category": ["Corporales"],
+    "shortDesc": "",
+    "fullDesc": "Booster shot corporal, programa intensivo. Indicado para ayudar a reducir las acumulaciones grasas, donde mas lo necesitas, procurando el bienestar",
+    "actives": ["Adiposlim", "Garcinia Cambogia"],
+    "variants": [{
+      "code": 1051,
+      "content": "160ml.",
+      "price": 300,
+      "sellPrice": 600
+    }],
+    "name": "S.O.S Sculpt"
+  }, {
+    "category": ["Corporales"],
+    "shortDesc": "",
+    "fullDesc": "Booster shot corporal. Complejo de activación global que ayuda a reducir y evitar nuevos almacenamientos. Previene y protege",
+    "actives": ["Adopoless", "Cafe Verde"],
+    "variants": [{
+      "code": 1052,
+      "content": "160 ml.",
+      "price": 300,
+      "sellPrice": 600
+    }],
+    "name": "S.O.S Extreme"
+  }]
+};
+var e = React.createElement;
+var categories = ["Higiene", "Máscaras", "Ácido Hialurónico", "Peeling", "Corporales", "Hombres", "Protección Intensiva", "Monodosis", "Activos Concentrados", "Protección Solar"];
+
+var Section = function Section(title, paragraph) {
+  return e('div', null, e('h4', {
+    className: 'section-name'
+  }, title), e('p', {
+    className: 'section-body'
+  }, paragraph));
+};
+
+var Product = function Product(product, key) {
+  return e('div', {
+    key: key,
+    className: 'product-container'
+  }, e('h3', {
+    className: 'product-name'
+  }, product.name), e('div', {
+    className: 'product-body'
+  }, e('p', {
+    className: 'product-short-desc'
+  }, product.shortDesc), Section('Descripción', product.fullDesc), Section('Aplicación', product.application)));
+};
+
+var Category = function Category(categoryName, products) {
+  return e('div', {
+    className: 'category-container'
+  }, e('div', {
+    className: 'category-title',
+    id: categoryName.toLowerCase().replace(' ', '-')
+  }, e('h2', {
+    className: 'category-name'
+  }, categoryName)), products.map(function (p, i) {
+    return Product(p, i);
+  }));
+};
+
+var Vademecum = function Vademecum() {
+  return categories.map(function (categoryName, i) {
+    return e('div', {
+      key: i
+    }, Category(categoryName, products[categoryName]));
+  });
+};
+
+var domContainer = document.querySelector('#vademecum');
+ReactDOM.render(e('div', {
+  className: ''
+}, Vademecum()), domContainer);

+ 776 - 0
lib/vademecum.js

@@ -0,0 +1,776 @@
+'use strict';
+
+require("core-js/modules/es6.regexp.replace");
+
+const products = {
+  "Protección Intensiva": [{
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Potente acción antioxidante, un magnífico aporte de firmeza y elasticidad que mejora el color, la luminosidad y la hidratación de la piel retrasando el envejecimiento cutáneo. ",
+    "fullDesc": "Crema antioxidante, humecto – nutritiva, potenciada por la acción de una micro alga, Espirulina, que contiene los veinte aminoácidos en perfecto balance, minerales y proteínas. Textura suave, fluida. Indicada para pieles normales, deshidratadas, menopausia.",
+    "application": "Tras limpiar y tonificar rostro, cuello y escote, aplicar mañana y noche con un suave masaje.",
+    "actives": ["Vitamina A", "Vitamina C", "Vitamina E", "Espirulina"],
+    "ph": "",
+    "variants": [{
+      "code": 1001,
+      "content": "60 ml",
+      "price": 250,
+      "sellPrice": 500
+    }, {
+      "code": 2001,
+      "content": "250 ml.",
+      "price": 398,
+      "sellPrice": ""
+    }],
+    "name": "Complex Bio Vitamins A+E+C"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Una textura única, enriquecida con ingredientes capaces de activar signos claves de la juventud de la piel. Las arrugas se suavizan visiblemente. La piel recupera su luminosidad y turgencia",
+    "fullDesc": "Formulada específicamente para cubrir las necesidades de las pieles más secas. Dota a la piel de una nueva capacidad de autorregeneración y autodefensa. Fórmula rica y exclusiva, perfectamente equilibrada, de alto poder antioxidante. Reduce la profundidad y longitud de las arrugas y previene su aparición prematura. Reafirmante.",
+    "application": "Tras limpiar y tonificar rostro, cuello y escote, aplicar diariamente por la noche. Dependiendo de las necesidades de la piel, se combinará la Crema Sublime Uvit",
+    "actives": ["Polifenoles de pepitas de uva", "Salvia, Tocoferol", "Aceite de Jojoba"],
+    "ph": "",
+    "variants": [{
+      "code": 1002,
+      "content": "60 ml.",
+      "price": 250,
+      "sellPrice": 500
+    }, {
+      "code": 2002,
+      "content": "250 ml.",
+      "price": 398,
+      "sellPrice": ""
+    }],
+    "name": "Sublime Uvit - Crema Reparadora"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Acción altamente hidratante y regeneradora en pieles desvitalizadas. Promueve la formación de colágeno, Ayuda a evitar la pérdida de agua transepidérmica, estimula la liberación de citoquinas. Efecto luminoso en pieles secas, con necesidades. Compensa las carencias de la piel. Ayuda a disminuir estrías y cicatrices.",
+    "fullDesc": "Piel más confortable y aparece revitalizada. Incluso al final del día, la piel se siente nutrida e hidratada. Los signos de cansancio y de la edad parecen reducidos. La piel visiblemente reparada, con toda la luminosidad recuperada. Su textura rica y densa combate las arrugas y líneas de expresión y proporciona el confort que las pieles secas necesitan. Se absorbe con rapidez sin restos grasos.",
+    "application": "Aplicar en rostro, cuello y escote, luego de la crema Sublime Uvit. Aplicar en estrías y cicatrices con suave masaje circular.",
+    "actives": ["Acido Glicólico ( 7%)", "Extracto de algas"],
+    "ph": "",
+    "variants": [{
+      "code": 1003,
+      "content": "50 ml.",
+      "price": 250,
+      "sellPrice": 500
+    }, {
+      "code": 2003,
+      "content": "120 ml.",
+      "price": 380,
+      "sellPrice": ""
+    }],
+    "name": "Audace - Glico Activo"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Mejora la textura, la elasticidad, la tonicidad y la firmeza. Reduce la flacidez. ",
+    "fullDesc": "Mejora el proceso de renovación celular, ayuda a normalizar la queratinización, afinando y eliminando imperfecciones, mejora el sostén. Disminuye la profundidad de las arrugas, los signos visibles de cansancio, disminuye el contraste de manchas. Tono de piel mas uniforme y elástica, efecto matificante. Indicado para piel normal, cutis graso, de más de treinta años. Puede utilizarse en verano",
+    "application": "",
+    "actives": ["Retinol", "Aloe Barbadensis extract"],
+    "ph": "",
+    "variants": [{
+      "code": 1004,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }, {
+      "code": 2004,
+      "content": "120 ml.",
+      "price": 350,
+      "sellPrice": ""
+    }],
+    "name": "Bisome Retinol - Fluido Facial"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Una mirada más joven, las ojeras y los signos de cansancio disminuyen. Piel más fresca, clara y luminosa.",
+    "fullDesc": "Crema activa, formulada específicamente para ayudar a recuperar las funciones principales de la piel y mejorar la comunicación intercelular. Mejora la micro circulación palpebral, disminuye la hiperpigmentación, aumenta la firmeza. Protección activa frente al crono y foto envejecimiento. Testeadodermatológicamente.",
+    "application": "Aplicar diariamente, por la mañana.",
+    "actives": ["Polifenoles de pepitas de uva", "Citopeptinas", "Vitamina C", "Alfabisabolol", "FPS"],
+    "ph": "",
+    "variants": [{
+      "code": 1006,
+      "content": "30 ml.",
+      "price": 280,
+      "sellPrice": 560
+    }],
+    "name": "Repair Eye Contour"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Un tratamiento para impulsar las defensas naturales de la piel y hacerla más resistente a los efectos del estrés diario. Los signos de cansancio acumulado desaparecen, piel confortable y aliviada.",
+    "fullDesc": "Suero antioxidante intensivo, específicamente formulado para proteger a la piel de la acción medioambiental. Efecto relax en líneas de expresión. Reafirmante. Piel de seda. Indicado para todo tipo de piel. Testeado dermatológicamente.",
+    "application": "Tratamiento de peeling: Dejar actuar diez minutos, sin retirar aplicar RefreshingMask durante diez minutos, retirar con esponja y agua. Permeación de activos: Aplicar peeling Bio Regulador, dejar actuar durante tres minutos, retirar, aplicar activos concentrados del 1 al 7 de acuerdo al tratamiento a realizar",
+    "actives": ["Polifenoles de pepitas de uva", "Citopeptinas", "Vitamina C", "FPS"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1007,
+      "content": "50 ml.",
+      "price": 220,
+      "sellPrice": 440
+    }, {
+      "code": 2007,
+      "content": "120 ml.",
+      "price": 380,
+      "sellPrice": ""
+    }],
+    "name": "Uvit Serum Defense"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Innovadora fórmula desarrollada con un vehículo especializado, que no solo mejora la apariencia de la piel, sino que también actúa frente a las causas que generan el acné",
+    "fullDesc": "Específicamente formulado para actuar frente a las causas que generan el acné. Normaliza el PH de la piel, antiséptico, antinflamatorio, anti pruriginoso. Evita la deshidratación de la piel. FPS. Puede combinarse con peeling Biorregulador y Refreshing Mask en tratamiento en gabinete profesional",
+    "application": "Acné: tres aplicaciones diarias, mañana, tarde y noche. No retirar. Piel seborreica: Aplicar por la mañana. No retirar.",
+    "actives": ["Acido Salicílico", "Retinol, Resorcina", "FPS"],
+    "ph": "4,5",
+    "variants": [{
+      "code": 1011,
+      "content": "50 ml.",
+      "price": 180,
+      "sellPrice": 360
+    }, {
+      "code": 2011,
+      "content": "200 ml.",
+      "price": 320,
+      "sellPrice": ""
+    }],
+    "name": "Acne Skin Cleans"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Crema de tratamiento anti-edad inteligente, ayuda a proteger a la piel frente al paso del tiempo. La piel infunde con un desarrollado cóctel de embellecimiento. No sólo corrige, protege su piel de las agresiones externas.",
+    "fullDesc": "Un todo dinámico y simultáneo que protege las barreras de la piel para prevenir la pérdida de humedad, compensar, estimular y equilibrar la tonalidad, dejando la piel iluminada y naturalmente magnífica. Anti-envejecimiento . Hidratatante. Minimiza los poros. Minimiza Imperfecciones. Reduce Enrojecimiento. Mejora la tonalidad. Ilumina. Estimula las defensas. Mejora la vitalidad. Reafirma. Estimula la tonalidad. Estimula la tonallidad en forma pareja.",
+    "application": "Aplicar con la piel limpia por la mañana.",
+    "actives": ["Rosa Mosqueta", "Gluconolactona", "Sésamo", "Beta Caroteno", "Filtro Solar"],
+    "ph": "",
+    "variants": [{
+      "code": 1039,
+      "content": "50 ml.",
+      "price": 230,
+      "sellPrice": 460
+    }],
+    "name": "DD Cream"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Su fórmula rica en despigmentantes, con características anti- envejecimiento, anti-inflamatorios, actúa en un todo dinámico y simultáneo.",
+    "fullDesc": "Estimula los mecanismos de defensa, disminuye el estrés oxidativo, ayudando a disminuir los mecanismos de hiperpigmentación propios de la cascada pigmentaria. Marcada acción anti-envejecimiento, descongestiva- purificante. No contiene parabenos. Despigmentante. Homogeneizante. Anti-envejecimiento. Antioxidante. Descongestiva. Purificante. Foto-protectora.",
+    "application": "Aplicar diariamente por la noche, en las zonas hiperpigmentadas, dejar actuar durante 2 minutos, y extender a todo el rostro. Se puede potenciar el tratamiento con la aplicación de ampollas SKIN-DOSE.",
+    "actives": ["Skin Biolight", "Uva Ursi", "Regaliz", "Filtro solar"],
+    "ph": "",
+    "variants": [{
+      "code": 1040,
+      "content": "50 ml.",
+      "price": 200,
+      "sellPrice": 400
+    }, {
+      "code": 2040,
+      "content": "200 ml",
+      "price": 340,
+      "sellPrice": ""
+    }],
+    "name": "Whitening Cream"
+  }, {
+    "category": ["Protección Intensiva"],
+    "shortDesc": "Crema de tratamiento específicamente formulada para el cuidado de la piel sensible, rica en ácidos grasos insaturados, tocoferoles, beta-glucanos, minerales, oligoelementos y vitaminas que ayudan a calmar y proteger a la piel, frente a la acción medioambiental. Triple acción protectora del colágeno. Regeneradora.",
+    "fullDesc": "Equilibrante - reafirmante - antioxidante. Efecto voluminizante en lineas dinámicas. Disminuye la inflamacion. Hidrata la piel. Estimula la formación de colágeno. Estimula las defensas. Elimina bacterias. Reduce el enrojecimiento .",
+    "application": "Aplicar diariamente por la mañana Sensitive Skin, el tratamiento puede potenciarse con Monodosis-Vitamina F aplicadas durante la noche.",
+    "actives": ["Argán Oil", "Sepilifth DPHP", "Avena Sativa", "Filtro solar"],
+    "ph": "",
+    "variants": [{
+      "code": 1041,
+      "content": "50 ml.",
+      "price": 200,
+      "sellPrice": 400
+    }, {
+      "code": 2041,
+      "content": "200 ml",
+      "price": 340,
+      "sellPrice": ""
+    }],
+    "name": "Sensitive Cream"
+  }],
+  "Higiene": [{
+    "category": ["Higiene"],
+    "shortDesc": "Emulsión de limpieza, demaquillante, de PH neutro, hipoalergénica. Indicada para todo tipo de piel, aún las más sensibles.",
+    "fullDesc": "Limpia profundamente la epidermis, se equilibra el pH de la piel. Elimina suavemente las impurezas sin dañar la humedad y el equilibrio natural. Prepara, purificará y acondiciona a la piel para recibir los beneficios óptimos de los mejores cuidados. La piel está lista para recibir los productos propios de la Fase de Tratamiento.",
+    "application": "Aplicar con suaves maniobras, retirar",
+    "actives": ["Matricaria chamomilla"],
+    "ph": "7",
+    "variants": [{
+      "code": 1005,
+      "content": "120 ml.",
+      "price": 160,
+      "sellPrice": 320
+    }, {
+      "code": 2005,
+      "content": "500 ml.",
+      "price": 290,
+      "sellPrice": ""
+    }],
+    "name": "Emulsión de Higiene"
+  }, {
+    "category": ["Higiene"],
+    "shortDesc": "Piel fresca, descongestiva y limpia. Prepara a la piel para recibir el tratamiento posterior",
+    "fullDesc": "Suspensión de micro gránulos de silicatos naturales de tamaño heterogéneo. Indicado para exfoliación manual, aún en pieles sensibles. Hipoalergénico. Facial y corporal",
+    "application": "Aplicar sobre la piel, humedecer con agua y trabajar en forma suave y circular de tres a cinco minutos. Retirar con esponja y agua.",
+    "actives": ["Silicatos naturales"],
+    "ph": "",
+    "variants": [{
+      "code": 2008,
+      "content": "250 ml.",
+      "price": 290,
+      "sellPrice": ""
+    }],
+    "name": "Exfoliating Scrub"
+  }],
+  "Máscaras": [{
+    "category": ["Máscaras"],
+    "shortDesc": "Los ácidos Linoleico y Linolénico, aportan mayor protección a las células de Langerhans, mejorando notablemente la protección de la piel",
+    "fullDesc": "Máscara activa. Ayuda a aumentar los mecanismos de defensa de la piel, aportando beneficios en tratamientos de rosácea, acné, cutis graso, manchas cutáneas y pieles desvitalizadas. Aporta ácidos grasos insaturados esenciales, disminuye la inflamación, ayuda a normalizar la piel",
+    "application": "Aplicar con la piel limpia, luego de retirar Exfoliating Scrub, percibirá un suave picor durante un minuto al llegar a las zonas más profundas de la piel. Dejar actuar durante 20 minutos, observará al retirar una piel suave, limpia y fresca, aún en las instancias más sensibles. Puede combinarse en métodos sinérgicos con Micropeeling o Peeling Biorregulador",
+    "actives": ["Acido Linoleico", "Acido Linolénico", "Avena Sativa", "Malva", "Matricaria Chamomilla"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 2009,
+      "content": "250 ml.",
+      "price": 330,
+      "sellPrice": ""
+    }],
+    "name": "Refreshing Mask"
+  }, {
+    "category": ["Máscaras"],
+    "shortDesc": "SpecificMask aporta máxima tecnología en renovación celular, disminuye las arrugas más profundas de la piel otorgando firmeza y radiante apariencia. Piel más lisa que recupera la belleza y juventud",
+    "fullDesc": "Evita la pérdida de agua transepidérmica. Disminuye arrugas dinámicas. Puede aplicarse sobre labios y párpados, aún en pieles sensibles. Aplicar en combinación con Monodosis Específicas o Micropeeling en tratamientos intensivos anti-envejecimiento.",
+    "application": "Aplicar en rostro, cuello y escote, dejar actuar durante veinte minutos, retirar mediante esponja y agua",
+    "actives": ["Vitamina A", "Vitamina E", "Acido Glicólico", "Acido Salicílico"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 2010,
+      "content": "250 ml.",
+      "price": 350,
+      "sellPrice": ""
+    }],
+    "name": "Specific Mask"
+  }],
+  "Peeling": [{
+    "category": ["Peeling"],
+    "shortDesc": "Fórmula de alto desarrollo con doble función: tratamientos de peeling y aumento en la penetrabilidad de activos, mejorando la renovación celular.",
+    "fullDesc": "Fórmula de alto desarrollo con doble función: tratamientos de peeling, y aumento de penetrabilidad de activos, mejorando la recuperación celular. Indicado para Acné, piel seborreica, cutis graso, disminuir líneas de expresión.",
+    "application": "Tratamiento de peeling: Dejar actuar diez minutos, sin retirar aplicar Refreshing Mask durante diez minutos, retirar. Permeación de activos: Aplicar peeling Bio Regulador, dejar actuar durante tres minutos, retirar, aplicar Monodosis específicas o activos concentrados del 1 al 7 de acuerdo al tratamiento a realizar",
+    "actives": ["Acido Salicílico", "Acido Láctico", "Resorcina"],
+    "ph": "3,5",
+    "variants": [{
+      "code": 2012,
+      "content": "30 ml.",
+      "price": 165,
+      "sellPrice": ""
+    }],
+    "name": "Peeling Bio Regulador"
+  }, {
+    "category": ["Peeling"],
+    "shortDesc": "Peeling de efecto regenerativo de la piel. Ayuda a regular la melanogénesis actuando como blanqueador",
+    "fullDesc": "Peeling de efecto regenerativo de la piel. Ayuda a regular la melanogénesis, actuando como blanqueador. Ayuda a disminuir las imperfecciones de la piel, manchas cutáneas y de manos. Indicado para todo tipo de piel.",
+    "application": "Aplicar sobre piel limpia, luego de retirar ExfoliatingScrub, trabajar las zonas de manchas cutáneas en forma suave y circular durante tres a cinco minutos, extender a toda la piel del rostro y cuello. Dejar actuar durante cinco minutos y sin retirar aplicar SpecificMasck. Dejar actuar quince minutos y retirar mediante esponja y agua.",
+    "actives": ["Acido Glicólico", "Acido Fítico", "Acido Ascórbico"],
+    "ph": "3,5 / 10 %",
+    "variants": [{
+      "code": 2013,
+      "content": "30 ml.",
+      "price": 170,
+      "sellPrice": ""
+    }],
+    "name": "Micropeeling"
+  }],
+  "Ácido Hialurónico": [{
+    "category": ["Ácido Hialurónico"],
+    "shortDesc": "Microdermolift activa de forma inteligente los mecanismos propios de la piel, mediante la acción sinérgica del ácido hialurónico de máxima pureza y vehículos especializados.",
+    "fullDesc": "Piel hidratada con intensidad lisa y luminosa por más tiempo. Un contorno de ojos que alivia para reducir bolsas palpebrales y los signos de fatiga. Especialmente formulado para tratar la delicada zona del contorno de los ojos, esta única textura, reduce líneas de expresión y arrugas con una sensación aterciopelada",
+    "application": "Aplicar en la zona del contorno de los ojos y líneas de expresión",
+    "actives": ["Acido Hialurónico"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1016,
+      "content": "20 ml.",
+      "price": 260,
+      "sellPrice": 520
+    }],
+    "name": "Microdermo Lift"
+  }, {
+    "category": ["Ácido Hialurónico"],
+    "shortDesc": "Serum multi-acción intensivo, disminuye manchas cutáneas y evita el efecto rebote post-estacional. Aporta una intensa hidratación y resultados de suavidad incomparables",
+    "fullDesc": "Piel más firme, suave y elástica. Mejora visiblemente la luminosidad, coloración e hidratación profunda de la piel. Indicado para piel normal, manchas cutáneas, piel deshidratada. ",
+    "application": "Aplicar por la mañana",
+    "actives": ["Acido Hialurónico", "Acido Láctico", "FPS"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1017,
+      "content": "50 ml.",
+      "price": 220,
+      "sellPrice": 440
+    }, {
+      "code": 2017,
+      "content": "120 ml.",
+      "price": 380,
+      "sellPrice": ""
+    }],
+    "name": "Hydra Intensive Serum"
+  }, {
+    "category": ["Ácido Hialurónico"],
+    "shortDesc": "Resblece la hidratación, mejora la renovación celular, suavidad, elasticidad y firmeza, prolongando la juventud de la piel.",
+    "fullDesc": "Fórmula intensiva de acción sinérgica combinada, ayuda a reforzar la barrera protectora de la piel, para lograr una piel hidratada y re-nutrida. Protege a la piel del stress medioambiental. Aporta compensación intensa, inmediata, continua y calma las pieles sensibles.",
+    "application": "Aplicar por la mañana",
+    "actives": ["Acido Hialurónico", "Azuleno", "NMF", "FPS"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1018,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }, {
+      "code": 2018,
+      "content": "120 ml.",
+      "price": 320,
+      "sellPrice": ""
+    }],
+    "name": "Hydra Intensive Tonico"
+  }],
+  "Hombres": [{
+    "category": ["Hombres"],
+    "shortDesc": "Crema facial ultra ligera y elástica, específicamente formulada para la piel del hombre",
+    "fullDesc": "Piel lisa y firme. Disminuye líneas de expresión y arrugas. Indicado para piel con tendencia a seca",
+    "application": "aplicar por la mañana y por la noche",
+    "actives": ["retinol"],
+    "ph": "5",
+    "variants": [{
+      "code": 1020,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }],
+    "name": "RENOVATIO Retinol For Men"
+  }, {
+    "category": ["Hombres"],
+    "shortDesc": "Serum intensivo formulado específicamente para la piel del hombre con filtro solar.",
+    "fullDesc": "Disminuye líneas de expresión y arrugas.",
+    "application": "Aplicar después de afeitar, por la mañana y por la noche",
+    "actives": ["polifenoles de pepitas de uva", "Vitamina C", "FPS"],
+    "ph": "5,5",
+    "variants": [{
+      "code": 1021,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }],
+    "name": "RENOVATIO Serum For Men"
+  }, {
+    "category": ["Hombres"],
+    "shortDesc": "Crema facial ultra ligera y elástica formulada específicamente para la piel del hombre.",
+    "fullDesc": "Favorece el normal desarrollo de la piel, disminuye la oleosidad, aspecto saludable, uniforme y matificante de la piel. Indicado para cutis graso",
+    "application": "Aplicar después de afeitar, por la mañana y por la noche.",
+    "actives": ["Acido Salicílico", "Resorcina", "FPS"],
+    "ph": "",
+    "variants": [{
+      "code": 1022,
+      "content": "50 ml.",
+      "price": 210,
+      "sellPrice": 420
+    }],
+    "name": "RENOVATIO Skin Control For Men"
+  }],
+  "Activos Concentrados": [{
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Fórmula de tecnología innovadora, que ayuda a enriquecer, estimular y proteger a la piel de la acción de los radicales libres, compensando las carencias de la piel. Facial y corporal.",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Vitamina C Liposomada"],
+    "ph": "",
+    "variants": [{
+      "code": 2023,
+      "content": "130 ml.",
+      "price": 210,
+      "sellPrice": ""
+    }],
+    "name": "1 Vitamina C Liposomada"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Concentrado activo antioxidante, ayuda a mejorar la firmeza y tonicidad de los tejidos, disminuye el fotoenvejecimieto de la piel. Facial y corporal.",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Acido Lipoico"],
+    "ph": "",
+    "variants": [{
+      "code": 2024,
+      "content": "130 ml.",
+      "price": 200,
+      "sellPrice": ""
+    }],
+    "name": "2 Acido Lipoico"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Serum concentrado activo, específicamente formulado para compensar las carencias de la piel involutiva, mediante la acción sinérgica de oligoelementos marinos y minerales. Facial y corporal",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Oligoelementos marinos", "Zinc", "Cobre"],
+    "ph": "",
+    "variants": [{
+      "code": 2025,
+      "content": "130 ml.",
+      "price": 190,
+      "sellPrice": ""
+    }],
+    "name": "3 Oligoelementos Marinos +Zn+Cu"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Lipolítico. Específicamente formulado para el tratamiento de adiposidad localizada en abdomen, cintura y flancos, caderas, glúteos, parte interna de muslos, rodillas y brazos",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Fosfatidilcolina"],
+    "ph": "",
+    "variants": [{
+      "code": 2026,
+      "content": "130 ml.",
+      "price": 210,
+      "sellPrice": ""
+    }],
+    "name": "4 Fosfatidilcolina"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Celu active concentrado, específicamente formulado para ayudar a disminuir la celulitis, reafirmar y modelar, en el tratamiento corporal.",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Centella Asiática"],
+    "variants": [{
+      "code": 2027,
+      "content": "130 ml.",
+      "price": 200,
+      "sellPrice": ""
+    }],
+    "name": "5 Centella Asiatica"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Concentrado activo rico en algas azules. Contiene los veinte aminoácidos esenciales en perfecto balance + proteínas. Reafirmante, reequilibrante. Facial y corporal",
+    "fullDesc": "Puede combinarse con aparatología específica para cada tratamiento en particular",
+    "application": "Indicada para el tratamiento profesional.",
+    "actives": ["Espirulina"],
+    "ph": "",
+    "variants": [{
+      "code": 2028,
+      "content": "130 ml.",
+      "price": 190,
+      "sellPrice": ""
+    }],
+    "name": "6 Espirulina"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Tratamiento reafirmante con alto poder nutritivo que, por su composición rica en activos compensadores, mejora en firmeza y elasticidad de la piel, recuperando toda su vitalidad y energía.",
+    "fullDesc": "Espuma corporal, específicamente formulada para potenciar el tratamiento reductor, anticelulítico y tonificante corporal. Ayuda a eliminar el aspecto visible de la celulitis, mejora la tonicidad de los tejidos, disminuye la sensación de piernas cansadas. Reequilibra a la piel en oligoelementos, minerales, aminoácidos y proteínas. Piel más lisa, firme, elástica, suave y luminosa. Puede utilizarse también como apoyo domiciliario",
+    "application": "Apoyo domiciliario: Aplicar antes de hacer ejercicio y después de ducharse. Indicada para todo tipo de piel",
+    "actives": ["Cafeína", "Centella asiática", "Acido Lipoico", "Fosfatidilcolina", "Espirulina", "Vitamina C liposomada", "Oligoelementos marinos + Zn + CU"],
+    "ph": "",
+    "variants": [{
+      "code": 2029,
+      "content": "130 ml.",
+      "price": 200,
+      "sellPrice": ""
+    }],
+    "name": "7 Cafeina"
+  }, {
+    "category": ["Activos Concentrados"],
+    "shortDesc": "Tratamiento reafirmante con alto poder nutritivo que, por su composición rica en activos compensadores, mejora en firmeza y elasticidad de la piel, recuperando toda su vitalidad y energía",
+    "fullDesc": "Espuma corporal, específicamente formulada para potenciar el tratamiento reductor, anticelulítico y tonificante corporal. Ayuda a eliminar el aspecto visible de la celulitis, mejora la tonicidad de los tejidos, disminuye la sensación de piernas cansadas. Reequilibra a la piel en oligoelementos, minerales, aminoácidos y proteínas. Piel más lisa, firme, elástica, suave y luminosa. Puede utilizarse también como apoyo domiciliario",
+    "actives": ["Cafeína", "Centella Asiática", "Acido Lipoico", "Fosfatidilcolina", "Espirulina", "Vitamina C Liposomada", "Oligoelementos marinos + Zn + CU"],
+    "application": "En gabinete, aplicar luego del Scrub, en sinergia con activos concentrados, Centella Asiática, Cafeina, Fosfatidilcolina. Puede combinarse con aparatología. Apoyo domiciliario: Aplicar antes de hacer ejercicio y después de ducharse. Indicada para todo tipo de piel.",
+    "variants": [{
+      "code": 1049,
+      "content": "160 ml.",
+      "price": 290,
+      "sellPrice": 580
+    }],
+    "name": "Espuma ACTIVE 7"
+  }],
+  "Monodosis": [{
+    "category": ["Monodosis"],
+    "shortDesc": "Shock hidratante - antioxidante de acción sinérgica: Ayudan a hidratar profundamente la piel y protegerla de la acción medioambiental, revitalizando su resistencia y luminosidad",
+    "fullDesc": "Refuerzan la barrera protectora. Constituyen humectantes antioxidantes con propiedades anti envejecimiento. Indicadas para: Alta hidratación, pacientes con acné, rosácea, piel sensible, hiperqueratosis, psoriasis. Pacientes bajo tratamientos tópicos o sistémicos que resecan la piel.",
+    "application": "Aplicar con la piel limpia, por la mañana y por la noche.",
+    "actives": ["Gluconolactona", "Pentaglicanos"],
+    "ph": "",
+    "variants": [{
+      "code": 1030,
+      "content": "6 x 5 ml.",
+      "price": 540,
+      "sellPrice": 1080
+    }],
+    "name": "Hydroviton - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Ayudan a reafirmar la piel al mismo tiempo que proporcionan protección de alto nivel frente al impacto medioambiental",
+    "fullDesc": "Estimulan las defensas cutáneas y el metabolismo celular. Protectoras de células de Langerhans. Protectoras del sistema inmunitoario de la piel. Indicadas para: el cuidado de la piel sensible, roseacea o afectada por el estrés.",
+    "application": "Aplicar por la mañana y por la noche.",
+    "actives": ["Vitamina C"],
+    "ph": "",
+    "variants": [{
+      "code": 1031,
+      "content": "6 x 5 ml.",
+      "price": 515,
+      "sellPrice": 1030
+    }],
+    "name": "Vitamina F Pure - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Shock sinérgico combinado, monodosis indicadas para el tratamiento de manchas cutáneas, e irregularidades de la pigmentación",
+    "fullDesc": "Promueven la regulación del ciclo celular. Promueven la sobrevivencia celular. Resistencia al estrés y anti-envejecimiento. Activan la producción de sirtuinas acudiendo al rescate y reparando las células dañadas. Indicadas para: tratamiento de manchas cutaneas, anti-envejecimiento ",
+    "application": "Aplicación: trabajar en forma circular en las manchas o tratar zonas con irregularidades pigmentarias, luego extender a toda la piel.",
+    "actives": ["Grosella", "Reservatrol"],
+    "ph": "",
+    "variants": [{
+      "code": 1032,
+      "content": "6 x 5 ml.",
+      "price": 583,
+      "sellPrice": 1166
+    }],
+    "name": "Skin Dose - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Shock antioxidante-antiglicación sinérgico combinado de formulación avanzada.",
+    "fullDesc": "Ayudan a combatir la acción de los radicales libres, restableciendo en la piel su natural belleza y luminosidad desde las primeras aplicaciones. Mejoran el rejuvenecimiento celular. ",
+    "application": "aplicar por la mañana y por la noche",
+    "actives": ["Blueberry", "Mulberry", "Cranberry"],
+    "ph": "",
+    "variants": [{
+      "code": 1033,
+      "content": "6 x 5 ml.",
+      "price": 500,
+      "sellPrice": 1000
+    }],
+    "name": "Bio Dose - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Tratamiento reparador nocturno de contorno de ojos.",
+    "fullDesc": "Calmante, actúa como un escudo frente a las agresiones medioambientales. Fuente de Ácidos Grasos Esenciales, antioxidantes, proteínas, aminoácidos, vitaminas y minerales zinc-selenio- cobre. Las Monodosis HSP- 20, ayudan a restaurar y preservar la apariencia juvenil de la delicada piel de la zona más expresiva del rostro.",
+    "application": "Aplicar por la noche en la zona de contorno de ojos.",
+    "actives": ["Chía", "Sepicalm"],
+    "ph": "",
+    "variants": [{
+      "code": 1034,
+      "content": "6 x 5 ml.",
+      "price": 590,
+      "sellPrice": 1180
+    }],
+    "name": "HSP - 20 - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Avanzado tratamiento anti- envejecimiento. Combinan péptidos y proteínas activas que proporcionan un tratamiento efectivo para mantener la cantidad y calidad del colágeno.",
+    "fullDesc": "Indicadas para contorno de labios y líneas de expresión. Disminuyen líneas de expresión y arrugas, al mismo tiempo que mejoran y reafirman. Anti-Glicación, evitan la formación de los AGEs, subproductos de la glicación cuya acumulación induce irreversiblemente a la pérdida de elasticidad. Piel más descansada, suave y radiante desde el momento de la aplicación.",
+    "application": "Aplicar por la mañana y por la noche",
+    "actives": ["Trylagen"],
+    "ph": "",
+    "variants": [{
+      "code": 1035,
+      "content": "6 x 5 ml.",
+      "price": 630,
+      "sellPrice": 1260
+    }],
+    "name": "Complex AM 40 - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Refuerza los mecanismos de regeneración y recuperación de la piel, mediante múltiples modos de acción frente a los marcadores de envejecimiento de la piel.",
+    "fullDesc": "Tratamiento reparador nocturno. Ricas en aminoácidos. Contienen propiedades reequilibrantes, antiinflamatorias, descongestivas, nutritivas, remineralizantes y re-oxigenantes. Estimulan intercambios celulares. Triple acción reafirmante: Antioxidantes: trampas de exceso de radicales libres en una etapa temprana. Estimulan la contracción de las fibras de colágeno y protegen el tejido de soporte de la piel. Efecto relleno.",
+    "application": "Aplicar todos los días, por la noche en el rostro, cuello y escote",
+    "actives": ["Sepilifth", "Algas azules"],
+    "ph": "",
+    "variants": [{
+      "code": 1036,
+      "content": "6 x 5 ml.",
+      "price": 610,
+      "sellPrice": 1220
+    }],
+    "name": "Complex AM 45 - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Ampollas de máxima tecnología, a base de Vitamina C específicamente estabilizada.",
+    "fullDesc": "Ayudan a combatir el oxígeno reactivo, aportando mayor protección a las células madre de piel Propiedades antioxidantes. ",
+    "application": "Aplicar diariamente por la mañana.",
+    "actives": ["Vitamina C"],
+    "ph": "",
+    "variants": [{
+      "code": 1037,
+      "content": "6 x 5 ml.",
+      "price": 600,
+      "sellPrice": 1200
+    }],
+    "name": "Vitamina C - Monodosis"
+  }, {
+    "category": ["Monodosis"],
+    "shortDesc": "Las ampollas ARGAN BIO+ combinan las propiedades únicas del Aceite de Argán, procedente del suroeste de Marruecos, con vehículos específicamente desarrollados",
+    "fullDesc": "Ayudan a retrasar el envejecimiento celular, disminuir estrías y cicatrices. Aportan protección a las células dérmicas. Regeneran la piel y combaten el envejecimiento. Reestructurador y renovador celular. Eliminan tanto las impurezas como las marcas de la edad o del acné. Evitan la inflamación, generan tonicidad.",
+    "application": "Aplicar diariamente. Cuando se traten estrías y cicatrices, aplicar dos veces por día",
+    "actives": ["Argan Oil"],
+    "ph": "",
+    "variants": [{
+      "code": 1038,
+      "content": "6 x 5 ml.",
+      "price": 630,
+      "sellPrice": 1260
+    }],
+    "name": "Argan Bio + - Monodosis"
+  }],
+  "Protección Solar": [{
+    "category": ["Protección Solar"],
+    "shortDesc": "Fluido Facial con color. Protección reforzada frente a los rayos UVA y UVB, gracias a un sistema filtrante óptimo Específico, combinado con Acido Hialurónico, hidratante protector de la piel.",
+    "fullDesc": "Ayuda a prevenir intolerancias solares y daño celular provocado por la acción de rayos UV. Textura fluida, no grasa. Acabado imperceptible. Sin perfume. Sin parabenos, con color",
+    "application": "Aplicar la crema antes de salir a la playa o la piscina, y como mínimo 30 minutos antes de exponerse al sol. Extender PROTECTION TIME 50+ sobre la piel bien seca. Utilizar protección solar aunque esté nublado. Reaplicar cuando sea necesario de acuerdo a cada fototipo cutáneo. Se recomienda cada dos horas para mantener la protección, especialmente después de un baño o nadar",
+    "actives": ["Ácido Hialurónico"],
+    "variants": [{
+      "code": 1044,
+      "content": "40 ml",
+      "price": 290,
+      "sellPrice": 580
+    }],
+    "name": "PROTECTION TIME  Color  Ác Hialurónico"
+  }, {
+    "category": ["Protección Solar"],
+    "shortDesc": "Fluído facial. Protección reforzada frente a los rayos UVA y UVB, gracias a un sistema filtrante óptimo Específico, combinado con Sepicalm S, biovector aminoácido con minerales, mejorando el confort cutáneo.",
+    "fullDesc": "Ayuda a prevenir intolerancias solares. Textura fluida, no graso. Acabado imperceptible. Sin perfume. Sin parabenos. Testeados en USA bajo normas FDA-COLIPA",
+    "application": "Aplicar la crema antes de salir a la playa o la piscina, y como mínimo 30 minutos antes de exponerse al sol. Extender PROTECTION TIME 50+ sobre la piel bien seca. Utilizar protección solar aunque esté nublado. Reaplicar cuando sea necesario de acuerdo a cada fototipo cutáneo. Se recomienda cada dos horas para mantener la protección, especialmente después de un baño o nadar",
+    "actives": ["Sepicalm V.G"],
+    "ph": "",
+    "variants": [{
+      "code": 1045,
+      "content": "40 ml",
+      "price": 280,
+      "sellPrice": 560
+    }],
+    "name": "PROTECTION TIME Sepicalm V.G."
+  }, {
+    "category": ["Protección Solar"],
+    "shortDesc": "Protección reforzada frente a los rayos UVA y UVB, gracias a un sistema filtrante óptimo Específico, combinado con Grosella, antioxidante protector de la piel.",
+    "fullDesc": "Ayuda a prevenir intolerancias solares, manchas pigmentarias foto-inducidas y daño celular provocado por la acción de los radicales libres y rayos UV. Textura fluida, no grasa, acabado imperceptible. Sin perfume. Sin parabenos, con color.",
+    "application": "Aplicar la crema antes de salir a la playa o la piscina, y como mínimo 30 minutos antes de exponerse al sol. Extender PROTECTION TIME 50+ sobre la piel bien seca. Utilizar protección solar aunque esté nublado. Reaplicar cuando sea necesario de acuerdo a cada fototipo cutáneo. Se recomienda cada dos horas para mantener la protección, especialmente después de un baño o nadar",
+    "actives": ["Grosella"],
+    "variants": [{
+      "code": 2044,
+      "content": "200 ml",
+      "price": 610,
+      "sellPrice": 1220
+    }],
+    "name": "PROTECTION TIME  Color Grosella"
+  }, {
+    "category": ["Protección Solar"],
+    "shortDesc": "Protección reforzada frente a los rayos UVA y UVB, gracias a un sistema filtrante óptimo Específico, combinado con Aceite de Sésamo, rico en ácidos grasos esenciales, coadyuvante en la protección.",
+    "fullDesc": "Ayuda a prevenir intolerancias solares, manchas pigmentarias foto-inducidas y daño celular provocado por la acción de rayos UV. Textura ultra fluida, no grasa, no deja marcas blancas. Acabado imperceptible. Sin perfume. Sin parabenos",
+    "application": "Aplicar la crema antes de salir a la playa o la piscina, y como mínimo 30 minutos antes de exponerse al sol. Extender PROTECTION TIME 50+ sobre la piel bien seca. Utilizar protección solar aunque esté nublado. Reaplicar cuando sea necesario de acuerdo a cada fototipo cutáneo. Se recomienda cada dos horas para mantener la protección, especialmente después de un baño o nadar",
+    "actives": ["Aceite de Sésamo"],
+    "variants": [{
+      "code": 2045,
+      "content": "200 ml",
+      "price": 600,
+      "sellPrice": 1200
+    }],
+    "name": "PROTECTION TIME  Aceite de Sésamo"
+  }],
+  "Corporales": [{
+    "category": ["Corporales"],
+    "shortDesc": "Crema antioxidante corporal, específicamente formulada para proteger a la piel de la acción de los radicales libres",
+    "fullDesc": "Aportando mayor beneficio mediante la protección de la acción solar. Evita el fotoenvejecimiento de la piel. Tonificante, Mejora la hidratación y elasticidad. Piel de seda.",
+    "application": "",
+    "actives": ["Polifenoles de pepitas de uva", "Tocoferol", "FPS"],
+    "ph": "",
+    "variants": [{
+      "code": 1046,
+      "content": "200ml.",
+      "price": 190,
+      "sellPrice": 380
+    }, {
+      "code": 2046,
+      "content": "500 ml.",
+      "price": 370,
+      "sellPrice": ""
+    }],
+    "name": "Crema Antioxidante Corporal"
+  }, {
+    "category": ["Corporales"],
+    "shortDesc": "",
+    "fullDesc": "Strialess Cell2Cell prevención y corrección, ayuda a reforzar la elasticidad. Renovación celular y flexibilidad. Mejora el aspecto visible de la piel",
+    "actives": ["Cell2Cell", "DermCom"],
+    "variants": [{
+      "code": 1050,
+      "content": "160 ml.",
+      "price": 300,
+      "sellPrice": 600
+    }],
+    "name": "Espuma Strialess"
+  }, {
+    "category": ["Corporales"],
+    "shortDesc": "",
+    "fullDesc": "Booster shot corporal, programa intensivo. Indicado para ayudar a reducir las acumulaciones grasas, donde mas lo necesitas, procurando el bienestar",
+    "actives": ["Adiposlim", "Garcinia Cambogia"],
+    "variants": [{
+      "code": 1051,
+      "content": "160ml.",
+      "price": 300,
+      "sellPrice": 600
+    }],
+    "name": "S.O.S Sculpt"
+  }, {
+    "category": ["Corporales"],
+    "shortDesc": "",
+    "fullDesc": "Booster shot corporal. Complejo de activación global que ayuda a reducir y evitar nuevos almacenamientos. Previene y protege",
+    "actives": ["Adopoless", "Cafe Verde"],
+    "variants": [{
+      "code": 1052,
+      "content": "160 ml.",
+      "price": 300,
+      "sellPrice": 600
+    }],
+    "name": "S.O.S Extreme"
+  }]
+};
+const e = React.createElement;
+const categories = ["Higiene", "Máscaras", "Ácido Hialurónico", "Peeling", "Corporales", "Hombres", "Protección Intensiva", "Monodosis", "Activos Concentrados", "Protección Solar"];
+
+const Section = (title, paragraph) => dom("div", null, dom("h4", {
+  className: "section-name"
+}, title), dom("p", {
+  className: "section-body"
+}, paragraph)); // const Section = (title, paragraph) => {
+//   return e(
+//     'div',
+//     null,
+//     e('h4', {className: 'section-name'}, title),
+//     e('p', {className: 'section-body'}, paragraph)
+//   )
+// };
+
+
+const Product = (product, key) => {
+  return e('div', {
+    key,
+    className: 'product-container'
+  }, e('h3', {
+    className: 'product-name'
+  }, product.name), e('div', {
+    className: 'product-body'
+  }, e('p', {
+    className: 'product-short-desc'
+  }, product.shortDesc), Section('Descripción', product.fullDesc), Section('Aplicación', product.application)));
+};
+
+const Category = (categoryName, products) => {
+  return e('div', {
+    className: 'category-container'
+  }, e('div', {
+    className: 'category-title',
+    id: categoryName.toLowerCase().replace(' ', '-')
+  }, e('h2', {
+    className: 'category-name'
+  }, categoryName)), products.map((p, i) => Product(p, i)));
+};
+
+const Vademecum = () => {
+  return categories.map((categoryName, i) => {
+    return e('div', {
+      key: i
+    }, Category(categoryName, products[categoryName]));
+  });
+};
+
+const domContainer = document.querySelector('#vademecum');
+ReactDOM.render(e('div', {
+  className: ''
+}, Vademecum()), domContainer);

Fichier diff supprimé car celui-ci est trop grand
+ 3696 - 0
package-lock.json


+ 30 - 0
package.json

@@ -0,0 +1,30 @@
+{
+  "name": "eba-vademecum",
+  "version": "1.0.0",
+  "description": "Auto-generated pdf based on a HTML file and ReactJS",
+  "main": "babel.config.js",
+  "directories": {
+    "lib": "lib"
+  },
+  "dependencies": {
+    "@babel/polyfill": "^7.4.4",
+    "@babel/preset-react": "^7.0.0"
+  },
+  "devDependencies": {
+    "@babel/cli": "^7.4.4",
+    "@babel/core": "^7.4.4",
+    "@babel/preset-env": "^7.4.4",
+    "@babel/preset-es2015": "^7.0.0-beta.53"
+  },
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1",
+    "build": "./node_modules/.bin/babel js --out-dir lib",
+    "pdf": "wkhtmltopdf.exe toc --xsl-style-sheet pdf/toc.xsl index.html pdf/vademecum.pdf"
+  },
+  "repository": {
+    "type": "git",
+    "url": "ssh://git@gogs.labs/tati/eba-vademecum.git"
+  },
+  "author": "Tatiana Inama",
+  "license": "ISC"
+}

+ 8 - 0
pdf/toc.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<outline xmlns="http://wkhtmltopdf.org/outline">
+  <item title="Vademecum" page="0" link="__WKANCHOR_0" backLink="__WKANCHOR_1">
+    <item title="VADEMECUM PROFESIONAL" page="1" link="__WKANCHOR_2" backLink="__WKANCHOR_3">
+      <item title="NOSOTROS" page="2" link="__WKANCHOR_4" backLink="__WKANCHOR_5"/>
+    </item>
+  </item>
+</outline>

+ 61 - 0
pdf/toc.xsl

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<xsl:stylesheet version="2.0"

+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

+                xmlns:outline="http://wkhtmltopdf.org/outline"

+                xmlns="http://www.w3.org/1999/xhtml">

+  <xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"

+              doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"

+              indent="yes" />

+  <xsl:template match="outline:outline">

+    <html>

+      <head>

+        <title>Table of Contents</title>

+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

+        <style>

+          h1 {

+            text-align: center;

+            font-size: 20px;

+            font-family: arial;

+          }

+          div {border-bottom: 1px dashed rgb(200,200,200);}

+          span {float: right;}

+          li {list-style: none;}

+          ul {

+            font-size: 20px;

+            font-family: arial;

+          }

+          ul ul {font-size: 80%; }

+          ul {padding-left: 0em;}

+          ul ul {padding-left: 1em;}

+          a {text-decoration:none; color: black;}

+        </style>

+      </head>

+      <body>

+        <h1>Table of Contents</h1>

+        <ul><xsl:apply-templates select="outline:item/outline:item"/></ul>

+      </body>

+    </html>

+  </xsl:template>

+  <xsl:template match="outline:item">

+    <li>

+      <xsl:if test="@title!=''">

+        <div>

+          <a>

+            <xsl:if test="@link">

+              <xsl:attribute name="href"><xsl:value-of select="@link"/></xsl:attribute>

+            </xsl:if>

+            <xsl:if test="@backLink">

+              <xsl:attribute name="name"><xsl:value-of select="@backLink"/></xsl:attribute>

+            </xsl:if>

+            <xsl:value-of select="@title" /> 

+          </a>

+          <span> <xsl:value-of select="@page" /> </span>

+        </div>

+      </xsl:if>

+      <ul>

+        <xsl:comment>added to prevent self-closing tags in QtXmlPatterns</xsl:comment>

+        <xsl:apply-templates select="outline:item"/>

+      </ul>

+    </li>

+  </xsl:template>

+</xsl:stylesheet>


BIN
pdf/vademecum.pdf