17 Nov - Static Sites to laravel

This commit is contained in:
Kevin Adametz 2018-11-17 02:01:22 +01:00
parent 610aa1e202
commit 5ff57a21a7
3661 changed files with 569001 additions and 771 deletions

2
.idea/mivita.care.iml generated
View file

@ -6,7 +6,9 @@
<sourceFolder url="file://$MODULE_DIR$/app" isTestSource="false" packagePrefix="App\" />
<excludeFolder url="file://$MODULE_DIR$/vendor/barryvdh/laravel-ide-helper" />
<excludeFolder url="file://$MODULE_DIR$/vendor/barryvdh/reflection-docblock" />
<excludeFolder url="file://$MODULE_DIR$/vendor/cocur/slugify" />
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/cviebrock/eloquent-sluggable" />
<excludeFolder url="file://$MODULE_DIR$/vendor/dnoegel/php-xdg-base-dir" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/cache" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/dbal" />

2
.idea/php.xml generated
View file

@ -97,6 +97,8 @@
<path value="$PROJECT_DIR$/vendor/hamcrest/hamcrest-php" />
<path value="$PROJECT_DIR$/vendor/dragonmantank/cron-expression" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-docblock" />
<path value="$PROJECT_DIR$/vendor/cocur/slugify" />
<path value="$PROJECT_DIR$/vendor/cviebrock/eloquent-sluggable" />
</include_path>
</component>
<component name="PhpProjectSharedConfiguration" php_language_level="7.1" />

6
.idea/vcs.xml generated Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

1022
.idea/workspace.xml generated

File diff suppressed because it is too large Load diff

View file

@ -5,13 +5,14 @@ namespace PHPSTORM_META {
/**
* PhpStorm Meta file, to provide autocomplete information for PhpStorm
* Generated on 2018-10-21 18:01:16.
* Generated on 2018-11-14 17:57:01.
*
* @author Barry vd. Heuvel <barryvdh@gmail.com>
* @see https://github.com/barryvdh/laravel-ide-helper
*/
override(new \Illuminate\Contracts\Container\Container, map([
'' => '@',
'Cviebrock\EloquentSluggable\SluggableObserver' => \Cviebrock\EloquentSluggable\SluggableObserver::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -163,6 +164,7 @@ namespace PHPSTORM_META {
]));
override(\Illuminate\Contracts\Container\Container::make(0), map([
'' => '@',
'Cviebrock\EloquentSluggable\SluggableObserver' => \Cviebrock\EloquentSluggable\SluggableObserver::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -314,6 +316,7 @@ namespace PHPSTORM_META {
]));
override(\Illuminate\Contracts\Container\Container::makeWith(0), map([
'' => '@',
'Cviebrock\EloquentSluggable\SluggableObserver' => \Cviebrock\EloquentSluggable\SluggableObserver::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -465,6 +468,7 @@ namespace PHPSTORM_META {
]));
override(\App::make(0), map([
'' => '@',
'Cviebrock\EloquentSluggable\SluggableObserver' => \Cviebrock\EloquentSluggable\SluggableObserver::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -616,6 +620,7 @@ namespace PHPSTORM_META {
]));
override(\App::makeWith(0), map([
'' => '@',
'Cviebrock\EloquentSluggable\SluggableObserver' => \Cviebrock\EloquentSluggable\SluggableObserver::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -767,6 +772,7 @@ namespace PHPSTORM_META {
]));
override(\app(0), map([
'' => '@',
'Cviebrock\EloquentSluggable\SluggableObserver' => \Cviebrock\EloquentSluggable\SluggableObserver::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -918,6 +924,7 @@ namespace PHPSTORM_META {
]));
override(\resolve(0), map([
'' => '@',
'Cviebrock\EloquentSluggable\SluggableObserver' => \Cviebrock\EloquentSluggable\SluggableObserver::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,

View file

@ -3,7 +3,7 @@
/**
* A helper file for Laravel 5, to provide autocomplete information to your IDE
* Generated for Laravel 5.6.39 on 2018-10-21 18:01:39.
* Generated for Laravel 5.6.39 on 2018-11-14 17:57:01.
*
* This file should not be included in your code, only analyzed by your IDE!
*

View file

@ -91,6 +91,7 @@ namespace App\Models{
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Category wherePos($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Category whereTransName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Category whereUpdatedAt($value)
* @mixin \Eloquent
*/
class Category extends \Eloquent {}
}
@ -100,6 +101,7 @@ namespace App\Models{
* App\Models\UserUpdateEmail
*
* @property-read \App\User $user
* @mixin \Eloquent
*/
class UserUpdateEmail extends \Eloquent {}
}
@ -169,6 +171,7 @@ namespace App\Models{
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Product whereUsage($value)
* @method static \Illuminate\Database\Query\Builder|\App\Models\Product withTrashed()
* @method static \Illuminate\Database\Query\Builder|\App\Models\Product withoutTrashed()
* @mixin \Eloquent
*/
class Product extends \Eloquent {}
}
@ -195,6 +198,7 @@ namespace App\Models{
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Country whereIt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Country wherePhone($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Country whereRu($value)
* @mixin \Eloquent
*/
class Country extends \Eloquent {}
}
@ -224,6 +228,7 @@ namespace App\Models{
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductImage whereProductId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductImage whereSize($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductImage whereUpdatedAt($value)
* @mixin \Eloquent
*/
class ProductImage extends \Eloquent {}
}
@ -305,6 +310,7 @@ namespace App\Models{
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Account whereWebsite($value)
* @method static \Illuminate\Database\Query\Builder|\App\Models\Account withTrashed()
* @method static \Illuminate\Database\Query\Builder|\App\Models\Account withoutTrashed()
* @mixin \Eloquent
*/
class Account extends \Eloquent {}
}
@ -331,6 +337,7 @@ namespace App\Models{
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Attribute wherePos($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Attribute whereTransName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Attribute whereUpdatedAt($value)
* @mixin \Eloquent
*/
class Attribute extends \Eloquent {}
}
@ -351,6 +358,7 @@ namespace App\Models{
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductAttribute whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductAttribute whereProductId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductAttribute whereUpdatedAt($value)
* @mixin \Eloquent
*/
class ProductAttribute extends \Eloquent {}
}
@ -371,6 +379,7 @@ namespace App\Models{
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductCategory whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductCategory whereProductId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductCategory whereUpdatedAt($value)
* @mixin \Eloquent
*/
class ProductCategory extends \Eloquent {}
}

20
_static/.htaccess Normal file
View file

@ -0,0 +1,20 @@
<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
#RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
#RewriteCond %{HTTPS} !=on
#RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

View file

@ -14,7 +14,7 @@
*/
$get_products = array(
'Alle Produkte' => array(
/*'Alle Produkte' => array(
array('slug' => 'aloe-vera-gesichtstonic', 'name' => 'Aloe Vera Gesichtstonic', 'first' => 'aloe-vera-gesichtstonic-1.jpg', 'hover' => 'aloe-vera-gesichtstonic-2.jpg'),
array('slug' => 'aloe-vera-reinigungsgel', 'name' => 'Aloe Vera Gesichtsreinigungsgel', 'first' => 'aloe-vera-reinigungsgel-1.jpg', 'hover' => 'aloe-vera-reinigungsgel-2.jpg'),
array('slug' => 'aloe-vera-feuchtigkeitscreme', 'name' => 'Aloe Vera Feuchtigkeitscreme', 'first' => 'aloe-vera-feuchtigkeitscreme-1.jpg', 'hover' => 'aloe-vera-feuchtigkeitscreme-2.jpg'),
@ -41,8 +41,10 @@
array('slug' => 'aloe-vera-likoer', 'name' => 'Aloe Vera Likör', 'first' => 'aloe-vera-likoer-1.jpg', 'hover' => 'aloe-vera-likoer-2.jpg'),
array('slug' => 'aloe-vera-grappa', 'name' => 'Aloe Vera Grappa', 'first' => 'aloe-vera-grappa-1.jpg', 'hover' => 'aloe-vera-grappa-2.jpg'),
),
'Wohltuend' => array(
),*/
// 'Wohltuend' => array(
1 => array(
array('slug' => 'aloe-vera-gel99', 'name' => 'Aloe Vera Gel 99%', 'first' => 'aloe-vera-gel99-1.jpg', 'hover' => 'aloe-vera-gel99-2.jpg'),
array('slug' => 'aloe-vera-gel86', 'name' => 'Aloe Vera Gel 86%', 'first' => 'aloe-vera-gel86-1.jpg', 'hover' => 'aloe-vera-gel86-2.jpg'),
array('slug' => 'aloe-vera-sos-spray', 'name' => 'Aloe Vera SOS Spray', 'first' => 'aloe-vera-sos-spray-1.jpg', 'hover' => 'aloe-vera-sos-spray-2.jpg'),
@ -52,7 +54,9 @@
array('slug' => 'aloe-vera-hot-cold-gel', 'name' => 'Aloe Vera Hote-Cold Gel', 'first' => 'aloe-vera-hot-cold-gel-1.jpg', 'hover' => 'aloe-vera-hot-cold-gel-2.jpg'),
),
'Körperpflege' => array(
// 'Körperpflege' => array(
2 => array(
array('slug' => 'aloe-vera-bodylotion', 'name' => 'Aloe Vera Bodylotion', 'first' => 'aloe-vera-bodylotion-1.jpg', 'hover' => 'aloe-vera-bodylotion-2.jpg'),
array('slug' => 'aloe-vera-after-sun', 'name' => 'Aloe Vera After Sun', 'first' => 'aloe-vera-after-sun-lotion-1.jpg', 'hover' => 'aloe-vera-after-sun-lotion-2.jpg'),
array('slug' => 'aloe-vera-handcreme', 'name' => 'Aloe Vera Handcreme', 'first' => 'aloe-vera-handcreme-1.jpg', 'hover' => 'aloe-vera-handcreme-2.jpg'),
@ -63,7 +67,9 @@
array('slug' => 'aloe-vera-koerperbutter', 'name' => 'Aloe Vera Körperbutter', 'first' => 'aloe-vera-koerperbutter-1.jpg', 'hover' => 'aloe-vera-koerperbutter-2.jpg'),
),
'Gesichtspflege' =>array(
//'Gesichtspflege' =>array(
3 =>array(
array('slug' => 'aloe-vera-gesichtstonic', 'name' => 'Aloe Vera Gesichtstonic', 'first' => 'aloe-vera-gesichtstonic-1.jpg', 'hover' => 'aloe-vera-gesichtstonic-2.jpg'),
array('slug' => 'aloe-vera-reinigungsgel', 'name' => 'Aloe Vera Gesichtsreinigungsgel', 'first' => 'aloe-vera-reinigungsgel-1.jpg', 'hover' => 'aloe-vera-reinigungsgel-2.jpg'),
array('slug' => 'aloe-vera-feuchtigkeitscreme', 'name' => 'Aloe Vera Feuchtigkeitscreme', 'first' => 'aloe-vera-feuchtigkeitscreme-1.jpg', 'hover' => 'aloe-vera-feuchtigkeitscreme-2.jpg'),
@ -75,14 +81,18 @@
),
'Genuss' => array(
// 'Bio Aloe Vera Saft & Co.' => array(
4 => array(
array('slug' => 'aloe-vera-saft', 'name' => 'Aloe Vera Saft 500 ml', 'first' => 'aloe-vera-saft-1.jpg', 'hover' => 'aloe-vera-saft-2.jpg'),
array('slug' => 'aloe-vera-saft-250', 'name' => 'Aloe Vera Saft 250 ml', 'first' => 'aloe-vera-saft-250-1.jpg', 'hover' => 'aloe-vera-saft-250-2.jpg'),
array('slug' => 'aloe-vera-likoer', 'name' => 'Aloe Vera Likör', 'first' => 'aloe-vera-likoer-1.jpg', 'hover' => 'aloe-vera-likoer-2.jpg'),
array('slug' => 'aloe-vera-grappa', 'name' => 'Aloe Vera Grappa', 'first' => 'aloe-vera-grappa-1.jpg', 'hover' => 'aloe-vera-grappa-2.jpg'),
),
'Aktions-Sets' => array(
// 'Aktions-Sets' => array(
5 => array(
array('slug' => 'aloe-vera-cleaner-set', 'name' => 'Aloe Vera Cleaner Set', 'first' => 'aloe-vera-cleaner-set-1.jpg', 'hover' => 'aloe-vera-cleaner-set-2.jpg'),
array('slug' => 'aloe-vera-anti-aging-set', 'name' => 'Aloe Vera Anti Aging Set', 'first' => 'aloe-vera-anti-aging-set-1.jpg', 'hover' => 'aloe-vera-anti-aging-set-2.jpg'),
array('slug' => 'aloe-vera-deluxe-set', 'name' => 'Aloe Vera Deluxe Set', 'first' => 'aloe-vera-deluxe-set-1.jpg', 'hover' => 'aloe-vera-deluxe-set-2.jpg'),

View file

@ -42,7 +42,7 @@ $item_no = '80 20 100';
//ablegen unter /assets/images/
$icons = "product_icons_1.png";
$description = '<p>Aloe Vera Gel Plus 86% lässt Schwellungen und Entzündungen schon nach kurzer Zeit abklingen. Durch den Wirkstoff Urea hat es juckreizstillende, entzündungshemmende Eigenschaften. Es wirkt schmerzlindernd und blutstillend bei Brand-, Schürf- und Kratzwunden. Auch bei hartnäckigen Fällen wie Akne, Gürtelrose, Schuppenflechte, Neurodermitis und Herpes sowie bei Zerrungen und Verstauchungen hat sich Aloe Vera Plus bereits bewährt.</p>';
$description = '<p>Aloe Vera Gel Plus 86% lässt leichte Schwellungen und Entzündungen schon nach kurzer Zeit abklingen. Durch den Wirkstoff Urea hat es juckreizstillende, entzündungshemmende Eigenschaften. Es wirkt schmerzlindernd und blutstillend bei Brand-, Schürf- und Kratzwunden. Auch bei hartnäckigen Fällen wie Akne, Gürtelrose, Schuppenflechte, Neurodermitis und Herpes sowie bei Zerrungen und Verstauchungen hat sich Aloe Vera Plus bereits bewährt.</p>';
$usage = '<p>Mehrmals täglich auf entsprechende Stellen auftragen. Hinweis: Brennt kurz bei frischen Verletzungen der Haut</p>';
$ingredients = '<p>Aloe Barbadensis Gel, Methylpropanediol, Caprylyl Glycol, Phenylpropanol, Acrylates/C10-30 Alkyl Acrylate Crosspolymer, Triethanolamine, Potassium Sorbate, Sodium Benzoate, Citric Acid</p>';

View file

@ -42,7 +42,7 @@ $item_no = '80 20 100';
//ablegen unter /assets/images/
$icons = "product_icons_1.png";
$description = '<p>Das Aloe Vera Barbadensis Gel 99% aus dem reinen filetierten Blattmark aus biologischem Anbau mit einem sehr hohen Aloverose Gehalt von ca. 1.500 mg/l, hat feuchtigkeitsspendende Eigenschaften und unterstützt die natürliche Regeneration. Bei sonnengereizter Haut, Insektenstichen, leichten Hautverletzungen und Verbrennungen pur aufgetragen, wird es als kühlend und beruhigend empfunden und sollte in keiner Naturapotheke fehlen.</p>';
$description = '<p>Das Aloe Vera Barbadensis Gel 99% aus dem reinen filetierten Blattmark aus biologischem Anbau mit einem sehr hohen Aloverose Gehalt von ca. 1.600 mg/l, hat feuchtigkeitsspendende Eigenschaften und unterstützt die natürliche Regeneration. Bei sonnengereizter Haut, Insektenstichen, leichten Hautverletzungen und Verbrennungen pur aufgetragen, wird es als kühlend und beruhigend empfunden und sollte in keiner Naturapotheke fehlen.</p>';
$usage = '<p>mehrmals täglich auf entsprechende Stellen auftragen</p>';
$ingredients = '<p>Aloe Barbadensis Gel, Methylpropanediol, Caprylyl Glycol, Phenylpropanol, Acrylates/C10-30 Alkyl Acrylate Crosspolymer, Triethanolamine, Potassium Sorbate, Sodium Benzoate, Citric Acid</p>';

View file

@ -7,9 +7,11 @@ $slug = "aloe-vera-saft-250";
$headline = 'Aloe Vera Saft 250 ml';
$copy = '<p>Aloe Vera Saft 99,8 % reiner Bio-Saft</p>
<ul class="list-unstyled list-icons" style="padding-left: 15px;">
<li><i class="fa fa-check text-primary"></i> steigert das allgemeine Wohlbefinden</li>
<li><i class="fa fa-check text-primary"></i> wohltuend für das Immunsystem</li>
<li><i class="fa fa-check text-primary"></i> reinigt Magen- und Darmtrakt</li>
<li><i class="fa fa-check text-primary"></i> aus kontrolliert biologischem Anbau</li>
<li><i class="fa fa-check text-primary"></i> verarbeitet durch reine Handarbeit</li>
<li><i class="fa fa-check text-primary"></i> hergestellt direkt nach der Ernte</li>
<li><i class="fa fa-check text-primary"></i> über 1.600 mg/l Aloverose-Gehalt (Stand: 2018)</li>
<li><i class="fa fa-check text-primary"></i> für ca. 10 Portionen á 25 ml täglich</li>
</ul>
';
@ -35,14 +37,14 @@ $images = array(
$price = '16,90 €';
$price = '9,80 €';
$content = '250ml';
$item_no = '60 30 200';
//ablegen unter /assets/images/
$icons = "product_icons_2.jpg";
$description = '<p>Aloe Vera Bio Saft zum Trinken. Der gewonnene Saft aus dem Aloe Gel ist ein ausgezeichneter Bioregulator. Er wirkt zellregenerierend und stärkt das Immunsystem. Ein Geschenk der Natur. Der Saft der Aloe Vera ist kein zugelassenes Arzneimittel, es handelt sich hierbei um Erfahrungen aus der Volksmedizin. Substanzen wie z.B. Vitamine, Enzyme, Mineralsalze, Spurenelemente, fördern das allgemeine Wohlbefinden. Dieser Aloe Vera Saft ist ein 100%iges BIO-Erzeugnis.</p>';
$usage = '<p>max. 25 ml (1 Schnapsglas) pro Tag pur oder mit Saft vermischt</p>';
$description = '<p>Der reine Aloe Vera Saft ist bereits seit Jahrtausenden als Nahrungsergänzung zur Förderung des allgemeinen Wohlbefindens bekannt. Der Saft aus kontrolliert biologischem Anbau, sowie die Verarbeitung der frischen Aloe Vera Blätter in reiner Handarbeit, garantiert Dir einen außergewöhnlich hohen Gehalt an Aloverose (Polysaccharid) - der wichtigste Inhaltsstoff der Aloe Vera Pflanze. Substanzen wie z.B. Vitamine, Enzyme, Mineralsalze, Spurenelemente, fördern das allgemeine Wohlbefinden. Durch die direkte Verarbeitung nach der Ernte, bleibt der hohe Wirkstoffgehalt erhalten. Dieser Aloe Vera Saft ist ein 100%iges BIO-Erzeugnis. Ein echtes Geschenk der Natur.</p>';
$usage = '<p>Wir empfehlen Dir zu Beginn eine Kur von 3-4 Wochen mit täglich morgens und abends je ca. 25 ml vor dem Essen. Der Saft kann pur oder gemischt mit einem Fruchtsaft getrunken werden. Im Anschluss empfehlen wir Dir, ca. 25 ml des Saftes als Nahrungsergänzung morgens vor dem Frühstück einzunehmen.<br><br>Nicht mehr als 50 ml täglich einnehmen. Wir empfehlen den Saft nicht in der Schwangerschaft einzunehmen bzw. dies vorher mit dem Arzt abzuklären.</p>';
$ingredients = '<p>99,8 % Aloe vera Saft, 0,2 % Zitronensäure</p>';

View file

@ -7,9 +7,11 @@ $slug = "aloe-vera-saft";
$headline = 'Aloe Vera Saft 500 ml';
$copy = '<p>Aloe Vera Saft 99,8 % reiner Bio-Saft</p>
<ul class="list-unstyled list-icons" style="padding-left: 15px;">
<li><i class="fa fa-check text-primary"></i> steigert das allgemeine Wohlbefinden</li>
<li><i class="fa fa-check text-primary"></i> wohltuend für das Immunsystem</li>
<li><i class="fa fa-check text-primary"></i> reinigt Magen- und Darmtrakt</li>
<li><i class="fa fa-check text-primary"></i> aus kontrolliert biologischem Anbau</li>
<li><i class="fa fa-check text-primary"></i> verarbeitet durch reine Handarbeit</li>
<li><i class="fa fa-check text-primary"></i> hergestellt direkt nach der Ernte</li>
<li><i class="fa fa-check text-primary"></i> über 1.600 mg/l Aloverose-Gehalt (Stand: 2018)</li>
<li><i class="fa fa-check text-primary"></i> für ca. 20 Portionen á 25 ml täglich</li>
</ul>
';
@ -41,8 +43,8 @@ $item_no = '60 30 100';
//ablegen unter /assets/images/
$icons = "product_icons_2.jpg";
$description = '<p>Aloe Vera Bio Saft zum Trinken. Der gewonnene Saft aus dem Aloe Gel ist ein ausgezeichneter Bioregulator. Er wirkt zellregenerierend und stärkt das Immunsystem. Ein Geschenk der Natur. Der Saft der Aloe Vera ist kein zugelassenes Arzneimittel, es handelt sich hierbei um Erfahrungen aus der Volksmedizin. Substanzen wie z.B. Vitamine, Enzyme, Mineralsalze, Spurenelemente, fördern das allgemeine Wohlbefinden. Dieser Aloe Vera Saft ist ein 100%iges BIO-Erzeugnis.</p>';
$usage = '<p>max. 25 ml (1 Schnapsglas) pro Tag pur oder mit Saft vermischt</p>';
$description = '<p>Der reine Aloe Vera Saft ist bereits seit Jahrtausenden als Nahrungsergänzung zur Förderung des allgemeinen Wohlbefindens bekannt. Der Saft aus kontrolliert biologischem Anbau, sowie die Verarbeitung der frischen Aloe Vera Blätter in reiner Handarbeit, garantiert Dir einen außergewöhnlich hohen Gehalt an Aloverose (Polysaccharid) - der wichtigste Inhaltsstoff der Aloe Vera Pflanze. Substanzen wie z.B. Vitamine, Enzyme, Mineralsalze, Spurenelemente, fördern das allgemeine Wohlbefinden. Durch die direkte Verarbeitung nach der Ernte, bleibt der hohe Wirkstoffgehalt erhalten. Dieser Aloe Vera Saft ist ein 100%iges BIO-Erzeugnis. Ein echtes Geschenk der Natur.</p>';
$usage = '<p>Wir empfehlen Dir zu Beginn eine Kur von 3-4 Wochen mit täglich morgens und abends je ca. 25 ml vor dem Essen. Der Saft kann pur oder gemischt mit einem Fruchtsaft getrunken werden. Im Anschluss empfehlen wir Dir, ca. 25 ml des Saftes als Nahrungsergänzung morgens vor dem Frühstück einzunehmen.<br><br>Nicht mehr als 50 ml täglich einnehmen. Wir empfehlen den Saft nicht in der Schwangerschaft einzunehmen bzw. dies vorher mit dem Arzt abzuklären.</p>';
$ingredients = '<p>99,8 % Aloe vera Saft, 0,2 % Zitronensäure</p>';

View file

@ -36,7 +36,7 @@ $images = array(
$price = '25,90 €';
$price = '27,90 €';
$content = '50ml';
$item_no = '70 10 150';
//ablegen unter /assets/images/

View file

@ -64,8 +64,9 @@
<li <?php echo ($page_path == "") ? 'class="active"' : '' ?>><a href="<?php echo SERVER ?>/">Start</a></li>
<li <?php echo ($page_path == "aloevera") ? 'class="active"' : '' ?>><a href="<?php echo SERVER ?>/aloevera">Aloe Vera</a></li>
<li <?php echo ($page_path == "produkte") ? 'class="active"' : '' ?>><a href="<?php echo SERVER ?>/produkte">Produktwelt</a></li>
<li <?php echo ($page_path == "unternehmen") ? 'class="active"' : '' ?>><a href="<?php echo SERVER ?>/unternehmen"">Geschäftsmodell</a></li>
<li <?php echo ($page_path == "karrierechancen") ? 'class="active"' : '' ?>><a href="<?php echo SERVER ?>/geschaeftsmodell/karrierechancen">Karrierechancen</a></li>
<li <?php echo ($page_path == "kontakt") ? 'class="active"' : '' ?>><a href="<?php echo SERVER ?>/kontakt">Kontakt</a></li>
<li <?php echo ($page_path == "Partner") ? 'class="active"' : '' ?>><a href="<?php echo SERVER ?>/partner">Partner</a></li>
</ul>
<!-- /Links -->
</div>
@ -95,14 +96,6 @@
<a href="#" id="toTop"></a>
<!-- PRELOADER -->
<div id="preloader">
<div class="inner">
<span class="loader"></span>
</div>
</div>
<!-- /PRELOADER -->
<!-- JAVASCRIPT FILES -->
<script type="text/javascript">var plugin_path = '<?php echo SERVER ?>/assets/plugins/';</script>

View file

@ -27,7 +27,7 @@
<p>Die weltweit einmaligen und herausragenden Eigenschaften der Aloe Vera sind dem einzigartigen
Zusammenspiel und der Symbiose der unterschiedlichen Inhalts- und Wirkstoffe zu verdanken. Keine
andere bisher bekannte Pflanze verfügt über derart vielseitige Möglichkeiten der heilenden und
pflegenden Anwendung. Insgesamt sind in der medizinischen Literatur derzeit weit mehr als 250
pflegenden Anwendung. Insgesamt sind in der medizinischen Literatur derzeit weit mehr als 200
aktive Substanzen bekannt, und stetig werden neue entdeckt. Die Entschlüsselung des komplexen
Zusammenspiels aller Substanzen steht zwar erst ganz am Anfang, die Wirkungen sind inzwischen
aber sehr gut belegt.</p>
@ -61,13 +61,13 @@
<div class="row">
<div class="col-sm-6">
<img class="img-fluid" src="/assets/images/mivita-herkunft.jpg" alt="service"/>
<p class="small"><em>Herkunft ...</em></p>
<img class="img-fluid" src="/assets/images/aloe-vera-farm-haus.jpg" alt="service"/>
<p class="small"><em>Geschäft auf der Aloe Vera Farm</em></p>
</div>
<div class="col-sm-6">
<img class="img-fluid" src="/assets/images/mivita-bio-qualitaet.jpg" alt="service"/>
<p class="small"><em>BIO Qualität ...</em></p>
<img class="img-fluid" src="/assets/images/bio-siegel.jpg" alt="service"/>
<p class="small"><em></em></p>
</div>
</div>
@ -123,7 +123,7 @@
<div class="col-md-12 margin-top-60">
<div class="heading-title heading-border-bottom heading-color text-left">
<h3>Was was macht unsere Aloe Vera Produkte so hochwertig?</h3>
<h3>Was macht unsere Aloe Vera Produkte so hochwertig?</h3>
<p>Einer der weltweit besten Aloe Vera Säfte als Grundlage für hochwertige Aloe Produkte</p>
</div>
<p>Das Gel der Aloe Vera Blätter ist ein wahrer Schatz und ein Geschenk der Natur. Aber vom
@ -152,7 +152,7 @@
<div class="col-sm-6">
<ul class="list-unstyled list-icons">
<li><i class="fa fa-check text-success"></i>Ernte und Flitierung der Blätter von
<li><i class="fa fa-check text-success"></i>Ernte und Filetierung der Blätter von
Hand
</li>
<li><i class="fa fa-check text-success"></i>Verarbeitung zu Produkten direkt nach

View file

@ -20,7 +20,7 @@
<div class="col-md-12">
<p>Bei MIVITA ist jeder willkommen, der sich mit Freude und Engagement was ganz Eigenes aufbauen
möchte. Zu unseren Vertriebspartnern zählen vor alle Leutew wie ...</p>
möchte. Zu unseren Vertriebspartnern zählen vor allem Leute wie ...</p>
<ul class="small">
<li>Angestellte mit Vollzeitjob</li>
@ -58,8 +58,7 @@
<div class="col-md-12">
<h2>Das klingt spannend für Dich?</h2>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
ut labore et dolore magna aliquyam erat, sed diam voluptua.</p>
<p>Dann nimm noch heute Kontakt mit uns auf - wir freuen uns, Dich kennenzulernen.</p>
<a href="/kontakt" rel="nofollow" target="_blank" class="btn btn-primary btn-lg">zum
Kontaktformular</a>

View file

@ -6,53 +6,224 @@
<div class="container">
<div class="white-box">
<h3 class="box-title m-b-0">Datenschutz</h3>
<h3 class="box-title m-b-0">Datenschutzerklärung</h3>
<hr>
<p> <strong>Datenschutzerklärung</strong>
<br> Wir freuen uns über Ihr Interesse an unserer Website. Der Schutz Ihrer Privatsphäre ist für uns sehr wichtig. Nachstehend informieren wir Sie ausführlich über den Umgang mit Ihren Daten. </p>
<p> <strong>Speicherung von Zugriffsdaten in Server-Logfiles</strong>
<br> Sie können unsere Webseiten besuchen, ohne Angaben zu Ihrer Person zu machen. Wir speichern lediglich Zugriffsdaten in sogenannten Server-Logfiles, wie z.B. den Namen der angeforderten Datei, Datum und Uhrzeit des Abrufs, übertragene Datenmenge und den anfragenden Provider. Diese Daten werden ausschließlich zur Sicherstellung eines störungsfreien Betriebs der Seite und zur Verbesserung unseres Angebots ausgewertet und erlauben uns keinen Rückschluss auf Ihre Person. </p>
<p> <strong>Datenerhebung und -verwendung zur Vertragsabwicklung und bei Eröffnung eines Kundenkontos</strong>
<br> Wir erheben personenbezogene Daten, wenn Sie uns diese im Rahmen Ihrer Bestellung, bei einer Kontaktaufnahme mit uns (z.B. per Kontaktformular oder E-Mail) oder bei Eröffnung eines Kundenkontos freiwillig mitteilen. Welche Daten erhoben werden, ist aus den jeweiligen Eingabeformularen ersichtlich. Wir verwenden die von Ihnen mitgeteilten Daten zur Vertragsabwicklung und Bearbeitung Ihrer Anfragen. Nach vollständiger Abwicklung des Vertrages oder Löschung Ihres Kundenkontos werden Ihre Daten für die weitere Verwendung gesperrt und nach Ablauf der steuer- und handelsrechtlichen Aufbewahrungsfristen gelöscht, sofern Sie nicht ausdrücklich in eine weitere Nutzung Ihrer Daten eingewilligt haben oder wir uns eine darüber hinausgehende Datenverwendung vorbehalten, die gesetzlich erlaubt ist und über die wir Sie nachstehend informieren. Die Löschung Ihres Kundenkontos ist jederzeit möglich und kann entweder durch eine Nachricht an die unten beschriebene Kontaktmöglichkeit oder über eine dafür vorgesehene Funktion im Kundenkonto erfolgen. </p>
<p> <strong>Datenweitergabe zur Vertragserfüllung</strong>
<br> Zur Vertragserfüllung geben wir Ihre Daten an das mit der Lieferung beauftragte Versandunternehmen weiter, soweit dies zur Lieferung bestellter Waren erforderlich ist. Zur Abwicklung von Zahlungen geben wir die hierfür erforderlichen Zahlungsdaten an das mit der Zahlung beauftragte Kreditinstitut und ggf. von uns beauftragte Zahlungsdienstleister weiter bzw. an den von Ihnen im Bestellprozess ausgewählten Zahlungsdienst.</p>
<p> <strong>Datenverwendung bei Anmeldung zum E-Mail-Newsletter</strong>
<br> Wenn Sie sich zu unserem Newsletter anmelden, verwenden wir die hierfür erforderlichen oder gesondert von Ihnen mitgeteilten Daten, um Ihnen regelmäßig unseren E-Mail-Newsletter zuzusenden. Die Abmeldung vom Newsletter ist jederzeit möglich und kann entweder durch eine Nachricht an die unten beschriebene Kontaktmöglichkeit oder über einen dafür vorgesehenen Link im Newsletter erfolgen. </p>
<p> <strong>Datenverwendung für E-Mail-Werbung ohne Newsletter-Anmeldung und Ihr Widerspruchsrecht</strong>
<br> Wenn wir Ihre E-Mail-Adresse im Zusammenhang mit dem Verkauf einer Ware oder Dienstleistung erhalten und Sie dem nicht widersprochen haben, behalten wir uns vor, Ihnen regelmäßig Angebote zu ähnlichen Produkten, wie den bereits gekauften, aus unserem Sortiment per E-Mail zuzusenden. Sie können dieser Verwendung Ihrer E-Mail-Adresse jederzeit durch eine Nachricht an die unten beschriebene Kontaktmöglichkeit oder über einen dafür vorgesehenen Link in der Werbemail widersprechen, ohne dass hierfür andere als die Übermittlungskosten nach den Basistarifen entstehen. </p>
<p> <strong>Datenverwendung für Postwerbung und Ihr Widerspruchsrecht</strong>
<br> Darüber hinaus behalten wir uns vor, Ihren Vor- und Nachnamen, Ihre Postanschrift und - soweit wir diese zusätzlichen Angaben im Rahmen der Vertragsbeziehung von Ihnen erhalten haben - Ihren Titel, akademischen Grad, Ihr Geburtsjahr und Ihre Berufs-, Branchen- oder Geschäftsbezeichnung in zusammengefassten Listen zu speichern und für eigene Werbezwecke zu nutzen, z.B. zur Zusendung von interessanten Angeboten und Informationen zu unseren Produkten per Briefpost. Sie können der Speicherung und Verwendung Ihrer Daten zu diesen Zwecken jederzeit durch eine Nachricht an die unten beschriebene Kontaktmöglichkeit widersprechen. </p>
<p> <strong>Verwendung von Cookies</strong>
<br> Um den Besuch unserer Website attraktiv zu gestalten und die Nutzung bestimmter Funktionen zu ermöglichen, verwenden wir auf verschiedenen Seiten sogenannte Cookies. Hierbei handelt es sich um kleine Textdateien, die auf Ihrem Endgerät gespeichert werden. Einige der von uns verwendeten Cookies werden nach Ende der Browser-Sitzung, also nach Schließen Ihres Browsers, wieder gelöscht (sog. Sitzungs-Cookies). Andere Cookies verbleiben auf Ihrem Endgerät und ermöglichen uns, Ihren Browser beim nächsten Besuch wiederzuerkennen (persistente Cookies). Sie können Ihren Browser so einstellen, dass Sie über das Setzen von Cookies informiert werden und einzeln über deren Annahme entscheiden oder die Annahme von Cookies für bestimmte Fälle oder generell ausschließen. Bei der Nichtannahme von Cookies kann die Funktionalität unserer Website eingeschränkt sein. </p>
<p> <strong>Einsatz von Google Analytics zur Webanalyse</strong>
<br> Diese Website benutzt Google Analytics, einen Webanalysedienst der Google Inc. (www.google.de). Google Analytics verwendet sog. „Cookies“, Textdateien, die auf Ihrem Computer gespeichert werden und die eine Analyse der Benutzung der Website durch Sie ermöglichen. Die durch den Cookie erzeugten Informationen über Ihre Benutzung dieser Website werden in der Regel an einen Server von Google in den USA übertragen und dort gespeichert. Im Falle der Aktivierung der IP-Anonymisierung auf dieser Webseite, wird Ihre IP-Adresse von Google jedoch innerhalb von Mitgliedstaaten der Europäischen Union oder in anderen Vertragsstaaten des Abkommens über den Europäischen Wirtschaftsraum zuvor gekürzt. Nur in Ausnahmefällen wird die volle IP-Adresse an einen Server von Google in den USA übertragen und dort gekürzt. Die IP-Anonymisierung ist auf dieser Website aktiv. Im Auftrag des Betreibers dieser Website wird Google diese Informationen benutzen, um Ihre Nutzung der Website auszuwerten, um Reports über die Websiteaktivitäten zusammenzustellen und um weitere mit der Websitenutzung und der Internetnutzung verbundene Dienstleistungen gegenüber dem Websitebetreiber zu erbringen. Die im Rahmen von Google Analytics von Ihrem Browser übermittelte IP-Adresse wird nicht mit anderen Daten von Google zusammengeführt. Sie können die Speicherung der Cookies durch eine entsprechende Einstellung Ihrer Browser-Software verhindern; wir weisen Sie jedoch darauf hin, dass Sie in diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website vollumfänglich werden nutzen können.
<br>
<br> Sie können darüber hinaus die Erfassung der durch das Cookie erzeugten und auf Ihre Nutzung der Website bezogenen Daten (inkl. Ihrer IP-Adresse) an Google sowie die Verarbeitung dieser Daten durch Google verhindern, indem Sie das unter dem folgenden Link verfügbare Browser-Plugin herunterladen und installieren: <a target="_blank" href="http://tools.google.com/dlpage/gaoptout?hl=de" rel="nofollow">http://tools.google.com/dlpage/gaoptout?hl=de</a>
Unsere Website kann grundsätzlich ohne Angabe personenbezogener Daten genutzt werden. Sofern Sie bestimmte Leistungen über unsere Website in Anspruch nehmen wollen, kann eine Verarbeitung Ihrer personenbezogenen Daten erforderlich werden.
<br>
Die Verarbeitung Ihrer personenbezogener Daten erfolgt stets in Übereinstimmung mit der Datenschutz-Grundverordnung (DSGVO) und den für uns geltenden landesspezifischen Datenschutzbestimmungen.
<br>
<br>Sie können alternativ die Erfassung durch Google Analytics auch verhindern, indem Sie auf folgenden Link klicken. Es wird ein Opt-Out-Cookie gesetzt, das die zukünftige Erfassung Ihrer Daten beim Besuch dieser Website verhindert: Google Analytics deaktivieren. Das Opt-Out-Cookie gilt nur für diesen Browser und auch nur für diese Domain. Löschen Sie Ihre Cookies in diesem Browser, müssen Sie diesen Link erneut klicken. Nähere Informationen hierzu finden Sie unter tools.google.com/dlpage/gaoptout bzw. unter <a target="_blank" href="https://www.google.de/intl/de/policies/" rel="nofollow">https://www.google.de/intl/de/policies/</a> (allgemeine Informationen zu Google Analytics und Datenschutz). Weitere Informationen erhalten Sie unter <a target="_blank" href="https://www.google.com/policies/privacy/" rel="nofollow">https://www.google.com/policies/privacy/</a>. Wir weisen Sie zudem darauf hin, dass auf dieser Webseite Google Analytics um die IP-Masking Funktion „_gat._anonymizeIp“ erweitert wurde, um eine anonymisierte Erfassung von IP-Adressen zu gewährleisten. Wir nutzen Google Analytics zudem dazu, Daten aus AdWords und dem Double-Click-Cookie zu statistischen Zwecken auszuwerten. Sollten Sie dies nicht wünschen, können Sie dies über den Anzeigenvorgaben-Manager (http://www.google.com/settings/ads/onweb/?hl=de) deaktivieren.</p>
<p><strong>Remarketing</strong>
<br> mit Google Adwords und Dynamic Remarketing
<br>
<br> Um auf unsere Dienstleistungen aufmerksam zu machen, schalten wir Google-Adwords-Anzeigen und nutzen im Rahmen dessen das Google Dynamic Remaketing. Diese Anzeigen werden nach Suchanfragen auf Webseiten des <a target="_blank" href="https://support.google.com/adwords/answer/1752334?hl=de rel=" nofollow="" ""="">Google-Werbenetzwerkes</a> eingeblendet. Wir haben die Möglichkeit unsere Anzeigen mit bestimmten Suchbegriffen zu kombinieren oder für vorherige Besucher Anzeigen schalten, in denen die Produkte und Dienstleistungen beworben werden, die sie sich auf unserer Website angesehen haben.
<br>
<br> Für interessenbezogene Werbung ist eine Analyse des Online-Nutzerverhaltens notwendig. Zur Durchführung dieser Analyse setzt Google Cookies ein. Beim Klick auf eine Anzeige wird auf dem Computer des Nutzers durch Google ein Cookie gesetzt. Weitergehende Informationen zur eingesetzten Cookie-Technologie finden Sie auch bei den Hinweisen von Google zu den <a target="_blank" href="http://services.google.com/sitestats/de.html" rel="nofollow" "=" ">Website-Statistiken</a> und in den <a target="_blank " href="https://www.google.com/policies/privacy/ " rel="nofollow ">Datenschutzbestimmungen</a>.
Wir haben nach Maßgabe des Art. 32 DSGVO geeignete technische und organisatorische Maßnahmen getroffen, um ein angemessenes Schutzniveau zu gewährleisten. Weiterhin haben wir Verfahren eingerichtet, die eine Wahrnehmung Ihrer Rechte, die Löschung von Daten und die Reaktion auf eine Gefährdung der Daten gewährleisten. Den Schutz Ihrer personenbezogenen Daten haben wir bereits bei der Entwicklung und Auswahl der verwendeten Hardware und Software berücksichtigt. Hiermit kommen wir dem Prinzip des Datenschutzes durch Technikgestaltung/durch datenschutzfreundliche Voreinstellungen nach, Art. 25 DSGVO. Zu unseren Sicherheitsmaßnahmen gehören insbesondere die verschlüsselte Übertragung (SSL-Verschlüsselung) von Daten zwischen Ihrem Browser und unserem Server.
<br><br>
Mit Hilfe dieser Technologie erhalten Google und wir als Kunde Informationen darüber, dass ein Nutzer auf eine Anzeige geklickt hat und zu unseren Webseiten weitergeleitet wurde. Die hierbei erlangten Informationen werden ausschließlich für eine statistische Auswertung zur Anzeigenoptimierung genutzt. Wir erhalten keine Informationen, mit denen sich Besucher persönlich identifizieren lassen. Die uns von Google zur Verfügung gestellten Statistiken beinhalten die Gesamtzahl der Nutzer, die auf eine unserer Anzeigen geklickt haben, und ggf., ob diese zu einer mit einem Conversion-Tag versehenen Seite unseres Webauftrittes weitergeleitet wurden. Anhand dieser Statistiken können wir z. B. nachvollziehen, bei welchen Suchbegriffen besonders oft auf unsere Anzeige geklickt wurde und welche Anzeigen zu einer Kontaktaufnahme oder Kauf durch den Nutzer führen.
<br><br>
Ferner verwenden wir DoubleClick, eine Dienstleistung von Google Inc. (1600 Amphitheatre Parkway, Mountain View, CA 94043, USA,"Google "). DoubleCklick verwendet Cookies, um nutzerbasierte Werbeanzeigen zu schalten. Die Cookies erkennen, welche Anzeige bereits in Ihrem Browser geschaltet wurde und ob Sie über eine geschaltete Anzeige eine Website aufgerufen haben. Dabei erfassen die Cookies keine personenbezogenen Informationen und können auch nicht mit solchen in Verbindung gebracht werden.
<br><br>
Wenn Sie dieses nicht möchten, können Sie das Speichern des für diese Technologien erforderlichen Cookies bspw. über die Einstellungen Ihres Browsers unterbinden. In diesem Fall fließt Ihr Besuch nicht in die Nutzerstatistiken ein. Sie haben zudem die die Möglichkeit über die <a href="https://www.google.com/settings/u/0/ads/authenticated?hl=de " rel="nofollow " "="">Anzeigeneinstellung</a> die Typen von Google Anzeigen auszuwählen bzw. interessenbezogene Anzeigen auf Google zu deaktivieren. Alternativ können Sie die Verwendung von Cookies durch Drittanbieter deaktivieren, indem Sie die <a href="http://www.networkadvertising.org/choices/" rel="nofollow" "=" ">Deaktivierungshilfe der Netzwerkwerbeinitiative</a> aufrufen. Wir und Google erhalten allerdings weiterhin die statistische Information, wie viele Nutzer wann diese Seite besucht haben. Wenn Sie auch in diese Statistik nicht aufgenommen werden möchten, können Sie dies mit Hilfe von zusätzlichen Programmen für Ihren Browser (bspw. mit dem <a target="_blank " href="https://www.ghostery.com " rel="nofollow " "="">Add-on Ghostery</a>) unterbinden.
<strong>I. Definitionen</strong>
<br>
</p>
<p><strong>Bewertungserinnerung durch Trusted Shops </strong>
<br> Sofern Sie uns hierzu während oder nach Ihrer Bestellung Ihre ausdrückliche Einwilligung erteilt haben, indem Sie eine entsprechende Checkbox aktiviert oder einen hierfür vorgesehenen Button („Später bewerten“) geklickt haben, übermitteln wir Ihre E-Mail-Adresse für die Erinnerung zur Abgabe einer Bewertung Ihrer Bestellung an die Trusted Shops GmbH, Subbelrather Str. 15c, 50823 Köln (<a target="_blank" href="http://www.trustedshops.de" rel="nofollow">www.trustedshops.de</a>), damit diese Sie per E-Mail an die Möglichkeit zur Abgabe einer Bewertung erinnert. Diese Einwilligung kann jederzeit durch eine Nachricht an die unten beschriebene Kontaktmöglichkeit oder direkt gegenüber Trusted Shops widerrufen werden. </p>
<p> <strong>Auskunftsrecht und Kontaktmöglichkeit </strong>
<br> Sie haben ein Recht auf unentgeltliche Auskunft über die bei uns zu Ihrer Person gespeicherten Daten sowie ggf. ein Recht auf Berichtigung, Sperrung oder Löschung dieser Daten. Bei Fragen zur Erhebung, Verarbeitung oder Nutzung Ihrer personenbezogenen Daten, bei Auskünften, Berichtigung, Sperrung oder Löschung von Daten sowie Widerruf erteilter Einwilligungen oder Widerspruch gegen eine bestimmte Datenverwendung wenden Sie sich bitte direkt an uns über die Kontaktdaten in unserem Impressum. </p>
<p>
<br><i><a target="_blank" title="Kostenlose Datenschutzerklärung" href="http://shop.trustedshops.de/rechtstexte-kostenlos" rel="nofollow">Datenschutzerklärung</a> kostenlos erstellt mit <a target="_blank" title="Trusted Shops" href="http://www.trustedshops.com" rel="nofollow">Trusted Shops</a> Rechtstexter in Kooperation mit <a target="_blank" title="Wilde Beuger Solmecke Rechtsanwälte" href="http://www.wbs-law.de" rel="nofollow">Wilde Beuger Solmecke Rechtsanwälte</a>.</i></p>
Zur besseren Verständlichkeit unserer Datenschutzerklärung möchten wir Ihnen zunächst einige der verwendeten Begriffe erläutern. Im Sinne dieser Datenschutzerklärung bezeichnet der Ausdruck:
<br><br>
1) „personenbezogene Daten“ alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person (im Folgenden "betroffene Person") beziehen; als identifizierbar wird eine natürliche Person angesehen, die direkt oder indirekt, insbesondere mittels Zuordnung zu einer Kennung wie einem Namen, zu einer Kennnummer, zu Standortdaten, zu einer Online-Kennung oder zu einem oder mehreren besonderen Merkmalen identifiziert werden kann, die Ausdruck der physischen, physiologischen, genetischen, psychischen, wirtschaftlichen, kulturellen oder sozialen Identität dieser natürlichen Person sind;
<br><br>
2) „Verarbeitung“ jeden mit oder ohne Hilfe automatisierter Verfahren ausgeführten Vorgang oder jede solche Vorgangsreihe im Zusammenhang mit personenbezogenen Daten wie das Erheben, das Erfassen, die Organisation, das Ordnen, die Speicherung, die Anpassung oder Veränderung, das Auslesen, das Abfragen, die Verwendung, die Offenlegung durch Übermittlung, Verbreitung oder eine andere Form der Bereitstellung, den Abgleich oder die Verknüpfung, die Einschränkung, das Löschen oder die Vernichtung;
<br><br>
3) "Einschränkung der Verarbeitung" die Markierung gespeicherter personenbezogener Daten mit dem Ziel, ihre künftige Verarbeitung einzuschränken;
<br><br>
4) "Profiling" jede Art der automatisierten Verarbeitung personenbezogener Daten, die darin besteht, dass diese personenbezogenen Daten verwendet werden, um bestimmte persönliche Aspekte, die sich auf eine natürliche Person beziehen, zu bewerten, insbesondere um Aspekte bezüglich Arbeitsleistung, wirtschaftliche Lage, Gesundheit, persönliche Vorlieben, Interessen, Zuverlässigkeit, Verhalten, Aufenthaltsort oder Ortswechsel dieser natürlichen Person zu analysieren oder vorherzusagen;
<br><br>
5) "Pseudonymisierung" die Verarbeitung personenbezogener Daten in einer Weise, dass die personenbezogenen Daten ohne Hinzuziehung zusätzlicher Informationen nicht mehr einer spezifischen betroffenen Person zugeordnet werden können, sofern diese zusätzlichen Informationen gesondert aufbewahrt werden und technischen und organisatorischen Maßnahmen unterliegen, die gewährleisten, dass die personenbezogenen Daten nicht einer identifizierten oder identifizierbaren natürlichen Person zugewiesen werden;
<br><br>
6) „Verantwortliche“ die natürliche oder juristische Person, Behörde, Einrichtung oder andere Stelle, die allein oder gemeinsam mit anderen über die Zwecke und Mittel der Verarbeitung von personenbezogenen Daten entscheidet; sind die Zwecke und Mittel dieser Verarbeitung durch das Unionsrecht oder das Recht der Mitgliedstaaten vorgegeben, so kann der Verantwortliche beziehungsweise können die bestimmten Kriterien seiner Benennung nach dem Unionsrecht oder dem Recht der Mitgliedstaaten vorgesehen werden
<br><br>
7) „Auftragsverarbeiter“ eine natürliche oder juristische Person, Behörde, Einrichtung oder andere Stelle, die personenbezogene Daten im Auftrag des Verantwortlichen verarbeitet;
<br><br>
8) „Empfänger“ eine natürliche oder juristische Person, Behörde, Einrichtung oder andere Stelle, der personenbezogene Daten offengelegt werden, unabhängig davon, ob es sich bei ihr um einen Dritten handelt oder nicht. Behörden, die im Rahmen eines bestimmten Untersuchungsauftrags nach dem Unionsrecht oder dem Recht der Mitgliedstaaten möglicherweise personenbezogene Daten erhalten, gelten jedoch nicht als Empfänger; die Verarbeitung dieser Daten durch die genannten Behörden erfolgt im Einklang mit den geltenden Datenschutzvorschriften gemäß den Zwecken der Verarbeitung;
<br><br>
9) „Dritter“ eine natürliche oder juristische Person, Behörde, Einrichtung oder andere Stelle, außer der betroffenen Person, dem Verantwortlichen, dem Auftragsverarbeiter und den Personen, die unter der unmittelbaren Verantwortung des Verantwortlichen oder des Auftragsverarbeiters befugt sind, die personenbezogenen Daten zu verarbeiten;
<br><br>
10) „Einwilligung“ der betroffenen Person jede freiwillig für den bestimmten Fall, in informierter Weise und unmissverständlich abgegebene Willensbekundung in Form einer Erklärung oder einer sonstigen eindeutigen bestätigenden Handlung, mit der die betroffene Person zu verstehen gibt, dass sie mit der Verarbeitung der sie betreffenden personenbezogenen Daten einverstanden ist;
<br><br>
11) „Verletzung des Schutzes personenbezogener Daten“ eine Verletzung der Sicherheit, die, ob unbeabsichtigt oder unrechtmäßig, zur Vernichtung, zum Verlust, zur Veränderung, oder zur unbefugten Offenlegung von beziehungsweise zum unbefugten Zugang zu personenbezogenen Daten führt, die übermittelt, gespeichert oder auf sonstige Weise verarbeitet wurden.
<br><br>
<strong>II. Verantwortlicher</strong>
<br>
Verantwortlicher im Sinne der Datenschutz-Grundverordnung sowie der in den Mitgliedstaaten der Europäischen Union geltenden Datenschutzgesetze und anderer datenschutzrechtlicher Bestimmungen ist:
<br><br>
<strong>mivita e.K.</strong><br>
Herr Alois Ried<br>
Leinfeld 2<br>
87755 Kirchhaslach<br>
Telefon: +49 (0) 8333 946 98 90<br>
Fax: +49 (0) 8333 7268<br>
Mail: info@mivita.care<br>
<br><br>
<strong>III. Cookies</strong>
<br>
Unsere Website verwendet Cookies. Cookies sind kleine Textdateien, die über einen Internetbrowser auf einem Computersystem abgelegt und gespeichert werden.
<br>
Zahlreiche Websites und Server verwenden Cookies. Viele Cookies enthalten eine sogenannte Cookie-ID. Eine Cookie-ID ist eine eindeutige Kennung des Cookies. Sie besteht aus einer Zeichenfolge, durch die Websites und Server dem konkreten Internetbrowser zugeordnet werden können, in dem das Cookie gespeichert wurde. Dies ermöglicht es den besuchten Websites und Servern, den individuellen Browser der betroffenen Person von anderen Internetbrowsern, die andere Cookies enthalten, zu unterscheiden. Ein bestimmter Internetbrowser kann über die eindeutige Cookie-ID wiedererkannt und identifiziert werden.
<br>
Durch den Einsatz von Cookies können wir Ihnen nutzerfreundlichere Services bereitstellen, die ohne die Cookie-Setzung nicht möglich wären.
<br>
Mittels eines Cookies können die Informationen und Angebote auf unserer Website im Sinne des Benutzers optimiert werden. Cookies ermöglichen uns, wie bereits erwähnt, die Benutzer unserer Website wiederzuerkennen. Zweck dieser Wiedererkennung ist es, Ihnen die Verwendung unserer Websites zu erleichtern. Der Benutzer einer Website, die Cookies verwendet, muss beispielsweise nicht bei jedem Besuch der Internetseite erneut seine Zugangsdaten eingeben, weil dies von der Internetseite und dem auf dem Computersystem des Benutzers abgelegten Cookie übernommen wird.
<br>
Die durch Cookies verarbeiteten Daten sind für die genannten Zwecke zur Wahrung unserer berechtigten Interessen nach Art. 6 Abs. 1 S. 1 lit. f DSGVO erforderlich.
<br>
Sie können die Setzung von Cookies durch unsere Website jederzeit mittels einer entsprechenden Einstellung des genutzten Internetbrowsers verhindern und damit der Setzung von Cookies dauerhaft widersprechen. Ferner können bereits gesetzte Cookies jederzeit über einen Internetbrowser oder andere Softwareprogramme gelöscht werden. Dies ist in allen gängigen Internetbrowsern möglich. Sollten Sie die Setzung von Cookies in dem von Ihnen genutzten Internetbrowser deaktiveren, sind unter Umständen nicht alle Funktionen unserer Website vollumfänglich nutzbar.
<br><br>
IV. Daten und Informationen, die beim Aufruf unserer Website gespeichert werden
<br>
Bei jedem Aufruf unserer Website werden allgemeine Daten und Informationen erfasst, die in den Logfiles des Servers gespeichert werden.
<br><br>
<strong>Folgende Daten/Informationen können erfasst werden:</strong>
<br>
- die verwendeten Browsertypen und Versionen
- das verwendete Betriebssystem,
- die Website, von der Sie auf unsere Website gelangen
- die Unterwebsites, die auf unserer Website angesteuert werden
- das Datum und die Uhrzeit des Zugriffs auf unsere Website,
- Ihre IP-Adresse
- Ihr Internet-Service-Provider
- sonstige ähnliche Daten und Informationen, die der Gefahrenabwehr im Falle von Angriffen auf unsere IT-Systeme dienen.
<br><br>
Wir benötigen diese Informationen, um die Inhalte unserer Website zutreffend bereitstellen zu können. die dauerhafte Funktionsfähigkeit unseres IT-Systems gewährleisten zu können und um im Falle eines Cyberangriffes den Behörden die zu einer Strafverfolgung notwendigen Informationen bereitstellen zu können. Hierin liegt auch unser berechtigtes Interesse im Rahmen der Rechtsgrundlage für die Verarbeitung dieser Daten gemäß Art. 6 Abs. 1 lit. f DSGVO. Bei der Nutzung dieser allgemeinen Daten und Informationen ziehen wir keine Rückschlüsse auf die betroffene Person. Die anonymen Daten der Server-Logfiles speichern wir getrennt von allen personenbezogenen Daten.
V. Elektronische Kontaktaufnahme mit uns
<br><br>
Aufgrund der Regelungen des Telemediengesetzes (TMG) sind wir zur Angabe einer allgemeinen Mailadresse im Impressum unserer Website verpflichtet, über die Sie uns per Mail kontaktieren können. Weiterhin haben Sie die Möglichkeit, über Kontaktformulare auf unserer Website Kontakt mit uns aufzunehmen. Über die Kontaktformulare können Sie u.a. Anfragen zu den Produkten oder unserem Geschäft stellen bzw. sich als Berater bei uns bewerben. Die von Ihnen per Mail oder unsere Kontaktformulare an uns übermittelten personenbezogenen Daten werden automatisch für Zwecke der Bearbeitung oder der Kontaktaufnahme zu Ihnen gespeichert.
<br><br>
Mit Absenden Ihrer Nachricht willigen Sie in die Verarbeitung der übermittelten Daten ein. Die Verarbeitung erfolgt auf Grundlage des Art. 6 Abs. 1 lit. a DSGVO mit Ihrer Einwilligung. Sie können Ihre Einwilligung jederzeit durch Mitteilung an uns widerrufen, ohne dass die Rechtmäßigkeit der aufgrund der Einwilligung bis zum Widerruf erfolgten Verarbeitung berührt wird. Ihre E-Mail-Adresse nutzen wir nur zur Bearbeitung Ihrer Anfrage. Ihre Daten werden anschließend gelöscht, sofern Sie der weitergehenden Verarbeitung und Nutzung nicht zugestimmt haben.
<br><br>
<strong>VI. Rechtsgrundlagen der Verarbeitung</strong>
<br>
Sofern wir bei Ihnen eine Einwilligung für einen bestimmten Verarbeitungszweck einholen, dient uns Art. 6 I lit. a DSGVO als Rechtsgrundlage für den Verarbeitungsvorgang.
<br><br>
Sofern die Verarbeitung personenbezogener Daten zur Erfüllung eines Vertrags erforderlich ist, beruht die Verarbeitung auf Art. 6 I lit. b DSGVO. Dies gilt ebenfalls für Verarbeitungsvorgänge, die zur Durchführung vorvertraglicher Maßnahmen erforderlich sind, etwa bei Anfragen zur unseren Produkten oder sonstigen Leistungen.
<br><br>
Sofern wir einer rechtlichen Verpflichtung unterliegen, durch die eine Verarbeitung von personenbezogenen Daten erforderlich wird, wie beispielsweise zur Erfüllung steuerlicher Pflichten, so ist Rechtsgrundlage für die Verarbeitung Art. 6 I lit. c DSGVO.
<br><br>
Sofern die Verarbeitung von personenbezogenen Daten erforderlich wird, um lebenswichtige Interessen der betroffenen Person oder einer anderen natürlichen Person zu schützen, würde die Verarbeitung auf Art. 6 I lit. d DSGVO beruhen.
<br><br>
Letztlich kann Art. 6 I lit. f DSGVO Rechtsgrundlage für einen Verarbeitungsvorgang sein. Dies ist dann der Fall, wenn der Verarbeitungsvorgang von keiner der vorgenannten Rechtsgrundlagen erfasst wird und die Verarbeitung zur Wahrung eines berechtigten Interesses unseres Unternehmens oder eines Dritten erforderlich ist, sofern die Interessen, Grundrechte und Grundfreiheiten des Betroffenen nicht überwiegen. Basiert die Verarbeitung personenbezogener Daten auf Artikel 6 I lit. f DSGVO ist unser berechtigtes Interesse die Durchführung unserer Geschäftstätigkeit zugunsten des Wohlergehens unserer Mitarbeiter/Anteilseigner.
<br><br>
<strong>VII. Gesetzliche oder vertragliche Vorschriften zur Bereitstellung der personenbezogenen Daten</strong>
<br>
Die Bereitstellung personenbezogener Daten ist zum Teil gesetzlich vorgeschrieben ist (z.B. Steuervorschriften) und kann sich auch aus vertraglichen Regelungen (z.B. Angaben zum Vertragspartner) ergeben. Für den Fall, dass Sie einen Vertrag mit uns abschließen wollen, ist es erforderlich, dass Sie uns personenbezogene Daten zur Verfügung stellen, die in der Folge durch uns verarbeitet werden. Eine Nichtbereitstellung der personenbezogenen Daten hätte zur Folge, dass wir keinen Vertrag mit Ihnen schließen können.
<br><br>
<strong>VIII. Routinemäßige Löschung/Sperrung von personenbezogenen Daten</strong>
<br>
Wir verarbeiten und speichern personenbezogene Daten nur für den Zeitraum, der zur Erreichung des Speicherungszwecks erforderlich ist oder sofern dies durch den Europäischen Richtlinien- und Verordnungsgeber oder einen anderen Gesetzgeber in Gesetzen oder Vorschriften vorgesehen wurde. Entfällt der Speicherungszweck oder läuft eine vom Europäischen Richtlinien- und Verordnungsgeber oder einem anderen zuständigen Gesetzgeber vorgeschriebene Speicherfrist ab, werden die personenbezogenen Daten routinemäßig und entsprechend den gesetzlichen Vorschriften gesperrt oder gelöscht.
<br><br>
Nach Ablauf der jeweiligen gesetzlichen Aufbewahrungsfrist werden die entsprechenden Daten routi-nemäßig gelöscht, sofern sie nicht mehr zur Vertragserfüllung oder Vertragsanbahnung erforderlich sind. Nach den gesetzlichen Vorgaben in Deutschland erfolgt die Aufbewahrung insbesondere für 10 Jahre gemäß §§ 147 Abs. 1 AO, 257 Abs. 1 Nr. 1 und 4, Abs. 4 HGB (Bücher, Aufzeichnungen, Lageberichte, Buchungsbelege, Handelsbücher, für Besteuerung relevanter Unterlagen, etc.) und 6 Jahre gemäß § 257 Abs. 1 Nr. 2 und 3, Abs. 4 HGB (Handelsbriefe).
<br><br>
<strong>IX. Ihre Rechte</strong>
<br>
<strong>1) Bestätigungs- und Auskunftsrecht</strong>
<br>
Sie haben das Recht, von uns eine Bestätigung darüber zu verlangen, ob betreffende personenbezogene Daten verarbeitet werden. Möchten Sie Recht in Anspruch nehmen, können sie sich hierzu jederzeit an uns wenden.
<br><br>
Sie haben weiterhin das Recht, von uns unentgeltliche Auskunft über die zu Ihrer Person gespeicherten personenbezogenen Daten und eine Kopie dieser Auskunft zu erhalten. Ferner steht Ihnen ein Auskunftsanspruch über folgende Informationen zu:
<br>
- die Verarbeitungszwecke
- die Kategorien personenbezogener Daten, die verarbeitet werden
- die Empfänger oder Kategorien von Empfängern, gegenüber denen die personenbezogenen Daten offengelegt worden sind oder noch offengelegt werden, insbesondere bei Empfängern in Drittländern oder bei internationalen Organisationen
- falls möglich die geplante Dauer, für die die personenbezogenen Daten gespeichert werden, oder, falls dies nicht möglich ist, die Kriterien für die Festlegung dieser Dauer
- das Bestehen eines Rechts auf Berichtigung oder Löschung der sie betreffenden personenbezogenen Daten oder auf Einschränkung der Verarbeitung durch den Verantwortlichen oder eines Widerspruchsrechts gegen diese Verarbeitung
- das Bestehen eines Beschwerderechts bei einer Aufsichtsbehörde
- wenn die personenbezogenen Daten nicht bei der betroffenen Person erhoben werden: Alle verfügbaren Informationen über die Herkunft der Daten
- das Bestehen einer automatisierten Entscheidungsfindung einschließlich Profiling gemäß Artikel 22 Abs.1 und 4 DSGVO und - zumindest in diesen Fällen - aussagekräftige Informationen über die involvierte Logik sowie die Tragweite und die angestrebten Auswirkungen einer derartigen Verarbeitung für die betroffene Person
<br><br>
Ferner steht Ihnen ein Auskunftsrecht darüber zu, ob personenbezogene Daten an ein Drittland oder an eine internationale Organisation übermittelt wurden. Sofern dies der Fall ist, so steht Ihnen im Übrigen das Recht zu, Auskunft über die geeigneten Garantien im Zusammenhang mit der Übermittlung zu erhalten.
<br><br>
Möchten Sie dieses Auskunftsrecht in Anspruch nehmen, können sie sich hierzu jederzeit an uns wenden.
<br><br>
<strong>2) Recht auf Berichtigung</strong>
<br>
Sie haben das Recht, die unverzügliche Berichtigung sie betreffender unrichtiger personenbezogener Daten zu verlangen. Ferner steht Ihnen das Recht zu, unter Berücksichtigung der Zwecke der Verarbeitung, die Vervollständigung unvollständiger personenbezogener Daten - auch mittels einer ergänzenden Erklärung - zu verlangen.
<br><br>
Möchten Sie dieses Berichtigungsrecht in Anspruch nehmen, können sie sich hierzu jederzeit an uns wenden.
<br><br>
<strong>3) Recht auf Löschung („Recht auf „Vergessenwerden“)</strong>
<br>
Sie haben das Recht, von uns zu verlangen, dass die sie betreffenden personenbezogenen Daten unverzüglich gelöscht werden, sofern einer der folgenden Gründe zutrifft und soweit die Verarbeitung nicht erforderlich ist:
<br>
- Die personenbezogenen Daten wurden für solche Zwecke erhoben oder auf sonstige Weise verarbeitet, für welche sie nicht mehr notwendig sind;
- Sie widerrufen ihre Einwilligung, auf die sich die Verarbeitung gemäß Art. 6 Abs. 1 Buchstabe a DSGVO oder Art. 9 Abs. 2 Buchstabe a DSGVO stützte, und es fehlt an einer anderweitigen Rechtsgrundlage für die Verarbeitung;
- Sie legen gemäß Art. 21 Abs. 1 DSGVO Widerspruch gegen die Verarbeitung ein, und es liegen keine vorrangigen berechtigten Gründe für die Verarbeitung vor, oder Sie legen gemäß Art. 21 Abs. 2 DSGVO Widerspruch gegen die Verarbeitung ein;
- Die personenbezogenen Daten wurden unrechtmäßig verarbeitet;
- Die Löschung der personenbezogenen Daten ist zur Erfüllung einer rechtlichen Verpflichtung nach dem Unionsrecht oder dem Recht der Mitgliedstaaten erforderlich, dem wir unterliegen.
- Die personenbezogenen Daten wurden in Bezug auf angebotene Dienste der Informationsgesellschaft gemäß Art. 8 Abs. 1 DSGVO erhoben.
<br><br>
Sofern einer der oben genannten Gründe zutrifft und Sie die Löschung von personenbezogenen Daten, die bei uns gespeichert sind, veranlassen möchten, können sie sich hierzu jederzeit an uns wenden. Wir werden veranlassen, dass dem Löschverlangen unverzüglich nachgekommen wird.
<br>
Wurden die personenbezogenen Daten von uns öffentlich gemacht und sind wir als Verantwortlicher gemäß Art. 17 Abs. 1 DSGVO zur Löschung der personenbezogenen Daten verpflichtet, so treffen wir unter Berücksichtigung der verfügbaren Technologie und der Implementierungskosten angemessene Maßnahmen, auch technischer Art, um andere für die Datenverarbeitung Verantwortliche, welche die veröffentlichten personenbezogenen Daten verarbeiten, darüber in Kenntnis zu setzen, dass Sie von diesen anderen für die Datenverarbeitung Verantwortlichen die Löschung sämtlicher Links zu diesen personenbezogenen Daten oder von Kopien oder Replikationen dieser personenbezogenen Daten verlangt haben, soweit die Verarbeitung nicht erforderlich ist. Wir werden im Einzelfall das Notwendige veranlassen.
<br><br>
<strong>4) Recht auf Einschränkung der Verarbeitung</strong>
<br>
Sie haben das Recht, von uns die Einschränkung der Verarbeitung zu verlangen, wenn eine der folgenden Voraussetzungen gegeben ist:
<br>
- Die Richtigkeit der personenbezogenen Daten wird von Ihnen bestritten, und zwar für eine Dauer, die es uns ermöglicht, die Richtigkeit der personenbezogenen Daten zu überprüfen;
- Die Verarbeitung ist unrechtmäßig, Sie lehnen die Löschung der personenbezogenen Daten ab und verlangen stattdessen die Einschränkung der Nutzung der personenbezogenen Daten;
- Wir benötigen die personenbezogenen Daten für die Zwecke der Verarbeitung nicht länger, Sie benötigen sie jedoch zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen;
- Sie haben Widerspruch gegen die Verarbeitung gem. Art. 21 Abs. 1 DSGVO eingelegt und es steht noch nicht fest, ob unsere berechtigten Gründe gegenüber Ihren überwiegen.
<br>
Sofern eine der oben genannten Voraussetzungen gegeben ist und Sie die Einschränkung von personenbezogenen Daten, die bei uns gespeichert sind, verlangen möchten, können Sie sich hierzu jederzeit an uns wenden. Wir werden die Einschränkung der Verarbeitung veranlassen.
<br><br>
<strong>5) Recht auf Datenübertragbarkeit</strong>
<br>
Sie haben das Recht, von uns die sie betreffenden personenbezogenen Daten, welche von Ihnen bereitgestellt wurden, in einem strukturierten, gängigen und maschinenlesbaren Format zu erhalten. Sie haben außerdem das Recht, diese Daten einem anderen Verantwortlichen ohne Behinderung durch uns zu übermitteln, sofern die Verarbeitung auf der Einwilligung gemäß Art. 6 Abs. 1 Buchstabe a DSGVO oder Art. 9 Abs. 2 Buchstabe a DSGVO oder auf einem Vertrag gemäß Art. 6 Abs. 1 Buchstabe b DSGVO beruht und die Verarbeitung mithilfe automatisierter Verfahren erfolgt, sofern die Verarbeitung nicht für die Wahrnehmung einer Aufgabe erforderlich ist, die im öffentlichen Interesse liegt oder in Ausübung öffentlicher Gewalt erfolgt, welche uns übertragen wurde.
<br><br>
Ferner haben Sie bei der Ausübung ihres Rechts auf Datenübertragbarkeit gemäß Art. 20 Abs. 1 DSGVO das Recht, zu erwirken, dass die personenbezogenen Daten direkt von uns an einen anderen Verantwortlichen übermittelt werden, soweit dies technisch machbar ist und sofern hiervon nicht die Rechte und Freiheiten anderer Personen beeinträchtigt werden.
<br><br>
Zur Geltendmachung des Rechts auf Datenübertragbarkeit können Sie sich jederzeit an uns wenden.
<br><br>
<strong>6) Recht auf Widerspruch</strong>
<br>
Sie haben das Recht, aus Gründen, die sich aus ihrer besonderen Situation ergeben, jederzeit gegen die Verarbeitung sie betreffender personenbezogener Daten, die aufgrund von Art. 6 Abs. 1 Buchstaben e oder f DSGVO erfolgt, Widerspruch einzulegen. Dies gilt auch für ein auf diese Bestimmungen gestütztes Profiling.
<br><br>
Wir verarbeiten die personenbezogenen Daten im Falle des Widerspruchs nicht mehr, es sei denn, wir können zwingende schutzwürdige Gründe für die Verarbeitung nachweisen, die Ihre Interessen, Rechte und Freiheiten überwiegen, oder die Verarbeitung dient der Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen.
<br>
Verarbeiten wir personenbezogene Daten, um Direktwerbung zu betreiben, so haben Sie das Recht, jederzeit Widerspruch gegen die Verarbeitung der personenbezogenen Daten zum Zwecke derartiger Werbung einzulegen. Dies gilt auch für das Profiling, soweit es mit solcher Direktwerbung in Verbindung steht. Widersprechen Sie der Verarbeitung für Zwecke der Direktwerbung, so werden wir die personenbezogenen Daten nicht mehr für diese Zwecke verarbeiten.
<br><br>
Zudem haben Sie das Recht, aus Gründen, die sich aus ihrer besonderen Situation ergeben, gegen die sie betreffende Verarbeitung personenbezogener Daten, die bei uns zu wissenschaftlichen oder historischen Forschungszwecken oder zu statistischen Zwecken gemäß Art. 89 Abs. 1 DSGVO erfolgen, Widerspruch einzulegen, es sei denn, eine solche Verarbeitung ist zur Erfüllung einer im öffentlichen Interesse liegenden Aufgabe erforderlich.
<br><br>
Zur Ausübung des Rechts auf Widerspruch können Sie sich an uns wenden. Es steht Ihnen frei, im Zusammenhang mit der Nutzung von Diensten der Informationsgesellschaft, ungeachtet der Richtlinie 2002/58/EG, ihr Widerspruchsrecht mittels automatisierter Verfahren auszuüben, bei denen technische Spezifikationen verwendet werden.
<br><br>
<strong>7) Automatisierte Entscheidungen im Einzelfall einschließlich Profiling</strong>
<br>
Sie haben das Recht, nicht einer ausschließlich auf einer automatisierten Verarbeitung - einschließlich Profiling - beruhenden Entscheidung unterworfen zu werden, die Ihnen gegenüber rechtliche Wirkung entfaltet oder sie in ähnlicher Weise erheblich beeinträchtigt, sofern die Entscheidung nicht für den Abschluss oder die Erfüllung eines Vertrags zwischen Ihnen und uns erforderlich ist, oder aufgrund von Rechtsvorschriften der Union oder der Mitgliedstaaten, denen wir unterliegen, zulässig ist und diese Rechtsvorschriften angemessene Maßnahmen zur Wahrung Ihrer Rechte und Freiheiten enthalten oder mit Ihrer ausdrücklicher Einwilligung erfolgt.
<br><br>
Ist die Entscheidung für den Abschluss oder die Erfüllung eines Vertrags zwischen Ihnen und uns erforderlich oder erfolgt sie mit Ihrer ausdrücklicher Einwilligung, treffen wir angemessene Maßnahmen, um Ihre Rechte und Freiheiten sowie Ihre berechtigten Interessen zu wahren, wozu mindestens das Recht auf Erwirkung des Eingreifens einer Person seitens des Verantwortlichen, auf Darlegung des eigenen Standpunkts und auf Anfechtung der Entscheidung gehört.
<br><br>
Möchten Sie Rechte mit Bezug auf automatisierte Entscheidungen geltend machen, können Sie sich hierzu jederzeit an uns wenden.
<br><br>
<strong>8) Recht auf Widerruf einer datenschutzrechtlichen Einwilligung</strong>
<br>
Sie haben das Recht, eine Einwilligung zur Verarbeitung personenbezogener Daten jederzeit zu widerrufen.
Möchten Sie Ihr Recht auf Widerruf einer Einwilligung geltend machen, können Sie sich hierzu jederzeit an uns wenden.
<br><br>
<strong>9) Beschwerderecht bei der Aufsichtsbehörde</strong>
<br>
Sie haben gemäß Art. 77 DSGVO das Recht, sich bei der Aufsichtsbehörde zu beschweren, wenn Sie der Ansicht sind, dass die Verarbeitung Ihrer personenbezogenen Daten nicht rechtmäßig erfolgt.
<br><br>
<strong>X. Zusammenarbeit mit Auftragsverarbeitern/Dritten</strong>
<br>
Soweit wir im Rahmen unserer Datenverarbeitung Ihre Daten gegenüber anderen Personen/Unternehmen offenbaren, an diese übermitteln oder diesen Zugriff auf Ihre Daten gewähren, erfolgt dies ausschließlich auf Grundlage einer gesetzlichen Erlaubnis, Ihrer Einwilligung, einer rechtlichen Verpflichtung oder auf Grundlage unserer berechtigten Interessen. Wenn Dritte von uns mit der Verarbeitung von Daten auf Grundlage eines so genannten „Auftragsverarbeitungsvertrages“ beauftragt worden sind bzw. werden, geschieht dies auf Grundlage des Art. 28 DSGVO.
<br><br>
<strong>XI. Übermittlungen in Drittländer</strong>
<br>
Soweit wir Daten in einem Drittland verarbeiten oder dies im Rahmen der Inanspruchnahme von Diensten Dritter geschieht, erfolgt dies nur, wenn es zur Erfüllung unserer (vor)vertraglichen Pflichten, auf Grundlage Ihrer Einwilligung, aufgrund einer rechtlichen Verpflichtung oder auf Grundlage unserer berechtigten Interessen geschieht. Vorbehaltlich gesetzlicher oder vertraglicher Erlaubnisse verarbeiten oder lassen wir die Daten in einem Drittland nur beim Vorliegen der besonderen Voraussetzungen der Art. 44 ff. DSGVO verarbeiten. Dementsprechend erfolgt die Verarbeitung z.B. auf Grundlage besonderer Garantien, wie der offiziell anerkannten Feststellung eines der EU entsprechenden Datenschutzniveaus (z.B. für die USA durch das „Privacy Shield“) oder Beachtung offiziell anerkannter spezieller vertraglicher Verpflichtungen (so genannte „Standardvertragsklauseln“).
<br><br>
<strong>XII. Einbindung von Diensten und Inhalten Dritter</strong>
<br>
Wir setzen auf unserer Website basierend auf unseren berechtigten Interessen im Sinne des Art. 6 Abs. 1 lit. f. DSGVO Angebote von Drittanbietern ein, um deren Inhalte einbinden zu können. Die Anbieter dieser Inhalte erhalten Kenntnis über Ihre IP-Adresse, da ohne die Kenntnis über die IP-Adresse die Inhalte nicht an Ihren Browser übermittelt werden können. Hierbei bemühen wir uns, nur solche Inhalte von Drittanbietern zu verwenden, bei denen Ihre IP-Adresse ausschließlich zur Auslieferung der Inhalte verwendet wird. Es besteht weiterhin die Möglichkeit, dass Drittanbieter so genannte „Pixel-Tags“ - dies sind unsichtbare Grafiken, die auch als "Web Beacons" bezeichnet werden - für statistische oder Marketingzwecke verwenden. "Pixel-Tags" können Informationen, wie zum Beispiel den Besucherverkehr auf unserer Website, auswerten.
<br><br>
Nachfolgend geben wir Ihren eine Übersicht zu den von uns verwendeten Angeboten von Drittanbietern nebst Links zu deren Datenschutzerklärungen:
<br><br>
Externe Schriftarten von Google, LLC., https://www.google.com/fonts („Google Fonts“). Die Einbindung der Google Fonts erfolgt durch einen Serveraufruf bei Google (in der Regel in den USA). Die Datenschutzerklärung finden Sie hier: https://policies.google.com/privacy, Opt-Out: https://adssettings.google.com/authenticated
<br><br>
Videos der Plattform “YouTube” des Drittanbieters Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA. Die Datenschutzerklärung finden Sie hier: https://policies.google.com/privacy, Opt-Out: https://adssettings.google.com/authenticated
<br><br>
Stand: 05.10.2018
<br><br>
</div>
</div>

View file

@ -106,8 +106,7 @@
<div class="col-md-12">
<h2>Das klingt spannend für Dich?</h2>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p>
<p>Dann nimm noch heute Kontakt mit uns auf - wir freuen uns, Dich kennenzulernen.</p>
<a href="/kontakt" rel="nofollow" target="_blank" class="btn btn-primary btn-lg">zum
Kontaktformular</a>

View file

@ -76,7 +76,7 @@
<p>Unsere Produkte helfen Menschen bei den unterschiedlichsten Hautproblemen und werden sehr
gerne zur Pflege von Neurodermitis, Schuppenflechte, Akne und viele weiteren Hautkrankheiten
genutzt. Der reine Bio Aloe Vera Saft ist dabei ein ausgezeichneter Bioregulator, wirkt
entzündungshemmend und unterstütz den Körper, die Darmflora aufrecht zu erhalten. Hilf auch
entzündungshemmend und unterstützt den Körper, die Darmflora aufrecht zu erhalten. Hilf auch
Du anderen Menschen auf natürliche Weise bei der Gesunderhaltung ihres Körpers.</p>
<img class="img-fluid" src="/assets/images/produktfamilie.jpg" alt=""/>
</div>
@ -88,8 +88,7 @@
<div class="col-md-12">
<h2>Und wie verkaufe ich genau?</h2>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p>
<p>Es gibt viele verschiedene Möglichkeiten für Dich, Produkte zu verkaufen oder Vertriebspartner zu gewinnen. Hier stellen wir Dir ein paar davon vor. Die wichtigste Regel lautet: Nutze die Produkte und rede darüber. Dann werden die Kunden von alleine auf Dich zukommen.</p>
<div class="row right-line">
<div class="col-md-4">
@ -197,8 +196,7 @@
<div class="col-md-12">
<h2>Das klingt spannend für Dich?</h2>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p>
<p>Dann nimm noch heute Kontakt mit uns auf - wir freuen uns, Dich kennenzulernen.</p>
<a href="/kontakt" rel="nofollow" target="_blank" class="btn btn-primary btn-lg">zum
Kontaktformular</a>

View file

@ -41,9 +41,7 @@
<h1>Schreibe uns!</strong></h1>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo
dolores et ea rebum.</p>
<p>Du interessierst Dich für unser Geschäft oder hast Fragen zu den Produkten? Dann freuen wir uns auf eine Nachricht von Dir. Wir werden uns im Anschluss sobald wie möglich bei Dir zurückmelden.</p>
<form role="form" action="contact_form_ajax.php" data-load="submit" method="post"
@ -114,7 +112,7 @@
<label class="checkbox" for="accepted_data_protection">
<input type="checkbox" name="accepted_data_protection"
id="accepted_data_protection">
<i></i> Hiermit willige ich in die im Rahmen der <a href="/datenschutz">Datenschutzerklärung</a>
<i></i> Hiermit willige ich in die im Rahmen der <a target="_blank" href="/datenschutz">Datenschutzerklärung</a>
genannte Datenverarbeitung ein.
</label>
@ -147,7 +145,7 @@
Leinfeld 2<br>
87755 Kirchhaslach</span>
<span class="block"><strong><i class="fa fa-phone"></i> Telefon:</strong> <a
href="tel:0 83 33- 35 65">0 83 33- 35 65</a></span>
href="tel:0 8333-946 98 90">0 8333-946 98 90</a></span>
<span class="block"><strong><i class="fa fa-envelope"></i> Email:</strong> <a
href="mailto:info@riwa-tec.de">info@mivita.care</a></span>
</p>
@ -156,9 +154,7 @@
<h4 class="font300">Geschäftszeiten</h4>
<p>
<span class="block"><strong>Mo. - Fr.:</strong> 9:00 bis 18:00</span>
<span class="block"><strong>Sa.:</strong> 9:00 bis 13:00</span>
<span class="block"><strong>So.:</strong> geschlossen</span>
<span class="block"><strong>Mo. - Fr.:</strong> 9-12 Uhr u. 13-16 Uhr</span>
</p>
</div>

View file

@ -0,0 +1,83 @@
<?php include('./templates/_header.php'); ?>
<style type="text/css">
.tp-caption {
text-shadow: none;
}
</style>
<section class="page-header page-header-xlg" style="background-image:url('assets/images/vision-min.jpg'); ">
<div class="overlay dark-1"><!-- dark overlay [1 to 9 opacity] --></div>
<div class="container">
</div>
</section>
<!-- /PAGE HEADER -->
<!-- -->
<section>
<div class="container">
<div class="heading-title">
<h1>Partner</h1>
</div>
<p class="">Neben Studenten, Berufseinsteigern, jungen Eltern und alleinerziehenden Müttern bzw. Vätern besteht das MIVITA Vertriebsteam auch aus Unternehmern, die schon vor dem Schritt in den Direktvertrieb ihre Zukunft in die eigenen Hände gelegt haben. So liegt es nahe, dass wir mit diesen Dienstleistern, die unsere Arbeit und den Markt am besten verstehen, auch geschäftlich zusammenarbeiten. Ob Werbemittel wie Autobeschriftung, Flyer, Webdesign, Reisen etc. - wir bauen auch diese Infrastruktur weiter aus, so dass Du Zugriff auf die unterschiedlichsten Dienstleister hast, die Dir maßgeschneidert in Dein eigenes Business helfen.</p>
<div class="divider divider-center divider-color"><!-- divider -->
<i class="fa fa-chevron-down"></i>
</div>
<article class="row">
<div class="col-md-6">
<img class="img-responsive" src="assets/images/mivita-fahrzeugbeschriftung.jpg" alt="MIVITA Fahrzeugbeschriftung">
</div>
<div class="col-md-6">
<h2>Autobeschriftung vom Fachmann</h2>
<p>Nutze Dein Auto als Werbefläche und mache auf Dich und Dein Produkt aufmerksam. Du möchtest das MIVITA Logo auf Deinem Auto oder hast eine ganz konkrete Vorstellung? Kein Problem. Kontaktiere unseren Vertriebspartner Stefan, der Dich gerne dazu berät:<br><br>
<strong>DV Dienstleistungsservice</strong><br>
Stefan Del Vecchio<br>
Steinstraße.33<br>
51702 Bergneustadt
<br><br>
DV.Dienstleistungsservice@web.de<br>
Festnetz: +49 2261 912 36 26<br>
Mobil: +49 174 525 69 00
<br><br><br><br></p>
</div>
</article>
<article class="row">
<div class="col-md-6">
<img class="img-responsive" src="assets/images/mivita-networktrips.jpg" alt="MIVITA Reisen by NETWORKTRIPS">
</div>
<div class="col-md-6">
<h2>MIVITA Reisen by NETWORKTRIPS</h2>
<p>Wir legen jedem Berater ans Herz, mit uns gemeinsam die Aloe Vera Schulung auf Mallorca zu erleben. Hierzu haben wir für Euch gemeinsam mit unserem Reise-Portal NETWORKTRIPS und angeschlossenem Reisebüro STERN TOURS in Berlin verschiedene Buchungsmöglichkeiten für<br><br>
Nur-Hotel<br>
Hotel & Flug<br>
Event-Package<br>
<br>
vorbereitet. Dieses Portal ist nicht öffentlich und eine Registrierung kann nur über einen Einladungslink erfolgen. Bitte fragt Euren Sponsor oder in einer Eurer WhatsApp Gruppen nach.<br><br>
<strong>NETWORTRIPS</strong><br>
Ansprechpartner: Thomas Krummel<br>
<a target="_blank" href="https://www.networktrips.agency">www.networktrips.agency</a><br>
support@networktrips.agency<br>
Festnetz: +49 2203 186 90 14<br>
Mobil: +49 162 251 48 71
<br><br><br><br></p>
</div>
</article>
<!-- /BORN TO BE A WINNER -->
</div>
</section>
<!-- / -->
<?php include('./templates/_footer.php'); ?>

View file

@ -67,7 +67,7 @@ if(empty($product_categorie)){
<!-- buttons -->
<div class="shop-item-buttons text-center">
<a class="btn btn-default" href="<?php echo SERVER ?>/produkte/show/<?php echo $product['slug'] ?>"><i class="fa fa-cart-plus"></i> Zum Produkt</a>
<a class="btn btn-default" href="<?php echo SERVER ?>/produkte/show/<?php echo $product['slug'] ?>"><?php echo $product['name'] ?></a>
</div>
</div>

View file

@ -64,7 +64,7 @@
<section>
<div class="container">
<p class="lead">MIVITA ist ein Unternehmen mit Standort in Deutschland, das innovative und umweltfreundliche
<p class="">MIVITA ist ein Unternehmen mit Standort in Deutschland, das innovative und umweltfreundliche
sowie hochwertige Produkte vertreibt. Seit seinem Markteintritt bekennt sich das MIVITA Unternehmen zu einem
Werteverständnis, bei dem die Zufriedenheit der Kunden, wie auch die Verantwortung für die Umwelt im Fokus
stehen.</p>
@ -165,7 +165,7 @@
<p class="">Werde auch Du ein Vertriebspartner von MIVITA und baue Dir Dein eigenes Geschäft mit
Qualitätsprodukten auf. Wenn Du magst, kannst Du sofort starten ...</p>
<a href="/produkte">
<a href="/geschaeftsmodell/karrierechancen">
Mehr
<!-- /word rotator -->
<span class="word-rotator" data-delay="2000">

View file

@ -30,7 +30,7 @@
Kind
hast?</p>
<img class="img-fluid" src="/assets/images/mutter-kind.jpg" alt=""/>
<br><br>
<p>Insbesondere im Direktvertrieb mit seinen Möglichkeiten der freien Zeiteinteilung und
passivem Einkommen hast Du mittelfristig soviel Freiheit, wie es Dir ein fester Job
nicht
@ -73,8 +73,7 @@
<div class="col-md-12">
<h2>Das klingt spannend für Dich?</h2>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p>
<p>Dann nimm noch heute Kontakt mit uns auf - wir freuen uns, Dich kennenzulernen.</p>
<a href="/kontakt" rel="nofollow" target="_blank" class="btn btn-primary btn-lg">zum
Kontaktformular</a>

View file

@ -22,7 +22,7 @@
und ist bereits in vielen Branchen vertreten. Der Direktvertrieb, der auch als Networkmarketing
bezeichnet wird, beschreibt den <b>persönlichen</b> Verkauf von Waren oder Dienstleistungen an
Verbraucher aus dem direkten Umfeld: Familie, Freunde, Kollegen o.ä.. Entscheidend ist dabei der
persönliche Kontakt und die beratende Funktion - Kunenservice par Excellence! Und das ist auch
persönliche Kontakt und die beratende Funktion - Kundenservice par Excellence! Und das ist auch
schon die große Stärke des Direktvertriebs, nämlich der Service am Kunden, was in den anonymen
Weiten des Internets heute nicht mehr in dem Maße möglich ist, schaffen wir mit viel
Persönlichkeit und Transparenz.</p>
@ -53,6 +53,7 @@
<div class="col-md-4">
<h3>Vorteile bei MIVITA:</h3>
<p>Es gibt sehr viele gute Gründe, um sich mit mivita selbständig zu machen. Viele Beraterinnen und Beratern antworten auf die Frage, warum sie sich für den Direktvertrieb bei mivita entschieden haben:</p>
<ul class="small">
<li>20-40% Verkaufsmarge</li>
<li>Attraktive Boni und Aktionen</li>
@ -78,24 +79,21 @@
<p><strong>Der Direktvertrieb bringt folgende Vorteile</strong></p>
<ul class="small">
<li>Baue Dir eine eigens Business ohne eigenes Risiko auf</li>
<li>Mehr Einkommen, mehr Lebensqualität</li>
<li>Kein Investitionskapital notwendig</li>
<li>Hochwertige Produkte zum Verkauf werden Dir gestellt</li>
<li>Arbeiten im Team</li>
<li>Freie Zeiteinteilung</li>
<li>keine Altersgrenzen</li>
<li>Mach neue Kontakte, triff interessante Persönlichkeiten</li>
<li>Du lernst jeden Tag dazu</li>
<li>Generiere ein passives Einkommen durch Bestandskunden und Teamumsatz</li>
<li>Um Geld hinzu zu verdienen bzw. die Lebensqualität der Familie zu erhöhen</li>
<li>Um bei geringem Risiko und niedrigen Investitionen ihr/sein eigener Chef zu sein</li>
<li>Um flexibel bei freier Zeiteinteilung zu arbeiten</li>
<li>Keine Abnahmeverpflichtungen zu haben</li>
<li>Ohne Altersbegrenzung, ohne Vorkenntnisse und besondere Qualifikationen starten zu können</li>
<li>Geringes Risiko und niedrige Fixkosten</li>
<li>Wegen der hohe Produktqualität</li>
</ul>
<hr>
<h2>Das klingt spannend für Dich?</h2>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p>
<p>Dann nimm noch heute Kontakt mit uns auf - wir freuen uns, Dich kennenzulernen.</p>
<a href="/kontakt" rel="nofollow" target="_blank" class="btn btn-primary btn-lg">zum
Kontaktformular</a>

View file

@ -0,0 +1,88 @@
<?php
namespace App\Http\Controllers;
use App\Models\Attribute;
use App\Models\ProductAttribute;
use Input;
class AttributeController extends Controller
{
public function __construct()
{
$this->middleware('admin');
}
public function index()
{
$data = [
'values' => Attribute::all(),
'trans' => array_keys(config('localization.supportedLocales')),
];
return view('admin.attribute.index', $data);
}
public function store()
{
$data = Input::all();
if($data['id'] == "new"){
$model = Attribute::create([
'parent_id' => null,
'name' => $data['name'],
'pos' => $data['pos'],
'active' => isset($data['active']) ? true : false,
]);
}else{
$model = Attribute::find($data['id']);
$model->parent_id = null;
$model->name = $data['name'];
$model->pos = $data['pos'];
$model->active = isset($data['active']) ? true : false;
$model->save();
}
if(!empty($data['trans'])){
$trans = [];
foreach ($data['trans'] as $lang => $value){
if($value && $value != null){
$trans[$lang] = $value;
}
}
if(count($trans)){
$model->trans_name = $trans;
$model->save();
}
}
\Session()->flash('alert-save', '1');
return redirect(route('admin_product_attributes'));
}
public function delete($id){
if(ProductAttribute::where('attribute_id', $id)->count()){
\Session()->flash('alert-error', 'Eintrag wird als Produktattribute verwendet');
return redirect(route('admin_product_attributes'));
}
/* if(Attribute::where('parent_id', $id)->count()){
\Session()->flash('alert-error', 'Eintrag wird als Main Attribute verwendet');
return redirect(route('admin_industry_sectors'));
}
*/
$model = Attribute::findOrFail($id);
$model->delete();
\Session()->flash('alert-success', 'Eintrag gelöscht');
return redirect(route('admin_product_attributes'));
}
}

View file

@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers;
use App\Models\Category;
use App\Models\ProductCategory;
use Input;
class CategoryController extends Controller
{
public function __construct()
{
$this->middleware('admin');
}
public function index()
{
$data = [
'values' => Category::all(),
'trans' => array_keys(config('localization.supportedLocales')),
];
return view('admin.category.index', $data);
}
public function store()
{
$data = Input::all();
if($data['id'] == "new"){
$model = Category::create([
'parent_id' => isset($data['parent_id']) ? $data['parent_id'] : null,
'name' => $data['name'],
'pos' => $data['pos'],
'active' => isset($data['active']) ? true : false,
]);
}else{
$model = Category::find($data['id']);
$model->parent_id = isset($data['parent_id']) ? $data['parent_id'] : null;
$model->name = $data['name'];
$model->pos = $data['pos'];
$model->active = isset($data['active']) ? true : false;
$model->save();
}
if(!empty($data['trans'])){
$trans = [];
foreach ($data['trans'] as $lang => $value){
if($value && $value != null){
$trans[$lang] = $value;
}
}
if(count($trans)){
$model->trans_name = $trans;
$model->save();
}
}
\Session()->flash('alert-save', '1');
return redirect(route('admin_product_categories'));
}
public function delete($id){
if(ProductCategory::where('category_id', $id)->count()){
\Session()->flash('alert-error', 'Eintrag wird als Produkt-Kategorie verwendet');
return redirect(route('admin_product_categories'));
}
if(Category::where('parent_id', $id)->count()){
\Session()->flash('alert-error', 'Eintrag wird als Haup-Kategorie verwendet');
return redirect(route('admin_product_categories'));
}
$model = Category::findOrFail($id);
$model->delete();
\Session()->flash('alert-success', 'Eintrag gelöscht');
return redirect(route('admin_product_categories'));
}
}

View file

@ -0,0 +1,106 @@
<?php
namespace App\Http\Controllers;
use App\Models\Product;
use App\Models\ProductImage;
use App\Repositories\ProductRepository;
use Input;
use Validator;
class ImportProductController extends Controller
{
protected $productRepo;
public function __construct(ProductRepository $productRepo)
{
$this->middleware('admin');
$this->productRepo = $productRepo;
}
public function import(){
$path = app_path().'/../_static/products/';
include($path.'_all_products.php');
$slugs = array();
foreach ($get_products as $c_id => $values){
foreach ($values as $val){
if(in_array($val['slug'], $slugs)){
continue;
}
$slugs[] = $val['slug'];
include($path.$val['slug'].'.php');
$data = [
'id' => 'new',
'name' => $val['name'],
'title' => '',
'copy' => $copy,
'price' => $price,
'price_ek' => 0,
'tax' => 19,
'price_old' => null,
'contents' => $content,
'number' => $item_no,
'icons' => $icons,
'description' => $description,
'usage' => $usage,
'ingredients' => $ingredients,
'pos' => null,
'amount' => 0,
'active' => 1,
'categories' => array($c_id),
];
$product = $this->productRepo->update($data);
//images
foreach($images as $image){
$i_path = storage_path().'/'.'app'.'/products/' .$val['slug'].'/'.$image['image'];
$mine = \File::mimeType($i_path);
$ext = \File::extension($i_path);
$size = \File::size($i_path);
$original_name = $image['image'];
$name = \App\Services\Slim::sanitizeFileName($image['image']);
$name = uniqid() . '_' . $name;
$img = \Image::make($i_path);
$img->resize(600, 800, function ($c) {
// $c->aspectRatio();
$c->upsize();
});
//
\Storage::put('/public/images/product/'.$product->id.'/'.$name, (string) $img->encode());
ProductImage::create([
'product_id' => $product->id,
'filename' => $name,
'original_name' => $original_name,
'ext' => $ext,
'mine' => $mine,
'size' => $size
]);
}
}
}
die("okay");
//array('slug' => 'aloe-vera-gel99', 'name' => 'Aloe Vera Gel 99%', 'first' => 'aloe-vera-gel99-1.jpg', 'hover' => 'aloe-vera-gel99-2.jpg'),
}
}

View file

@ -0,0 +1,166 @@
<?php
namespace App\Http\Controllers;
use App\Models\Product;
use App\Models\ProductImage;
use App\Repositories\ProductRepository;
use Input;
use Validator;
class ProductController extends Controller
{
protected $productRepo;
public function __construct(ProductRepository $productRepo)
{
$this->middleware('admin');
$this->productRepo = $productRepo;
}
public function index()
{
$data = [
'values' => Product::all(),
];
return view('admin.product.index', $data);
}
public function edit($id)
{
if($id == "new"){
$model = new Product();
$model->active = true;
}else{
$model = Product::findOrFail($id);
}
$data = [
'product' => $model,
];
return view('admin.product.edit', $data);
}
public function store()
{
$data = Input::all();
$rules = array(
'name' => 'required',
);
$validator = Validator::make(Input::all(), $rules);
if($data['id'] == "new"){
$model = new Product();
}else{
$model = Product::findOrFail($data['id']);
}
$data = [
'product' => $model,
];
if ($validator->fails()) {
return view('admin.product.edit', $data)->withErrors($validator);
} else {
$product = $this->productRepo->update(Input::all());
\Session()->flash('alert-save', true);
return redirect(route('admin_product_edit', [$product->id]));
}
\Session()->flash('alert-save', '1');
return redirect(route('admin_product_show'));
}
public function delete($id){
$model = Product::findOrFail($id);
$model->delete();
\Session()->flash('alert-success', 'Eintrag gelöscht');
return redirect(route('admin_product_show'));
}
// Upload FILE -----------------------------------------------------------------------------------------------------------------------
public function uploadImage(){
$product_id = Input::get('product_id');
$product = Product::findOrFail($product_id);
try {
$image = \App\Services\Slim::getImages('images')[0];
if ( isset($image['output']['data']) )
{
// Base64 of the image
$data = $image['output']['data'];
$file_ex = array( 'image/jpeg' => 'jpg', 'image/png' => 'png');
if (!isset($file_ex[$image['output']['type']])) {
\Session()->flash('alert-danger', 'File is not jpg or png!');
return redirect(route('admin_product_edit', [$product->id]));
}
$ext = $file_ex[$image['output']['type']];
// Original file name
$name = $image['output']['name'];
$name = \App\Services\Slim::sanitizeFileName($name);
$name = uniqid() . '_' . $name;
$data = \Storage::disk('public')->put(
'images/product/'.$product->id.'/'.$name,
$data
);
ProductImage::create([
'product_id' => $product->id,
'filename' => $name,
'original_name' => $image['output']['name'],
'ext' => $ext,
'mine' => $image['output']['type'],
'size' => $image['input']['size']
]);
\Session()->flash('alert-success', "Datei hochgeladen");
return redirect(route('admin_product_edit', [$product->id]));
}
\Session()->flash('alert-danger', "Datei leer");
return redirect(route('admin_product_edit', [$product->id]));
}
catch (Exception $e) {
\Session()->flash('alert-danger', "Fehler".$e);
return redirect(route('admin_product_edit', [$product->id]));
}
}
public function deleteImage($image_id, $product_id){
$product = Product::findOrFail($product_id);
$product_image = ProductImage::findOrFail($image_id);
if($product_image->product_id == $product->id){
$file = 'images/product/'.$product->id.'/'.$product_image->filename;
\Storage::disk('public')->delete($file);
$product_image->delete();
\Session()->flash('alert-success', "Datei gelöscht");
return redirect(route('admin_product_edit', [$product->id]));
}
\Session()->flash('alert-danger', "Datei nicht gefunden");
return redirect(route('admin_product_edit', [$product->id]));
}
}

View file

@ -33,7 +33,7 @@ class TranslationController extends Controller
*/
public function index()
{
return redirect('admin/translate/edit/de');
return redirect('admin/translate/all/edit/de');
}
@ -79,7 +79,7 @@ class TranslationController extends Controller
$jsonData = json_encode($ret, TRUE);
file_put_contents($file, $jsonData);
return redirect()
->route('admin_translate_edit', [$language])
->route('admin_translate_all_edit', [$language])
->with('message', 'Translation added successfully');
}

View file

@ -0,0 +1,288 @@
<?php
//use Input;
//use Request;
namespace App\Http\Controllers;
use App;
use File;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Lang;
use Illuminate\Support\Collection;
use App\Requests\TranslationRequest;
class TranslationFileController extends Controller
{
/**
* Translator
*
* @var \Illuminate\Translation\Translator
*/
protected $translator;
/**
* Translation loader
*
* @var \Illuminate\Translation\LoaderInterface
*/
protected $loader;
/**
* @var \League\Flysystem\Adapter\Local
*/
protected $filesystem;
/**
* @var string
*/
protected $languagesPath;
protected $languageRead;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->directory_separator = DIRECTORY_SEPARATOR;
$this->translator = App::make('translator');
$this->loader = Lang::getLoader();
$this->languagesPath = App::langPath();
$this->directory_separator = DIRECTORY_SEPARATOR;
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$language = App::getLocale();
$langsource = 'de';
$this->languageRead = $language;
$langs = array_keys(config('localization.supportedLocales'));
$files = $this->files();
$translations = null;
$edit = false;
$show = 'all';
return view('translation.index_file', compact('files', 'translations', 'language', 'langsource', 'langs', 'edit', 'show'));
//return view('admin.transitions', $data);
}
/**
* Display edit form page
*
* @param string $language
* @param string $file
* @param string|null $namespace
*
* @return \Illuminate\Http\Response
*/
public function edit($file, $language = 'en', $langsource = 'de', $show = 'all')
{
$this->languageRead = $language;
$langs = array_keys(config('localization.supportedLocales'));
$files = $this->files();
$translations = $this->translations($file, $langsource);
$prefix = $this->groupName($file);
$langsource = $langsource;
$edit = $file;
$show = $show;
return view('translation.index_file', compact('files', 'language', 'langsource', 'file', 'translations', 'prefix', 'langs', 'edit', 'show'));
}
/**
* Save translation file
*
* @param \GeniusTS\TranslationManager\Requests\TranslationRequest $request
* @param string $language
* @param string $file
*
* @return \Illuminate\Http\Response
*/
public function update(TranslationRequest $request, $file, $language, $langsource, $show)
{
$keys = array_keys($this->translations($file));
$this->exportFile($request->only($keys), $file, $language);
return redirect()
->route('admin_translate_file_edit', [$file, $language, $langsource, $show])
->with('message', 'Translation added successfully');
}
/**
* Save a translation file
*
* @param array $translation
* @param $filename
* @param $language
*
* @return bool
*/
public function exportFile($translation, $filename, $language)
{
$path = "{$this->languagesPath}{$this->directory_separator}{$language}{$this->directory_separator}{$filename}.php";
$this->backup($path, $language, $filename);
$content = "<?php \n\n return " . var_export($translation, true) . ";";
return (bool) file_put_contents($path, $content);
//return (bool) $this->filesystem->write($path, $content, new Config);
}
/**
* Backup the existing translation files
*/
private function backup($path, $language, $filename)
{
if(!File::exists($path)){
return;
}
if (!File::exists(storage_path('language/'.time().'/'.$language))) {
File::makeDirectory(storage_path('language/'.time().'/'.$language), 0755, true);
}
return File::copy($path, storage_path('language/'.time().'/'.$language.'/'.$filename.'.php'));
}
/**
* Get the translation of a group and name space
*
* @param string $file
* @param string|null $namespace
* @param string|null $language
*
* @return array
*/
public function translations($file, $language = null)
{
$group = $this->groupName($file);
$key = $group;
return $this->translator->trans($key, [], $language ?: $this->defaultLanguage());
}
public function files($lang = false)
{
$path = $this->namespacePath($this->languagesPath, $lang);
$content = $this->pathContent($path);
return $content
->map(function ($file) use ($path) {
$path = ltrim($path . DIRECTORY_SEPARATOR, '/');
//read file empty entries
$count = $this->countEmptyEntries(Str::replaceLast($path, '', $file));
//var_dump($translations);
return array(ltrim($this->groupName(Str::replaceLast($path, '', $file)), '/') => ltrim($this->groupName(Str::replaceLast($path, '', $file)), '/')." (".$count.")");
})
->flatten();
}
public function countEmptyEntries($file){
$translation = $this->translations($file);
$group = $this->groupName($file);
$entries = 0;
$count = 0;
foreach ($translation as $key => $value)
{
$this->searchForEmpty($key, $value, null, $count, $entries, $group);
}
return $entries."/".$count;
}
protected function searchForEmpty($key, $value, $prefix, &$count, &$entries, $group)
{
$prefix = $prefix ? "{$prefix}.{$key}" : $group.".".$key;
if (is_array($value))
{
foreach ($value as $subKey => $subValue)
{
$this->searchForEmpty($subKey, $subValue, $prefix, $count,$entries, $group);
}
}
else
{
if(Lang::has($prefix, $this->languageRead, false)){
$count++;
}
if(Lang::has($prefix, 'de', false)){
$entries ++;
}
}
}
/**
* Get default language
*
* @return string
*/
public function defaultLanguage()
{
return config('app.fallback_locale', 'de');
}
/**
* Get the group name from a filename
*
* @param $filename
*
* @return mixed
*/
public function groupName($filename)
{
return preg_replace('/\.php$/', '', $filename);
}
/**
* Get default language
*
* @param string $path
* @param string $language
*
* @return string
*/
protected function namespacePath($path, $language = null)
{
return "{$path}{$this->directory_separator}" . ($language ?: $this->defaultLanguage());
}
/**
* List content of a path
*
* @param null $path
* @param bool $recursive
*
* @return \Illuminate\Support\Collection
*/
protected function pathContent($path = null, $recursive = false)
{
//var_dump($this->filesystem->listContents($path, $recursive));
//return new Collection(($this->filesystem->listContents($path, $recursive)));
return new Collection(File::files($path));
}
}

View file

@ -0,0 +1,86 @@
<?php
namespace App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use App\Models\Category;
use App\Models\Product;
use Carbon\Carbon;
use Request;
use Input;
class SiteController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
}
public function index()
{
return view('web.index');
}
public function site($site, $subsite = false, $product_slug = false)
{
if($product_slug){
$category = Category::where('slug', $subsite)->where('active', true)->first();
$product = Product::where('slug', $product_slug)->where('active', true)->first();
if ($category && $product) {
$data = [
'subsite' => $subsite,
'categories' => Category::where('active', true)->orderBy('pos', 'DESC')->get(),
'product' => $product,
'p_count' => Product::where('active', true)->count(),
];
return view('web.templates.produkte-show', $data);
}
}
if($site == 'produkte'){
if($subsite || $subsite != 'alle-produkte') {
$category = Category::where('slug', $subsite)->where('active', true)->first();
if ($category) {
$data = [
'subsite' => $subsite,
'categories' => Category::where('active', true)->orderBy('pos', 'DESC')->get(),
'products' => Product::whereHas('categories', function ($query) use ($category) {
$query->where('category_id', '=', $category->id);
})->where('active', true)->orderBy('pos', 'DESC')->get(),
'p_count' => Product::where('active', true)->count(),
];
return view('web.templates.' . $site, $data);
}
}
$data = [
'subsite' => 'alle-produkte',
'categories' => Category::where('active', true)->orderBy('pos', 'DESC')->get(),
'products' => Product::where('active', true)->orderBy('pos', 'DESC')->get(),
'p_count' => Product::where('active', true)->count(),
];
return view('web.templates.'.$site, $data);
}
if($subsite){
return view('web.templates.'.$subsite);
}
return view('web.templates.'.$site);
}
}

View file

@ -29,18 +29,13 @@ class MailActivateUser extends Mailable
{
$salutation = __('Dear customer').",";
if($this->user->account){
/*if($this->user->account){
if($this->user->account->salutation == "mr"){
$salutation = __('Dear Sir')." ".$this->user->account->last_name.",";
}else{
$salutation = __('Dear Mrs')." ".$this->user->account->last_name.",";
}
}
/* $message = [
'link' => route('user.update_email_confirm', $token),
'line1' => 'Bitte aktivieren Sie Ihre neue E-Mail über diesen Link:',
'line2' => 'oder kopieren Sie diesen Link in die Adressleiste Ihre Browsers.',
];*/
}*/
return $this->view('emails.auth')->with([
'url' => route('user_update_email_confirm', $this->token),
'salutation' => $salutation,

View file

@ -28,14 +28,13 @@ class MailResetPassword extends Mailable
public function build()
{
$salutation = __('Dear customer').",";
if($this->user->account){
/*if($this->user->account){
if($this->user->account->salutation == "mr"){
$salutation = __('Dear Sir')." ".$this->user->account->last_name.",";
}else{
$salutation = __('Dear Mrs')." ".$this->user->account->last_name.",";
}
}
}*/
return $this->view('emails.auth')->with([
'url' => route('password.reset', $this->token),
'salutation' => $salutation,

View file

@ -28,13 +28,13 @@ class MailVerifyAccount extends Mailable
public function build()
{
$salutation = __('Dear customer').",";
if($this->user->account){
/*if($this->user->account){
if($this->user->account->salutation == "mr"){
$salutation = __('Dear Sir')." ".$this->user->account->last_name.",";
}else{
$salutation = __('Dear Mrs')." ".$this->user->account->last_name.",";
}
}
}*/
return $this->view('emails.auth')->with([
'url' => route('register_verify', $this->confirmation_code),

View file

@ -28,13 +28,13 @@ class MailVerifyContact extends Mailable
public function build()
{
$salutation = __('Dear customer').",";
if($this->user->account){
/*if($this->user->account){
if($this->user->account->salutation == "mr"){
$salutation = __('Dear Sir')." ".$this->user->account->last_name.",";
}else{
$salutation = __('Dear Mrs')." ".$this->user->account->last_name.",";
}
}
}*/
return $this->view('emails.auth')->with([
'url' => route('register_verify', $this->confirmation_code),

View file

@ -3,6 +3,7 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Cviebrock\EloquentSluggable\Sluggable;
/**
* App\Models\Category
@ -29,6 +30,8 @@ use Illuminate\Database\Eloquent\Model;
*/
class Category extends Model
{
use Sluggable;
protected $table = 'categories';
protected $casts = ['trans_name' => 'array'];
@ -37,6 +40,14 @@ class Category extends Model
'parent_id', 'name', 'pos', 'active',
];
public function sluggable()
{
return [
'slug' => [
'source' => 'name'
]
];
}
public function parent()
{
@ -48,6 +59,12 @@ class Category extends Model
return $this->hasMany('App\Models\Category', 'parent_id', 'id');
}
public function product_categories()
{
return $this->hasMany('App\Models\ProductCategory', 'category_id', 'id');
}
public function setPosAttribute($value){
$this->attributes['pos'] = is_numeric($value) ? $value : null;

View file

@ -2,6 +2,7 @@
namespace App\Models;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
@ -84,10 +85,39 @@ class Product extends Model
'trans_usage' => 'array',
'trans_ingredients' => 'array'
];
use Sluggable;
use SoftDeletes;
protected $dates = ['deleted_at'];
protected $fillable = [
'name',
'title',
'copy',
'price',
'price_ek',
'tax',
'price_old',
'contents',
'number',
'icons',
'description',
'usage',
'ingredients',
'pos',
'amount',
'active'
];
public function sluggable()
{
return [
'slug' => [
'source' => 'name'
]
];
}
public function attributes(){
return $this->hasMany('App\Models\ProductAttribute', 'product_id', 'id');
@ -101,6 +131,35 @@ class Product extends Model
return $this->hasMany('App\Models\ProductImage', 'product_id', 'id');
}
/*
public function isImageAfter(){
if(empty($this->attributes['filename_after']) || @$this->attributes['filename_after'] == null || @$this->attributes['filename_after'] == ""){
return false;
}
if(!\Storage::disk('public')->has('images/'.$this->id.'/'.$this->filename_after)){
return false;
}
return true;
}
public function getImage($file){
if($file == "before" && $this->isImageBefore()){
$link = 'images/'.$this->id.'/'.$this->filename_before;
return '/storage/'.$link.'?=lm='.\Storage::disk('public')->lastModified($link);
}
if($file == "after" && $this->isImageAfter()){
$link = 'images/'.$this->id.'/'.$this->filename_after;
return '/storage/'.$link.'?=lm='.\Storage::disk('public')->lastModified($link);
}
return false;
}
*/
public function _format_number($value){
return preg_replace("/[^0-9,]/", "", $value);
@ -110,7 +169,7 @@ class Product extends Model
$value = $this->_format_number($value);
$this->attributes['price'] = floatval(str_replace(',', '.', $value));
}
public function setPriceVkAttribute( $value ) {
public function setPriceEkAttribute( $value ) {
$value = $this->_format_number($value);
$this->attributes['price_ek'] = floatval(str_replace(',', '.', $value));
}
@ -131,7 +190,7 @@ class Product extends Model
return number_format($this->attributes['price'], 2, ',', '.');
}
public function getFormattedPriceVk()
public function getFormattedPriceEk()
{
if(\App::getLocale() == "en"){
return number_format($this->attributes['price_ek'], 2, '.', ',');

View file

@ -2,6 +2,7 @@
namespace App\Models;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Model;
/**
@ -32,12 +33,24 @@ use Illuminate\Database\Eloquent\Model;
*/
class ProductImage extends Model
{
use Sluggable;
protected $table = 'product_images';
protected $fillable = [
'product_id', 'filename', 'original_name', 'ext', 'mine', 'size'
];
public function sluggable()
{
return [
'slug' => [
'source' => 'original_name'
]
];
}
public function product()
{

View file

@ -0,0 +1,95 @@
<?php
namespace App\Repositories;
use App\Models\Product;
use App\Models\ProductAttribute;
use App\Models\ProductCategory;
class ProductRepository extends BaseRepository {
public function __construct(Product $model)
{
$this->model = $model;
}
/**
* refresh.
*/
public function update($data)
{
$data['active'] = isset($data['active']) ? 1 : 0;
if($data['id'] == "new"){
$this->model = Product::create($data);
}
else{
$this->model = $this->getById($data['id']);
$this->model->fill($data);
$this->model->save();
}
$this->updateCategories(isset($data['categories']) ? $data['categories'] : array());
$this->updateAttributes(isset($data['attributes']) ? $data['attributes'] : array());
return $this->model;
}
public function updateCategories($data = array())
{
foreach ($this->model->categories as $category) {
if(($pos = array_search($category->category_id, $data)) !== FALSE){
unset($data[$pos]);
}else{
$category->delete();
}
}
//set attr
if(is_array($data)){
foreach ($data as $id) {
ProductCategory::create([
'product_id' => $this->model->id,
'category_id' => $id,
]);
}
}
return true;
}
public function updateAttributes($data = array())
{
foreach ($this->model->attributes as $attribute) {
if(($pos = array_search($attribute->attribute_id, $data)) !== FALSE){
unset($data[$pos]);
}else{
$attribute->delete();
}
}
//set attr
if(is_array($data)){
foreach ($data as $id) {
ProductAttribute::create([
'product_id' => $this->model->id,
'attribute_id' => $id,
]);
}
}
return true;
}
public function delete()
{
}
}

View file

@ -1,6 +1,8 @@
<?php
namespace App\Services;
use App\Models\Attribute;
use App\Models\Category;
use App\Models\Country;
use App\Models\IndustrySector;
use App\Models\Interest;
@ -64,8 +66,6 @@ class HTMLHelper
return $ret;
}
public static function getYearSelectOptions(){
$start = date("Y", strtotime("-5 years", time()));
$end = date("Y", strtotime("+1 years", time()));
@ -79,6 +79,66 @@ class HTMLHelper
return $ret;
}
public static function getAttributesWithoutParents($id = false, $sameId = false, $all = true){
$values = Attribute::where('parent_id', null)->get();
$ret = "";
if($all){
$ret .= '<option value="">'.__('no').'</option>\n';
}
foreach ($values as $value){
if($sameId == $value->id){
continue;
}
$attr = ($value->id == $id) ? 'selected="selected"' : '';
$ret .= '<option value="'.$value->id.'" '.$attr.'>'.$value->name.'</option>\n';
}
return $ret;
}
public static function getCategoriesWithoutParents($id = false, $sameId = false, $all = true){
$values = Category::where('parent_id', null)->get();
$ret = "";
if($all){
$ret .= '<option value="">'.__('no').'</option>\n';
}
foreach ($values as $value){
if($sameId == $value->id){
continue;
}
$attr = ($value->id == $id) ? 'selected="selected"' : '';
$ret .= '<option value="'.$value->id.'" '.$attr.'>'.$value->name.'</option>\n';
}
return $ret;
}
public static function getCategoriesOptions($ids = array(), $all = true){
$values = Category::where('active', 1)->get();
$ret = "";
if($all){
$ret .= '<option value="">'.__('no').'</option>\n';
}
foreach ($values as $value){
$attr = in_array($value->id, $ids) ? 'selected="selected"' : '';
$ret .= '<option value="'.$value->id.'" '.$attr.'>'.$value->name.'</option>\n';
}
return $ret;
}
public static function getAttributesOptions($ids = array(), $all = true){
$values = Attribute::where('active', 1)->get();
$ret = "";
if($all){
$ret .= '<option value="">'.__('no').'</option>\n';
}
foreach ($values as $value){
$attr = in_array($value->id, $ids) ? 'selected="selected"' : '';
$ret .= '<option value="'.$value->id.'" '.$attr.'>'.$value->name.'</option>\n';
}
return $ret;
}
/* public static function getCompanyOptions($company){
$options = array(1 => __('business'), 0 => __('private'), );
$ret = "";

254
app/Services/Slim.php Normal file
View file

@ -0,0 +1,254 @@
<?php
namespace App\Services;
abstract class SlimStatus {
const FAILURE = 'failure';
const SUCCESS = 'success';
}
class Slim {
public static function getImages($inputName = 'slim') {
$values = Slim::getPostData($inputName);
// test for errors
if ($values === false) {
return false;
}
// determine if contains multiple input values, if is singular, put in array
$data = array();
if (!is_array($values)) {
$values = array($values);
}
// handle all posted fields
foreach ($values as $value) {
$inputValue = Slim::parseInput($value);
if ($inputValue) {
array_push($data, $inputValue);
}
}
// return the data collected from the fields
return $data;
}
// $value should be in JSON format
private static function parseInput($value) {
// if no json received, exit, don't handle empty input values.
if (empty($value)) {return null;}
// If magic quotes enabled
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// The data is posted as a JSON String so to be used it needs to be deserialized first
$data = json_decode($value);
// shortcut
$input = null;
$actions = null;
$output = null;
$meta = null;
if (isset ($data->input)) {
$inputData = null;
if (isset($data->input->image)) {
$inputData = Slim::getBase64Data($data->input->image);
}
else if (isset($data->input->field)) {
$filename = $_FILES[$data->input->field]['tmp_name'];
if ($filename) {
$inputData = file_get_contents($filename);
}
}
$input = array(
'data' => $inputData,
'name' => $data->input->name,
'type' => $data->input->type,
'size' => $data->input->size,
'width' => $data->input->width,
'height' => $data->input->height,
);
}
if (isset($data->output)) {
$outputDate = null;
if (isset($data->output->image)) {
$outputData = Slim::getBase64Data($data->output->image);
}
else if (isset ($data->output->field)) {
$filename = $_FILES[$data->output->field]['tmp_name'];
if ($filename) {
$outputData = file_get_contents($filename);
}
}
$output = array(
'data' => $outputData,
'name' => $data->output->name,
'type' => $data->output->type,
'width' => $data->output->width,
'height' => $data->output->height
);
}
if (isset($data->actions)) {
$actions = array(
'crop' => $data->actions->crop ? array(
'x' => $data->actions->crop->x,
'y' => $data->actions->crop->y,
'width' => $data->actions->crop->width,
'height' => $data->actions->crop->height,
'type' => $data->actions->crop->type
) : null,
'size' => $data->actions->size ? array(
'width' => $data->actions->size->width,
'height' => $data->actions->size->height
) : null,
'rotation' => $data->actions->rotation,
'filters' => $data->actions->filters ? array(
'sharpen' => $data->actions->filters->sharpen
) : null
);
}
if (isset($data->meta)) {
$meta = $data->meta;
}
// We've sanitized the base64data and will now return the clean file object
return array(
'input' => $input,
'output' => $output,
'actions' => $actions,
'meta' => $meta
);
}
// $path should have trailing slash
public static function saveFile($data, $name, $path = 'tmp/', $uid = true) {
// Add trailing slash if omitted
if (substr($path, -1) !== '/') {
$path .= '/';
}
// Test if directory already exists
if(!is_dir($path)){
mkdir($path, 0755, true);
}
// Sanitize characters in file name
$name = Slim::sanitizeFileName($name);
// Let's put a unique id in front of the filename so we don't accidentally overwrite other files
if ($uid) {
$name = uniqid() . '_' . $name;
}
// Add name to path, we need the full path including the name to save the file
$path = $path . $name;
// store the file
Slim::save($data, $path);
// return the files new name and location
return array(
'name' => $name,
'path' => $path
);
}
/**
* Get data from remote URL
* @param $url
* @return string
*/
public static function fetchURL($url, $maxFileSize) {
if (!ini_get('allow_url_fopen')) {
return null;
}
$content = null;
try {
$content = @file_get_contents($url, false, null, 0, $maxFileSize);
} catch(Exception $e) {
return false;
}
return $content;
}
public static function outputJSON($data) {
header('Content-Type: application/json');
echo json_encode($data);
}
/**
* http://stackoverflow.com/a/2021729
* Remove anything which isn't a word, whitespace, number
* or any of the following characters -_~,;[]().
* If you don't need to handle multi-byte characters
* you can use preg_replace rather than mb_ereg_replace
* @param $str
* @return string
*/
public static function sanitizeFileName($str) {
// Basic clean up
$str = preg_replace('([^\w\s\d\-_~,;\[\]\(\).])', '', $str);
// Remove any runs of periods
$str = preg_replace('([\.]{2,})', '', $str);
return $str;
}
/**
* Gets the posted data from the POST or FILES object. If was using Slim to upload it will be in POST (as posted with hidden field) if not enhanced with Slim it'll be in FILES.
* @param $inputName
* @return array|bool
*/
private static function getPostData($inputName) {
$values = array();
if (isset($_POST[$inputName])) {
$values = $_POST[$inputName];
}
else if (isset($_FILES[$inputName])) {
// Slim was not used to upload this file
return false;
}
return $values;
}
/**
* Saves the data to a given location
* @param $data
* @param $path
* @return bool
*/
private static function save($data, $path) {
if (!file_put_contents($path, $data)) {
return false;
}
return true;
}
/**
* Strips the "data:image..." part of the base64 data string so PHP can save the string as a file
* @param $data
* @return string
*/
private static function getBase64Data($data) {
return base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $data));
}
}

View file

@ -6,6 +6,13 @@
0 => 'Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider',
),
),
'cviebrock/eloquent-sluggable' =>
array (
'providers' =>
array (
0 => 'Cviebrock\\EloquentSluggable\\ServiceProvider',
),
),
'fideloper/proxy' =>
array (
'providers' =>

View file

@ -24,27 +24,28 @@
20 => 'Illuminate\\Validation\\ValidationServiceProvider',
21 => 'Illuminate\\View\\ViewServiceProvider',
22 => 'Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider',
23 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
24 => 'Intervention\\Image\\ImageServiceProvider',
25 => 'Jenssegers\\Date\\DateServiceProvider',
26 => 'Laracasts\\Flash\\FlashServiceProvider',
27 => 'Laravel\\Tinker\\TinkerServiceProvider',
28 => 'Collective\\Html\\HtmlServiceProvider',
29 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
30 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
31 => 'Yajra\\DataTables\\DataTablesServiceProvider',
23 => 'Cviebrock\\EloquentSluggable\\ServiceProvider',
24 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
25 => 'Intervention\\Image\\ImageServiceProvider',
26 => 'Jenssegers\\Date\\DateServiceProvider',
27 => 'Laracasts\\Flash\\FlashServiceProvider',
28 => 'Laravel\\Tinker\\TinkerServiceProvider',
29 => 'Collective\\Html\\HtmlServiceProvider',
30 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
31 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
32 => 'Yajra\\DataTables\\DataTablesServiceProvider',
33 => 'Laravel\\Tinker\\TinkerServiceProvider',
34 => 'App\\Providers\\AppServiceProvider',
35 => 'App\\Providers\\AuthServiceProvider',
36 => 'App\\Providers\\EventServiceProvider',
37 => 'App\\Providers\\RouteServiceProvider',
38 => 'Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider',
39 => 'Jenssegers\\Date\\DateServiceProvider',
40 => 'Collective\\Html\\HtmlServiceProvider',
41 => 'Intervention\\Image\\ImageServiceProvider',
42 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
43 => 'Yajra\\DataTables\\DataTablesServiceProvider',
33 => 'Yajra\\DataTables\\DataTablesServiceProvider',
34 => 'Laravel\\Tinker\\TinkerServiceProvider',
35 => 'App\\Providers\\AppServiceProvider',
36 => 'App\\Providers\\AuthServiceProvider',
37 => 'App\\Providers\\EventServiceProvider',
38 => 'App\\Providers\\RouteServiceProvider',
39 => 'Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider',
40 => 'Jenssegers\\Date\\DateServiceProvider',
41 => 'Collective\\Html\\HtmlServiceProvider',
42 => 'Intervention\\Image\\ImageServiceProvider',
43 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
44 => 'Yajra\\DataTables\\DataTablesServiceProvider',
),
'eager' =>
array (
@ -58,21 +59,22 @@
7 => 'Illuminate\\Pagination\\PaginationServiceProvider',
8 => 'Illuminate\\Session\\SessionServiceProvider',
9 => 'Illuminate\\View\\ViewServiceProvider',
10 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
11 => 'Intervention\\Image\\ImageServiceProvider',
12 => 'Jenssegers\\Date\\DateServiceProvider',
13 => 'Laracasts\\Flash\\FlashServiceProvider',
14 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
15 => 'Yajra\\DataTables\\DataTablesServiceProvider',
10 => 'Cviebrock\\EloquentSluggable\\ServiceProvider',
11 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
12 => 'Intervention\\Image\\ImageServiceProvider',
13 => 'Jenssegers\\Date\\DateServiceProvider',
14 => 'Laracasts\\Flash\\FlashServiceProvider',
15 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
16 => 'Yajra\\DataTables\\DataTablesServiceProvider',
17 => 'App\\Providers\\AppServiceProvider',
18 => 'App\\Providers\\AuthServiceProvider',
19 => 'App\\Providers\\EventServiceProvider',
20 => 'App\\Providers\\RouteServiceProvider',
21 => 'Jenssegers\\Date\\DateServiceProvider',
22 => 'Intervention\\Image\\ImageServiceProvider',
23 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
24 => 'Yajra\\DataTables\\DataTablesServiceProvider',
17 => 'Yajra\\DataTables\\DataTablesServiceProvider',
18 => 'App\\Providers\\AppServiceProvider',
19 => 'App\\Providers\\AuthServiceProvider',
20 => 'App\\Providers\\EventServiceProvider',
21 => 'App\\Providers\\RouteServiceProvider',
22 => 'Jenssegers\\Date\\DateServiceProvider',
23 => 'Intervention\\Image\\ImageServiceProvider',
24 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
25 => 'Yajra\\DataTables\\DataTablesServiceProvider',
),
'deferred' =>
array (

View file

@ -6,6 +6,7 @@
"type": "project",
"require": {
"php": "^7.1.3",
"cviebrock/eloquent-sluggable": "^4.5",
"doctrine/dbal": "^2.8",
"fideloper/proxy": "^4.0",
"guzzlehttp/guzzle": "6.3.3",

130
composer.lock generated
View file

@ -4,8 +4,136 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "265f1eef07824392cdc437f44a59908d",
"content-hash": "7f8a962781fe580335d945e8225b01a5",
"packages": [
{
"name": "cocur/slugify",
"version": "v3.1",
"source": {
"type": "git",
"url": "https://github.com/cocur/slugify.git",
"reference": "b2ccf7b735f4f3df3979aef2e1ebf8e19ca772f7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/cocur/slugify/zipball/b2ccf7b735f4f3df3979aef2e1ebf8e19ca772f7",
"reference": "b2ccf7b735f4f3df3979aef2e1ebf8e19ca772f7",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": ">=5.5.9"
},
"require-dev": {
"laravel/framework": "~5.1",
"latte/latte": "~2.2",
"league/container": "^2.2.0",
"mikey179/vfsstream": "~1.6",
"mockery/mockery": "~0.9",
"nette/di": "~2.2",
"phpunit/phpunit": "~4.8|~5.2",
"pimple/pimple": "~1.1",
"plumphp/plum": "~0.1",
"silex/silex": "~1.3",
"symfony/config": "~2.4|~3.0",
"symfony/dependency-injection": "~2.4|~3.0",
"symfony/http-kernel": "~2.4|~3.0",
"twig/twig": "~1.26|~2.0",
"zendframework/zend-modulemanager": "~2.2",
"zendframework/zend-servicemanager": "~2.2",
"zendframework/zend-view": "~2.2"
},
"type": "library",
"autoload": {
"psr-4": {
"Cocur\\Slugify\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ivo Bathke",
"email": "ivo.bathke@gmail.com"
},
{
"name": "Florian Eckerstorfer",
"email": "florian@eckerstorfer.co",
"homepage": "https://florian.ec"
}
],
"description": "Converts a string into a slug.",
"keywords": [
"slug",
"slugify"
],
"time": "2018-01-22T09:00:48+00:00"
},
{
"name": "cviebrock/eloquent-sluggable",
"version": "4.5.1",
"source": {
"type": "git",
"url": "https://github.com/cviebrock/eloquent-sluggable.git",
"reference": "62ea99dbdd383697433add4f90a62a96a196578b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/cviebrock/eloquent-sluggable/zipball/62ea99dbdd383697433add4f90a62a96a196578b",
"reference": "62ea99dbdd383697433add4f90a62a96a196578b",
"shasum": ""
},
"require": {
"cocur/slugify": "^3.1",
"illuminate/config": "~5.6.0",
"illuminate/database": "~5.6.0",
"illuminate/support": "~5.6.0",
"php": "^7.0"
},
"require-dev": {
"codedungeon/phpunit-result-printer": "^0.19.6",
"mockery/mockery": "^0.9.4",
"orchestra/database": "~3.6.0",
"orchestra/testbench": "~3.6.0",
"phpunit/phpunit": "~7.0"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Cviebrock\\EloquentSluggable\\ServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"Cviebrock\\EloquentSluggable\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Colin Viebrock",
"email": "colin@viebrock.ca"
}
],
"description": "Easy creation of slugs for your Eloquent models in Laravel 5.",
"homepage": "https://github.com/cviebrock/eloquent-sluggable",
"keywords": [
"eloquent",
"eloquent-sluggable",
"laravel",
"lumen",
"slug",
"sluggable"
],
"time": "2018-05-22T02:37:31+00:00"
},
{
"name": "dnoegel/php-xdg-base-dir",
"version": "0.1",

View file

@ -90,7 +90,7 @@ return [
|
*/
'fallback_locale' => 'en',
'fallback_locale' => 'de',
/*
|--------------------------------------------------------------------------

141
config/sluggable.php Normal file
View file

@ -0,0 +1,141 @@
<?php
return [
/**
* What attributes do we use to build the slug?
* This can be a single field, like "name" which will build a slug from:
*
* $model->name;
*
* Or it can be an array of fields, like ("name", "company"), which builds a slug from:
*
* $model->name . ' ' . $model->company;
*
* If you've defined custom getters in your model, you can use those too,
* since Eloquent will call them when you request a custom attribute.
*
* Defaults to null, which uses the toString() method on your model.
*/
'source' => null,
/**
* The maximum length of a generated slug. Defaults to "null", which means
* no length restrictions are enforced. Set it to a positive integer if you
* want to make sure your slugs aren't too long.
*/
'maxLength' => null,
/**
* If you are setting a maximum length on your slugs, you may not want the
* truncated string to split a word in half. The default setting of "true"
* will ensure this, e.g. with a maxLength of 12:
*
* "my source string" -> "my-source"
*
* Setting it to "false" will simply truncate the generated slug at the
* desired length, e.g.:
*
* "my source string" -> "my-source-st"
*/
'maxLengthKeepWords' => true,
/**
* If left to "null", then use the cocur/slugify package to generate the slug
* (with the separator defined below).
*
* Set this to a closure that accepts two parameters (string and separator)
* to define a custom slugger. e.g.:
*
* 'method' => function( $string, $sep ) {
* return preg_replace('/[^a-z]+/i', $sep, $string);
* },
*
* Otherwise, this will be treated as a callable to be used. e.g.:
*
* 'method' => array('Str','slug'),
*/
'method' => null,
/**
* Separator to use when generating slugs. Defaults to a hyphen.
*/
'separator' => '-',
/**
* Enforce uniqueness of slugs? Defaults to true.
* If a generated slug already exists, an incremental numeric
* value will be appended to the end until a unique slug is found. e.g.:
*
* my-slug
* my-slug-1
* my-slug-2
*/
'unique' => true,
/**
* If you are enforcing unique slugs, the default is to add an
* incremental value to the end of the base slug. Alternatively, you
* can change this value to a closure that accepts three parameters:
* the base slug, the separator, and a Collection of the other
* "similar" slugs. The closure should return the new unique
* suffix to append to the slug.
*/
'uniqueSuffix' => null,
/**
* Should we include the trashed items when generating a unique slug?
* This only applies if the softDelete property is set for the Eloquent model.
* If set to "false", then a new slug could duplicate one that exists on a trashed model.
* If set to "true", then uniqueness is enforced across trashed and existing models.
*/
'includeTrashed' => false,
/**
* An array of slug names that can never be used for this model,
* e.g. to prevent collisions with existing routes or controller methods, etc..
* Defaults to null (i.e. no reserved names).
* Can be a static array, e.g.:
*
* 'reserved' => array('add', 'delete'),
*
* or a closure that returns an array of reserved names.
* If using a closure, it will accept one parameter: the model itself, and should
* return an array of reserved names, or null. e.g.
*
* 'reserved' => function( Model $model) {
* return $model->some_method_that_returns_an_array();
* }
*
* In the case of a slug that gets generated with one of these reserved names,
* we will do:
*
* $slug .= $separator + "1"
*
* and continue from there.
*/
'reserved' => null,
/**
* Whether to update the slug value when a model is being
* re-saved (i.e. already exists). Defaults to false, which
* means slugs are not updated.
*
* Be careful! If you are using slugs to generate URLs, then
* updating your slug automatically might change your URLs which
* is probably not a good idea from an SEO point of view.
* Only set this to true if you understand the possible consequences.
*/
'onUpdate' => false,
];

View file

@ -17,12 +17,14 @@ class CreateAttributesTable extends Migration
$table->increments('id');
$table->unsignedInteger('parent_id')->index()->nullable();
$table->string('name')->index();
$table->text('trans_name')->nullable();
$table->tinyInteger('pos')->unsigned()->nullable();
$table->boolean('active')->default(false);
$table->string('slug')->unique()->index();
$table->timestamps();
$table->foreign('parent_id')

View file

@ -23,6 +23,9 @@ class CreateCategoriesTable extends Migration
$table->tinyInteger('pos')->unsigned()->nullable();
$table->boolean('active')->default(false);
$table->string('slug')->unique()->index();
$table->timestamps();
$table->foreign('parent_id')

View file

@ -24,6 +24,8 @@ class CreateProductImagesTable extends Migration
$table->string('mine')->index();
$table->unsignedInteger('size');
$table->boolean('active')->default(true);
$table->string('slug')->unique()->index();
$table->timestamps();
$table->foreign('product_id')

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,156 @@
.ei-slider{
position: relative;
width: 100%;
max-width: 1920px;
height: 400px;
margin: 0 auto;
}
.ei-slider-loading{
width: 100%;
height: 100%;
position: absolute;
top: 0px;
left: 0px;
z-index:999;
background: rgba(0,0,0,0.9);
color: #fff;
text-align: center;
line-height: 400px;
}
.ei-slider-large{
height: 100%;
width: 100%;
position:relative;
overflow: hidden;
}
.ei-slider-large li{
position: absolute;
top: 0px;
left: 0px;
overflow: hidden;
height: 100%;
width: 100%;
}
.ei-slider-large li img{
width: 100%;
}
.ei-title{
position: absolute;
right: 50%;
margin-right: 13%;
top: 30%;
}
.ei-title h2, .ei-title h3{
text-align: right;
}
.ei-title h2{
font-size: 40px;
line-height: 50px;
font-family: 'Playfair Display', serif;
font-style: italic;
color: #b5b5b5;
}
.ei-title h3{
font-size: 70px;
line-height: 70px;
font-family: 'Open Sans Condensed', sans-serif;
text-transform: uppercase;
color: #000;
}
.ei-slider-thumbs{
height: 13px;
margin: 0 auto;
position: relative;
}
.ei-slider-thumbs li{
position: relative;
float: left;
height: 100%;
}
.ei-slider-thumbs li.ei-slider-element{
top: 0px;
left: 0px;
position: absolute;
height: 100%;
z-index: 10;
text-indent: -9000px;
background: #000;
background: rgba(0,0,0,0.9);
}
.ei-slider-thumbs li a{
display: block;
text-indent: -9000px;
background: #666 ;
width: 100%;
height: 100%;
cursor: pointer;
-webkit-box-shadow:
0px 1px 1px 0px rgba(0,0,0,0.3),
0px 1px 0px 1px rgba(255,255,255,0.5);
-moz-box-shadow:
0px 1px 1px 0px rgba(0,0,0,0.3),
0px 1px 0px 1px rgba(255,255,255,0.5);
box-shadow:
0px 1px 1px 0px rgba(0,0,0,0.3),
0px 1px 0px 1px rgba(255,255,255,0.5);
-webkit-transition: background 0.2s ease;
-moz-transition: background 0.2s ease;
-o-transition: background 0.2s ease;
-ms-transition: background 0.2s ease;
transition: background 0.2s ease;
}
.ei-slider-thumbs li a:hover{
background-color: #f0f0f0;
}
.ei-slider-thumbs li img{
position: absolute;
bottom: 50px;
opacity: 0;
z-index: 999;
max-width: 100%;
-webkit-transition: all 0.4s ease;
-moz-transition: all 0.4s ease;
-o-transition: all 0.4s ease;
-ms-transition: all 0.4s ease;
transition: all 0.4s ease;
-webkit-box-reflect:
below 0px -webkit-gradient(
linear,
left top,
left bottom,
from(transparent),
color-stop(50%, transparent),
to(rgba(255,255,255,0.3))
);
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
}
.ei-slider-thumbs li:hover img{
opacity: 1;
bottom: 13px;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
}
@media screen and (max-width: 830px) {
.ei-title{
position: absolute;
right: 0px;
margin-right: 0px;
width: 100%;
text-align: center;
top: auto;
bottom: 10px;
background: #fff;
background: rgba(255,255,255,0.9);
padding: 5px 0;
}
.ei-title h2, .ei-title h3{
text-align: center;
}
.ei-title h2{
font-size: 20px;
line-height: 24px;
}
.ei-title h3{
font-size: 30px;
line-height: 40px;
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,113 @@
/*
* jQuery Nivo Slider v3.2
* http://nivo.dev7studios.com
*
* Copyright 2012, Dev7studios
* Free to use and abuse under the MIT license.
* http://www.opensource.org/licenses/mit-license.php
*/
/* The Nivo Slider styles */
.nivoSlider {
position:relative;
width:100%;
height:auto;
overflow: hidden;
}
.nivoSlider img {
position:absolute;
top:0px;
left:0px;
max-width: none;
}
.nivo-main-image {
display: block !important;
position: relative !important;
width: 100% !important;
}
/* If an image is wrapped in a link */
.nivoSlider a.nivo-imageLink {
position:absolute;
top:0px;
left:0px;
width:100%;
height:100%;
border:0;
padding:0;
margin:0;
z-index:6;
display:none;
background:white;
filter:alpha(opacity=0);
opacity:0;
}
/* The slices and boxes in the Slider */
.nivo-slice {
display:block;
position:absolute;
z-index:5;
height:100%;
top:0;
}
.nivo-box {
display:block;
position:absolute;
z-index:5;
overflow:hidden;
}
.nivo-box img { display:block; }
/* Caption styles */
.nivo-caption {
position:absolute;
left:0px;
bottom:0px;
background:#000;
color:#fff;
width:100%;
z-index:8;
padding: 5px 10px;
opacity: 0.8;
overflow: hidden;
display: none;
-moz-opacity: 0.8;
filter:alpha(opacity=8);
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box; /* Firefox, other Gecko */
box-sizing: border-box; /* Opera/IE 8+ */
}
.nivo-caption p {
padding:5px;
margin:0;
}
.nivo-caption a {
display:inline !important;
}
.nivo-html-caption {
display:none;
}
/* Direction nav styles (e.g. Next & Prev) */
.nivo-directionNav a {
position:absolute;
top:45%;
z-index:9;
cursor:pointer;
}
.nivo-prevNav {
left:0px;
}
.nivo-nextNav {
right:0px;
}
/* Control nav styles (e.g. 1,2,3...) */
.nivo-controlNav {
text-align:center;
padding: 15px 0;
}
.nivo-controlNav a {
cursor:pointer;
}
.nivo-controlNav a.active {
font-weight:bold;
}

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,438 @@
/**
* Swiper 3.0.6
* Most modern mobile touch slider and framework with hardware accelerated transitions
*
* http://www.idangero.us/swiper/
*
* Copyright 2015, Vladimir Kharlampidi
* The iDangero.us
* http://www.idangero.us/
*
* Licensed under MIT
*
* Released on: March 27, 2015
*/
.swiper-container {
margin: 0 auto;
position: relative;
overflow: hidden;
/* Fix of Webkit flickering */
z-index: 1;
}
.swiper-container-no-flexbox .swiper-slide {
float: left;
}
.swiper-container-vertical > .swiper-wrapper {
-webkit-box-orient: vertical;
-moz-box-orient: vertical;
-ms-flex-direction: column;
-webkit-flex-direction: column;
flex-direction: column;
}
.swiper-wrapper {
position: relative;
width: 100%;
height: 100%;
z-index: 1;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
-ms-transform-style: preserve-3d;
transform-style: preserve-3d;
-webkit-transition-property: -webkit-transform;
-moz-transition-property: -moz-transform;
-o-transition-property: -o-transform;
-ms-transition-property: -ms-transform;
transition-property: transform;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
.swiper-container-android .swiper-slide,
.swiper-wrapper {
-webkit-transform: translate3d(0px, 0, 0);
-moz-transform: translate3d(0px, 0, 0);
-o-transform: translate(0px, 0px);
-ms-transform: translate3d(0px, 0, 0);
transform: translate3d(0px, 0, 0);
}
.swiper-container-multirow > .swiper-wrapper {
-webkit-box-lines: multiple;
-moz-box-lines: multiple;
-ms-fles-wrap: wrap;
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
}
.swiper-container-free-mode > .swiper-wrapper {
-webkit-transition-timing-function: ease-out;
-moz-transition-timing-function: ease-out;
-ms-transition-timing-function: ease-out;
-o-transition-timing-function: ease-out;
transition-timing-function: ease-out;
margin: 0 auto;
}
.swiper-slide {
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
-ms-transform-style: preserve-3d;
transform-style: preserve-3d;
-webkit-flex-shrink: 0;
-ms-flex: 0 0 auto;
flex-shrink: 0;
width: 100%;
height: 100%;
position: relative;
}
/* a11y */
.swiper-container .swiper-notification {
position: absolute;
left: 0;
top: 0;
pointer-events: none;
opacity: 0;
z-index: -1000;
}
/* IE10 Windows Phone 8 Fixes */
.swiper-wp8-horizontal {
-ms-touch-action: pan-y;
touch-action: pan-y;
}
.swiper-wp8-vertical {
-ms-touch-action: pan-x;
touch-action: pan-x;
}
/* Arrows */
.swiper-button-prev,
.swiper-button-next {
position: absolute;
top: 50%;
width: 27px;
height: 44px;
margin-top: -22px;
z-index: 10;
cursor: pointer;
-moz-background-size: 27px 44px;
-webkit-background-size: 27px 44px;
background-size: 27px 44px;
background-position: center;
background-repeat: no-repeat;
}
.swiper-button-prev.swiper-button-disabled,
.swiper-button-next.swiper-button-disabled {
opacity: 0.35;
cursor: auto;
pointer-events: none;
}
.swiper-button-prev,
.swiper-container-rtl .swiper-button-next {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
left: 10px;
right: auto;
}
.swiper-button-prev.swiper-button-black,
.swiper-container-rtl .swiper-button-next.swiper-button-black {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
}
.swiper-button-prev.swiper-button-white,
.swiper-container-rtl .swiper-button-next.swiper-button-white {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
}
.swiper-button-next,
.swiper-container-rtl .swiper-button-prev {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
right: 10px;
left: auto;
}
.swiper-button-next.swiper-button-black,
.swiper-container-rtl .swiper-button-prev.swiper-button-black {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
}
.swiper-button-next.swiper-button-white,
.swiper-container-rtl .swiper-button-prev.swiper-button-white {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
}
/* Pagination Styles */
.swiper-pagination {
position: absolute;
text-align: center;
-webkit-transition: 300ms;
-moz-transition: 300ms;
-o-transition: 300ms;
transition: 300ms;
-webkit-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
-o-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
z-index: 10;
}
.swiper-pagination.swiper-pagination-hidden {
opacity: 0;
}
.swiper-pagination-bullet {
width: 8px;
height: 8px;
display: inline-block;
border-radius: 100%;
background: #000;
opacity: 0.2;
}
.swiper-pagination-clickable .swiper-pagination-bullet {
cursor: pointer;
}
.swiper-pagination-white .swiper-pagination-bullet {
background: #fff;
}
.swiper-pagination-bullet-active {
opacity: 1;
background: #007aff;
}
.swiper-pagination-white .swiper-pagination-bullet-active {
background: #fff;
}
.swiper-pagination-black .swiper-pagination-bullet-active {
background: #000;
}
.swiper-container-vertical > .swiper-pagination {
right: 10px;
top: 50%;
-webkit-transform: translate3d(0px, -50%, 0);
-moz-transform: translate3d(0px, -50%, 0);
-o-transform: translate(0px, -50%);
-ms-transform: translate3d(0px, -50%, 0);
transform: translate3d(0px, -50%, 0);
}
.swiper-container-vertical > .swiper-pagination .swiper-pagination-bullet {
margin: 5px 0;
display: block;
}
.swiper-container-horizontal > .swiper-pagination {
bottom: 10px;
left: 0;
width: 100%;
}
.swiper-container-horizontal > .swiper-pagination .swiper-pagination-bullet {
margin: 0 5px;
}
/* 3D Container */
.swiper-container-3d {
-webkit-perspective: 1200px;
-moz-perspective: 1200px;
-o-perspective: 1200px;
perspective: 1200px;
}
.swiper-container-3d .swiper-wrapper,
.swiper-container-3d .swiper-slide,
.swiper-container-3d .swiper-slide-shadow-left,
.swiper-container-3d .swiper-slide-shadow-right,
.swiper-container-3d .swiper-slide-shadow-top,
.swiper-container-3d .swiper-slide-shadow-bottom,
.swiper-container-3d .swiper-cube-shadow {
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
-ms-transform-style: preserve-3d;
transform-style: preserve-3d;
}
.swiper-container-3d .swiper-slide-shadow-left,
.swiper-container-3d .swiper-slide-shadow-right,
.swiper-container-3d .swiper-slide-shadow-top,
.swiper-container-3d .swiper-slide-shadow-bottom {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 10;
}
.swiper-container-3d .swiper-slide-shadow-left {
background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
/* Safari 4+, Chrome */
background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Chrome 10+, Safari 5.1+, iOS 5+ */
background-image: -moz-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Firefox 3.6-15 */
background-image: -o-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Opera 11.10-12.00 */
background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Firefox 16+, IE10, Opera 12.50+ */
}
.swiper-container-3d .swiper-slide-shadow-right {
background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
/* Safari 4+, Chrome */
background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Chrome 10+, Safari 5.1+, iOS 5+ */
background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Firefox 3.6-15 */
background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Opera 11.10-12.00 */
background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Firefox 16+, IE10, Opera 12.50+ */
}
.swiper-container-3d .swiper-slide-shadow-top {
background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
/* Safari 4+, Chrome */
background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Chrome 10+, Safari 5.1+, iOS 5+ */
background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Firefox 3.6-15 */
background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Opera 11.10-12.00 */
background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Firefox 16+, IE10, Opera 12.50+ */
}
.swiper-container-3d .swiper-slide-shadow-bottom {
background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
/* Safari 4+, Chrome */
background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Chrome 10+, Safari 5.1+, iOS 5+ */
background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Firefox 3.6-15 */
background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Opera 11.10-12.00 */
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
/* Firefox 16+, IE10, Opera 12.50+ */
}
/* Coverflow */
.swiper-container-coverflow .swiper-wrapper {
/* Windows 8 IE 10 fix */
-ms-perspective: 1200px;
}
/* Fade */
.swiper-container-fade.swiper-container-free-mode .swiper-slide {
-webkit-transition-timing-function: ease-out;
-moz-transition-timing-function: ease-out;
-ms-transition-timing-function: ease-out;
-o-transition-timing-function: ease-out;
transition-timing-function: ease-out;
}
.swiper-container-fade .swiper-slide {
pointer-events: none;
}
.swiper-container-fade .swiper-slide-active {
pointer-events: auto;
}
/* Cube */
.swiper-container-cube {
overflow: visible;
}
.swiper-container-cube .swiper-slide {
pointer-events: none;
visibility: hidden;
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-ms-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
backface-visibility: hidden;
width: 100%;
height: 100%;
}
.swiper-container-cube.swiper-container-rtl .swiper-slide {
-webkit-transform-origin: 100% 0;
-moz-transform-origin: 100% 0;
-ms-transform-origin: 100% 0;
transform-origin: 100% 0;
}
.swiper-container-cube .swiper-slide-active,
.swiper-container-cube .swiper-slide-next,
.swiper-container-cube .swiper-slide-prev,
.swiper-container-cube .swiper-slide-next + .swiper-slide {
pointer-events: auto;
visibility: visible;
}
.swiper-container-cube .swiper-cube-shadow {
position: absolute;
left: 0;
bottom: 0px;
width: 100%;
height: 100%;
background: #000;
opacity: 0.6;
-webkit-filter: blur(50px);
filter: blur(50px);
}
.swiper-container-cube.swiper-container-vertical .swiper-cube-shadow {
z-index: 0;
}
/* Scrollbar */
.swiper-scrollbar {
border-radius: 10px;
position: relative;
-ms-touch-action: none;
background: rgba(0, 0, 0, 0.1);
}
.swiper-container-horizontal > .swiper-scrollbar {
position: absolute;
left: 1%;
bottom: 3px;
z-index: 50;
height: 5px;
width: 98%;
}
.swiper-container-vertical > .swiper-scrollbar {
position: absolute;
right: 3px;
top: 1%;
z-index: 50;
width: 5px;
height: 98%;
}
.swiper-scrollbar-drag {
height: 100%;
width: 100%;
position: relative;
background: rgba(0, 0, 0, 0.5);
border-radius: 10px;
left: 0;
top: 0;
}
.swiper-scrollbar-cursor-drag {
cursor: move;
}
/* Preloader */
.swiper-lazy-preloader {
width: 42px;
height: 42px;
position: absolute;
left: 50%;
top: 50%;
margin-left: -21px;
margin-top: -21px;
z-index: 10;
-webkit-transform-origin: 50%;
-moz-transform-origin: 50%;
transform-origin: 50%;
-webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;
-moz-animation: swiper-preloader-spin 1s steps(12, end) infinite;
animation: swiper-preloader-spin 1s steps(12, end) infinite;
}
.swiper-lazy-preloader:after {
display: block;
content: "";
width: 100%;
height: 100%;
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
background-position: 50%;
-webkit-background-size: 100%;
background-size: 100%;
background-repeat: no-repeat;
}
.swiper-lazy-preloader-white:after {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
}
@-webkit-keyframes swiper-preloader-spin {
100% {
-webkit-transform: rotate(360deg);
}
}
@keyframes swiper-preloader-spin {
100% {
transform: rotate(360deg);
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
https://github.com/morteza/bootstrap-rtl

View file

@ -0,0 +1,304 @@
{
"always-semicolon": true,
"block-indent": 2,
"color-case": "lower",
"color-shorthand": true,
"element-case": "lower",
"eof-newline": true,
"leading-zero": false,
"remove-empty-rulesets": true,
"space-after-colon": 1,
"space-after-combinator": 1,
"space-before-selector-delimiter": 0,
"space-between-declarations": "\n",
"space-after-opening-brace": "\n",
"space-before-closing-brace": "\n",
"space-before-colon": 0,
"space-before-combinator": 1,
"space-before-opening-brace": 1,
"strip-spaces": true,
"unitless-zero": true,
"vendor-prefix-align": true,
"sort-order": [
[
"position",
"top",
"right",
"bottom",
"left",
"z-index",
"display",
"float",
"width",
"min-width",
"max-width",
"height",
"min-height",
"max-height",
"-webkit-box-sizing",
"-moz-box-sizing",
"box-sizing",
"-webkit-appearance",
"padding",
"padding-top",
"padding-right",
"padding-bottom",
"padding-left",
"margin",
"margin-top",
"margin-right",
"margin-bottom",
"margin-left",
"overflow",
"overflow-x",
"overflow-y",
"-webkit-overflow-scrolling",
"-ms-overflow-x",
"-ms-overflow-y",
"-ms-overflow-style",
"clip",
"clear",
"font",
"font-family",
"font-size",
"font-style",
"font-weight",
"font-variant",
"font-size-adjust",
"font-stretch",
"font-effect",
"font-emphasize",
"font-emphasize-position",
"font-emphasize-style",
"font-smooth",
"-webkit-hyphens",
"-moz-hyphens",
"hyphens",
"line-height",
"color",
"text-align",
"-webkit-text-align-last",
"-moz-text-align-last",
"-ms-text-align-last",
"text-align-last",
"text-emphasis",
"text-emphasis-color",
"text-emphasis-style",
"text-emphasis-position",
"text-decoration",
"text-indent",
"text-justify",
"text-outline",
"-ms-text-overflow",
"text-overflow",
"text-overflow-ellipsis",
"text-overflow-mode",
"text-shadow",
"text-transform",
"text-wrap",
"-webkit-text-size-adjust",
"-ms-text-size-adjust",
"letter-spacing",
"-ms-word-break",
"word-break",
"word-spacing",
"-ms-word-wrap",
"word-wrap",
"-moz-tab-size",
"-o-tab-size",
"tab-size",
"white-space",
"vertical-align",
"list-style",
"list-style-position",
"list-style-type",
"list-style-image",
"pointer-events",
"-ms-touch-action",
"touch-action",
"cursor",
"visibility",
"zoom",
"flex-direction",
"flex-order",
"flex-pack",
"flex-align",
"table-layout",
"empty-cells",
"caption-side",
"border-spacing",
"border-collapse",
"content",
"quotes",
"counter-reset",
"counter-increment",
"resize",
"-webkit-user-select",
"-moz-user-select",
"-ms-user-select",
"-o-user-select",
"user-select",
"nav-index",
"nav-up",
"nav-right",
"nav-down",
"nav-left",
"background",
"background-color",
"background-image",
"-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient",
"filter:progid:DXImageTransform.Microsoft.gradient",
"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
"filter",
"background-repeat",
"background-attachment",
"background-position",
"background-position-x",
"background-position-y",
"-webkit-background-clip",
"-moz-background-clip",
"background-clip",
"background-origin",
"-webkit-background-size",
"-moz-background-size",
"-o-background-size",
"background-size",
"border",
"border-color",
"border-style",
"border-width",
"border-top",
"border-top-color",
"border-top-style",
"border-top-width",
"border-right",
"border-right-color",
"border-right-style",
"border-right-width",
"border-bottom",
"border-bottom-color",
"border-bottom-style",
"border-bottom-width",
"border-left",
"border-left-color",
"border-left-style",
"border-left-width",
"border-radius",
"border-top-left-radius",
"border-top-right-radius",
"border-bottom-right-radius",
"border-bottom-left-radius",
"-webkit-border-image",
"-moz-border-image",
"-o-border-image",
"border-image",
"-webkit-border-image-source",
"-moz-border-image-source",
"-o-border-image-source",
"border-image-source",
"-webkit-border-image-slice",
"-moz-border-image-slice",
"-o-border-image-slice",
"border-image-slice",
"-webkit-border-image-width",
"-moz-border-image-width",
"-o-border-image-width",
"border-image-width",
"-webkit-border-image-outset",
"-moz-border-image-outset",
"-o-border-image-outset",
"border-image-outset",
"-webkit-border-image-repeat",
"-moz-border-image-repeat",
"-o-border-image-repeat",
"border-image-repeat",
"outline",
"outline-width",
"outline-style",
"outline-color",
"outline-offset",
"-webkit-box-shadow",
"-moz-box-shadow",
"box-shadow",
"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
"-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha",
"opacity",
"-ms-interpolation-mode",
"-webkit-transition",
"-moz-transition",
"-ms-transition",
"-o-transition",
"transition",
"-webkit-transition-delay",
"-moz-transition-delay",
"-ms-transition-delay",
"-o-transition-delay",
"transition-delay",
"-webkit-transition-timing-function",
"-moz-transition-timing-function",
"-ms-transition-timing-function",
"-o-transition-timing-function",
"transition-timing-function",
"-webkit-transition-duration",
"-moz-transition-duration",
"-ms-transition-duration",
"-o-transition-duration",
"transition-duration",
"-webkit-transition-property",
"-moz-transition-property",
"-ms-transition-property",
"-o-transition-property",
"transition-property",
"-webkit-transform",
"-moz-transform",
"-ms-transform",
"-o-transform",
"transform",
"-webkit-transform-origin",
"-moz-transform-origin",
"-ms-transform-origin",
"-o-transform-origin",
"transform-origin",
"-webkit-animation",
"-moz-animation",
"-ms-animation",
"-o-animation",
"animation",
"-webkit-animation-name",
"-moz-animation-name",
"-ms-animation-name",
"-o-animation-name",
"animation-name",
"-webkit-animation-duration",
"-moz-animation-duration",
"-ms-animation-duration",
"-o-animation-duration",
"animation-duration",
"-webkit-animation-play-state",
"-moz-animation-play-state",
"-ms-animation-play-state",
"-o-animation-play-state",
"animation-play-state",
"-webkit-animation-timing-function",
"-moz-animation-timing-function",
"-ms-animation-timing-function",
"-o-animation-timing-function",
"animation-timing-function",
"-webkit-animation-delay",
"-moz-animation-delay",
"-ms-animation-delay",
"-o-animation-delay",
"animation-delay",
"-webkit-animation-iteration-count",
"-moz-animation-iteration-count",
"-ms-animation-iteration-count",
"-o-animation-iteration-count",
"animation-iteration-count",
"-webkit-animation-direction",
"-moz-animation-direction",
"-ms-animation-direction",
"-o-animation-direction",
"animation-direction"
]
]
}

View file

@ -0,0 +1,19 @@
{
"adjoining-classes": false,
"box-sizing": false,
"box-model": false,
"compatible-vendor-prefixes": false,
"floats": false,
"font-sizes": false,
"gradients": false,
"important": false,
"known-properties": false,
"outline-none": false,
"qualified-headings": false,
"regex-selectors": false,
"shorthand": false,
"text-indent": false,
"unique-headings": false,
"universal-selector": false,
"unqualified-attributes": false
}

View file

@ -0,0 +1,73 @@
//
// Alerts
// --------------------------------------------------
// Base styles
// -------------------------
.alert {
padding: @alert-padding;
margin-bottom: @line-height-computed;
border: 1px solid transparent;
border-radius: @alert-border-radius;
// Headings for larger alerts
h4 {
margin-top: 0;
// Specified for the h4 to prevent conflicts of changing @headings-color
color: inherit;
}
// Provide class for links that match alerts
.alert-link {
font-weight: @alert-link-font-weight;
}
// Improve alignment and spacing of inner content
> p,
> ul {
margin-bottom: 0;
}
> p + p {
margin-top: 5px;
}
}
// Dismissible alerts
//
// Expand the right padding and account for the close button's positioning.
.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.
.alert-dismissible {
padding-right: (@alert-padding + 20);
// Adjust close link position
.close {
position: relative;
top: -2px;
right: -21px;
color: inherit;
}
}
// Alternate styles
//
// Generate contextual modifier classes for colorizing the alert.
.alert-success {
.alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
}
.alert-info {
.alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
}
.alert-warning {
.alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
}
.alert-danger {
.alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
}

View file

@ -0,0 +1,66 @@
//
// Badges
// --------------------------------------------------
// Base class
.badge {
display: inline-block;
min-width: 10px;
padding: 3px 7px;
font-size: @font-size-small;
font-weight: @badge-font-weight;
color: @badge-color;
line-height: @badge-line-height;
vertical-align: middle;
white-space: nowrap;
text-align: center;
background-color: @badge-bg;
border-radius: @badge-border-radius;
// Empty badges collapse automatically (not available in IE8)
&:empty {
display: none;
}
// Quick fix for badges in buttons
.btn & {
position: relative;
top: -1px;
}
.btn-xs &,
.btn-group-xs > .btn & {
top: 0;
padding: 1px 5px;
}
// Hover state, but only for links
a& {
&:hover,
&:focus {
color: @badge-link-hover-color;
text-decoration: none;
cursor: pointer;
}
}
// Account for badges in navs
.list-group-item.active > &,
.nav-pills > .active > a > & {
color: @badge-active-color;
background-color: @badge-active-bg;
}
.list-group-item > & {
float: right;
}
.list-group-item > & + & {
margin-right: 5px;
}
.nav-pills > li > a > & {
margin-left: 3px;
}
}

View file

@ -0,0 +1,56 @@
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
// Core variables and mixins
@import "variables.less";
@import "mixins.less";
// Reset and dependencies
@import "normalize.less";
@import "print.less";
@import "glyphicons.less";
// Core CSS
@import "scaffolding.less";
@import "type.less";
@import "code.less";
@import "grid.less";
@import "tables.less";
@import "forms.less";
@import "buttons.less";
// Components
@import "component-animations.less";
@import "dropdowns.less";
@import "button-groups.less";
@import "input-groups.less";
@import "navs.less";
@import "navbar.less";
@import "breadcrumbs.less";
@import "pagination.less";
@import "pager.less";
@import "labels.less";
@import "badges.less";
@import "jumbotron.less";
@import "thumbnails.less";
@import "alerts.less";
@import "progress-bars.less";
@import "media.less";
@import "list-group.less";
@import "panels.less";
@import "responsive-embed.less";
@import "wells.less";
@import "close.less";
// Components w/ JavaScript
@import "modals.less";
@import "tooltip.less";
@import "popovers.less";
@import "carousel.less";
// Utility classes
@import "utilities.less";
@import "responsive-utilities.less";

View file

@ -0,0 +1,26 @@
//
// Breadcrumbs
// --------------------------------------------------
.breadcrumb {
padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;
margin-bottom: @line-height-computed;
list-style: none;
background-color: @breadcrumb-bg;
border-radius: @border-radius-base;
> li {
display: inline-block;
+ li:before {
content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
padding: 0 5px;
color: @breadcrumb-color;
}
}
> .active {
color: @breadcrumb-active-color;
}
}

View file

@ -0,0 +1,244 @@
//
// Button groups
// --------------------------------------------------
// Make the div behave like a button
.btn-group,
.btn-group-vertical {
position: relative;
display: inline-block;
vertical-align: middle; // match .btn alignment given font-size hack above
> .btn {
position: relative;
float: left;
// Bring the "active" button to the front
&:hover,
&:focus,
&:active,
&.active {
z-index: 2;
}
}
}
// Prevent double borders when buttons are next to each other
.btn-group {
.btn + .btn,
.btn + .btn-group,
.btn-group + .btn,
.btn-group + .btn-group {
margin-left: -1px;
}
}
// Optional: Group multiple button groups together for a toolbar
.btn-toolbar {
margin-left: -5px; // Offset the first child's margin
&:extend(.clearfix all);
.btn,
.btn-group,
.input-group {
float: left;
}
> .btn,
> .btn-group,
> .input-group {
margin-left: 5px;
}
}
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
border-radius: 0;
}
// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
.btn-group > .btn:first-child {
margin-left: 0;
&:not(:last-child):not(.dropdown-toggle) {
.border-right-radius(0);
}
}
// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it
.btn-group > .btn:last-child:not(:first-child),
.btn-group > .dropdown-toggle:not(:first-child) {
.border-left-radius(0);
}
// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
.btn-group > .btn-group {
float: left;
}
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
.btn-group > .btn-group:first-child:not(:last-child) {
> .btn:last-child,
> .dropdown-toggle {
.border-right-radius(0);
}
}
.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
.border-left-radius(0);
}
// On active and open, don't show outline
.btn-group .dropdown-toggle:active,
.btn-group.open .dropdown-toggle {
outline: 0;
}
// Sizing
//
// Remix the default button sizing classes into new ones for easier manipulation.
.btn-group-xs > .btn { &:extend(.btn-xs); }
.btn-group-sm > .btn { &:extend(.btn-sm); }
.btn-group-lg > .btn { &:extend(.btn-lg); }
// Split button dropdowns
// ----------------------
// Give the line between buttons some depth
.btn-group > .btn + .dropdown-toggle {
padding-left: 8px;
padding-right: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle {
padding-left: 12px;
padding-right: 12px;
}
// The clickable button for toggling the menu
// Remove the gradient and set the same inset shadow as the :active state
.btn-group.open .dropdown-toggle {
.box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
// Show no shadow for `.btn-link` since it has no other button styles.
&.btn-link {
.box-shadow(none);
}
}
// Reposition the caret
.btn .caret {
margin-left: 0;
}
// Carets in other button sizes
.btn-lg .caret {
border-width: @caret-width-large @caret-width-large 0;
border-bottom-width: 0;
}
// Upside down carets for .dropup
.dropup .btn-lg .caret {
border-width: 0 @caret-width-large @caret-width-large;
}
// Vertical button groups
// ----------------------
.btn-group-vertical {
> .btn,
> .btn-group,
> .btn-group > .btn {
display: block;
float: none;
width: 100%;
max-width: 100%;
}
// Clear floats so dropdown menus can be properly placed
> .btn-group {
&:extend(.clearfix all);
> .btn {
float: none;
}
}
> .btn + .btn,
> .btn + .btn-group,
> .btn-group + .btn,
> .btn-group + .btn-group {
margin-top: -1px;
margin-left: 0;
}
}
.btn-group-vertical > .btn {
&:not(:first-child):not(:last-child) {
border-radius: 0;
}
&:first-child:not(:last-child) {
.border-top-radius(@btn-border-radius-base);
.border-bottom-radius(0);
}
&:last-child:not(:first-child) {
.border-top-radius(0);
.border-bottom-radius(@btn-border-radius-base);
}
}
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
.btn-group-vertical > .btn-group:first-child:not(:last-child) {
> .btn:last-child,
> .dropdown-toggle {
.border-bottom-radius(0);
}
}
.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
.border-top-radius(0);
}
// Justified button groups
// ----------------------
.btn-group-justified {
display: table;
width: 100%;
table-layout: fixed;
border-collapse: separate;
> .btn,
> .btn-group {
float: none;
display: table-cell;
width: 1%;
}
> .btn-group .btn {
width: 100%;
}
> .btn-group .dropdown-menu {
left: auto;
}
}
// Checkbox and radio options
//
// In order to support the browser's form validation feedback, powered by the
// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use
// `display: none;` or `visibility: hidden;` as that also hides the popover.
// Simply visually hiding the inputs via `opacity` would leave them clickable in
// certain cases which is prevented by using `clip` and `pointer-events`.
// This way, we ensure a DOM element is visible to position the popover from.
//
// See https://github.com/twbs/bootstrap/pull/12794 and
// https://github.com/twbs/bootstrap/pull/14559 for more information.
[data-toggle="buttons"] {
> .btn,
> .btn-group > .btn {
input[type="radio"],
input[type="checkbox"] {
position: absolute;
clip: rect(0,0,0,0);
pointer-events: none;
}
}
}

View file

@ -0,0 +1,166 @@
//
// Buttons
// --------------------------------------------------
// Base styles
// --------------------------------------------------
.btn {
display: inline-block;
margin-bottom: 0; // For input.btn
font-weight: @btn-font-weight;
text-align: center;
vertical-align: middle;
touch-action: manipulation;
cursor: pointer;
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
border: 1px solid transparent;
white-space: nowrap;
.button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);
.user-select(none);
&,
&:active,
&.active {
&:focus,
&.focus {
.tab-focus();
}
}
&:hover,
&:focus,
&.focus {
color: @btn-default-color;
text-decoration: none;
}
&:active,
&.active {
outline: 0;
background-image: none;
.box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
}
&.disabled,
&[disabled],
fieldset[disabled] & {
cursor: @cursor-disabled;
.opacity(.65);
.box-shadow(none);
}
a& {
&.disabled,
fieldset[disabled] & {
pointer-events: none; // Future-proof disabling of clicks on `<a>` elements
}
}
}
// Alternate buttons
// --------------------------------------------------
.btn-default {
.button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);
}
.btn-primary {
.button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);
}
// Success appears as green
.btn-success {
.button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);
}
// Info appears as blue-green
.btn-info {
.button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);
}
// Warning appears as orange
.btn-warning {
.button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);
}
// Danger and error appear as red
.btn-danger {
.button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);
}
// Link buttons
// -------------------------
// Make a button look and behave like a link
.btn-link {
color: @link-color;
font-weight: normal;
border-radius: 0;
&,
&:active,
&.active,
&[disabled],
fieldset[disabled] & {
background-color: transparent;
.box-shadow(none);
}
&,
&:hover,
&:focus,
&:active {
border-color: transparent;
}
&:hover,
&:focus {
color: @link-hover-color;
text-decoration: @link-hover-decoration;
background-color: transparent;
}
&[disabled],
fieldset[disabled] & {
&:hover,
&:focus {
color: @btn-link-disabled-color;
text-decoration: none;
}
}
}
// Button Sizes
// --------------------------------------------------
.btn-lg {
// line-height: ensure even-numbered height of button next to large input
.button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);
}
.btn-sm {
// line-height: ensure proper height of button next to small input
.button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);
}
.btn-xs {
.button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);
}
// Block button
// --------------------------------------------------
.btn-block {
display: block;
width: 100%;
}
// Vertically space out multiple block buttons
.btn-block + .btn-block {
margin-top: 5px;
}
// Specificity overrides
input[type="submit"],
input[type="reset"],
input[type="button"] {
&.btn-block {
width: 100%;
}
}

View file

@ -0,0 +1,270 @@
//
// Carousel
// --------------------------------------------------
// Wrapper for the slide container and indicators
.carousel {
position: relative;
}
.carousel-inner {
position: relative;
overflow: hidden;
width: 100%;
> .item {
display: none;
position: relative;
.transition(.6s ease-in-out left);
// Account for jankitude on images
> img,
> a > img {
&:extend(.img-responsive);
line-height: 1;
}
// WebKit CSS3 transforms for supported devices
@media all and (transform-3d), (-webkit-transform-3d) {
.transition-transform(~'0.6s ease-in-out');
.backface-visibility(~'hidden');
.perspective(1000px);
&.next,
&.active.right {
.translate3d(100%, 0, 0);
left: 0;
}
&.prev,
&.active.left {
.translate3d(-100%, 0, 0);
left: 0;
}
&.next.left,
&.prev.right,
&.active {
.translate3d(0, 0, 0);
left: 0;
}
}
}
> .active,
> .next,
> .prev {
display: block;
}
> .active {
left: 0;
}
> .next,
> .prev {
position: absolute;
top: 0;
width: 100%;
}
> .next {
left: 100%;
}
> .prev {
left: -100%;
}
> .next.left,
> .prev.right {
left: 0;
}
> .active.left {
left: -100%;
}
> .active.right {
left: 100%;
}
}
// Left/right controls for nav
// ---------------------------
.carousel-control {
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: @carousel-control-width;
.opacity(@carousel-control-opacity);
font-size: @carousel-control-font-size;
color: @carousel-control-color;
text-align: center;
text-shadow: @carousel-text-shadow;
background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug
// We can't have this transition here because WebKit cancels the carousel
// animation if you trip this while in the middle of another animation.
// Set gradients for backgrounds
&.left {
#gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));
}
&.right {
left: auto;
right: 0;
#gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));
}
// Hover/focus state
&:hover,
&:focus {
outline: 0;
color: @carousel-control-color;
text-decoration: none;
.opacity(.9);
}
// Toggles
.icon-prev,
.icon-next,
.glyphicon-chevron-left,
.glyphicon-chevron-right {
position: absolute;
top: 50%;
margin-top: -10px;
z-index: 5;
display: inline-block;
}
.icon-prev,
.glyphicon-chevron-left {
left: 50%;
margin-left: -10px;
}
.icon-next,
.glyphicon-chevron-right {
right: 50%;
margin-right: -10px;
}
.icon-prev,
.icon-next {
width: 20px;
height: 20px;
line-height: 1;
font-family: serif;
}
.icon-prev {
&:before {
content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
}
}
.icon-next {
&:before {
content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
}
}
}
// Optional indicator pips
//
// Add an unordered list with the following class and add a list item for each
// slide your carousel holds.
.carousel-indicators {
position: absolute;
bottom: 10px;
left: 50%;
z-index: 15;
width: 60%;
margin-left: -30%;
padding-left: 0;
list-style: none;
text-align: center;
li {
display: inline-block;
width: 10px;
height: 10px;
margin: 1px;
text-indent: -999px;
border: 1px solid @carousel-indicator-border-color;
border-radius: 10px;
cursor: pointer;
// IE8-9 hack for event handling
//
// Internet Explorer 8-9 does not support clicks on elements without a set
// `background-color`. We cannot use `filter` since that's not viewed as a
// background color by the browser. Thus, a hack is needed.
// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer
//
// For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
// set alpha transparency for the best results possible.
background-color: #000 \9; // IE8
background-color: rgba(0,0,0,0); // IE9
}
.active {
margin: 0;
width: 12px;
height: 12px;
background-color: @carousel-indicator-active-bg;
}
}
// Optional captions
// -----------------------------
// Hidden by default for smaller viewports
.carousel-caption {
position: absolute;
left: 15%;
right: 15%;
bottom: 20px;
z-index: 10;
padding-top: 20px;
padding-bottom: 20px;
color: @carousel-caption-color;
text-align: center;
text-shadow: @carousel-text-shadow;
& .btn {
text-shadow: none; // No shadow for button elements in carousel-caption
}
}
// Scale up controls for tablets and up
@media screen and (min-width: @screen-sm-min) {
// Scale up the controls a smidge
.carousel-control {
.glyphicon-chevron-left,
.glyphicon-chevron-right,
.icon-prev,
.icon-next {
width: (@carousel-control-font-size * 1.5);
height: (@carousel-control-font-size * 1.5);
margin-top: (@carousel-control-font-size / -2);
font-size: (@carousel-control-font-size * 1.5);
}
.glyphicon-chevron-left,
.icon-prev {
margin-left: (@carousel-control-font-size / -2);
}
.glyphicon-chevron-right,
.icon-next {
margin-right: (@carousel-control-font-size / -2);
}
}
// Show and left align the captions
.carousel-caption {
left: 20%;
right: 20%;
padding-bottom: 30px;
}
// Move up the indicators
.carousel-indicators {
bottom: 20px;
}
}

View file

@ -0,0 +1,34 @@
//
// Close icons
// --------------------------------------------------
.close {
float: right;
font-size: (@font-size-base * 1.5);
font-weight: @close-font-weight;
line-height: 1;
color: @close-color;
text-shadow: @close-text-shadow;
.opacity(.2);
&:hover,
&:focus {
color: @close-color;
text-decoration: none;
cursor: pointer;
.opacity(.5);
}
// Additional properties for button version
// iOS requires the button element instead of an anchor tag.
// If you want the anchor version, it requires `href="#"`.
// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
button& {
padding: 0;
cursor: pointer;
background: transparent;
border: 0;
-webkit-appearance: none;
}
}

View file

@ -0,0 +1,69 @@
//
// Code (inline and block)
// --------------------------------------------------
// Inline and block code styles
code,
kbd,
pre,
samp {
font-family: @font-family-monospace;
}
// Inline code
code {
padding: 2px 4px;
font-size: 90%;
color: @code-color;
background-color: @code-bg;
border-radius: @border-radius-base;
}
// User input typically entered via keyboard
kbd {
padding: 2px 4px;
font-size: 90%;
color: @kbd-color;
background-color: @kbd-bg;
border-radius: @border-radius-small;
box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
kbd {
padding: 0;
font-size: 100%;
font-weight: bold;
box-shadow: none;
}
}
// Blocks of code
pre {
display: block;
padding: ((@line-height-computed - 1) / 2);
margin: 0 0 (@line-height-computed / 2);
font-size: (@font-size-base - 1); // 14px to 13px
line-height: @line-height-base;
word-break: break-all;
word-wrap: break-word;
color: @pre-color;
background-color: @pre-bg;
border: 1px solid @pre-border-color;
border-radius: @border-radius-base;
// Account for some code outputs that place code tags in pre tags
code {
padding: 0;
font-size: inherit;
color: inherit;
white-space: pre-wrap;
background-color: transparent;
border-radius: 0;
}
}
// Enable scrollable blocks of code
.pre-scrollable {
max-height: @pre-scrollable-max-height;
overflow-y: scroll;
}

View file

@ -0,0 +1,33 @@
//
// Component animations
// --------------------------------------------------
// Heads up!
//
// We don't use the `.opacity()` mixin here since it causes a bug with text
// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.
.fade {
opacity: 0;
.transition(opacity .15s linear);
&.in {
opacity: 1;
}
}
.collapse {
display: none;
&.in { display: block; }
tr&.in { display: table-row; }
tbody&.in { display: table-row-group; }
}
.collapsing {
position: relative;
height: 0;
overflow: hidden;
.transition-property(~"height, visibility");
.transition-duration(.35s);
.transition-timing-function(ease);
}

View file

@ -0,0 +1,216 @@
//
// Dropdown menus
// --------------------------------------------------
// Dropdown arrow/caret
.caret {
display: inline-block;
width: 0;
height: 0;
margin-left: 2px;
vertical-align: middle;
border-top: @caret-width-base dashed;
border-top: @caret-width-base solid ~"\9"; // IE8
border-right: @caret-width-base solid transparent;
border-left: @caret-width-base solid transparent;
}
// The dropdown wrapper (div)
.dropup,
.dropdown {
position: relative;
}
// Prevent the focus on the dropdown toggle when closing dropdowns
.dropdown-toggle:focus {
outline: 0;
}
// The dropdown menu (ul)
.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
z-index: @zindex-dropdown;
display: none; // none by default, but block on "open" of the menu
float: left;
min-width: 160px;
padding: 5px 0;
margin: 2px 0 0; // override default ul
list-style: none;
font-size: @font-size-base;
text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
background-color: @dropdown-bg;
border: 1px solid @dropdown-fallback-border; // IE8 fallback
border: 1px solid @dropdown-border;
border-radius: @border-radius-base;
.box-shadow(0 6px 12px rgba(0,0,0,.175));
background-clip: padding-box;
// Aligns the dropdown menu to right
//
// Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`
&.pull-right {
right: 0;
left: auto;
}
// Dividers (basically an hr) within the dropdown
.divider {
.nav-divider(@dropdown-divider-bg);
}
// Links within the dropdown menu
> li > a {
display: block;
padding: 3px 20px;
clear: both;
font-weight: normal;
line-height: @line-height-base;
color: @dropdown-link-color;
white-space: nowrap; // prevent links from randomly breaking onto new lines
}
}
// Hover/Focus state
.dropdown-menu > li > a {
&:hover,
&:focus {
text-decoration: none;
color: @dropdown-link-hover-color;
background-color: @dropdown-link-hover-bg;
}
}
// Active state
.dropdown-menu > .active > a {
&,
&:hover,
&:focus {
color: @dropdown-link-active-color;
text-decoration: none;
outline: 0;
background-color: @dropdown-link-active-bg;
}
}
// Disabled state
//
// Gray out text and ensure the hover/focus state remains gray
.dropdown-menu > .disabled > a {
&,
&:hover,
&:focus {
color: @dropdown-link-disabled-color;
}
// Nuke hover/focus effects
&:hover,
&:focus {
text-decoration: none;
background-color: transparent;
background-image: none; // Remove CSS gradient
.reset-filter();
cursor: @cursor-disabled;
}
}
// Open state for the dropdown
.open {
// Show the menu
> .dropdown-menu {
display: block;
}
// Remove the outline when :focus is triggered
> a {
outline: 0;
}
}
// Menu positioning
//
// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
// menu with the parent.
.dropdown-menu-right {
left: auto; // Reset the default from `.dropdown-menu`
right: 0;
}
// With v3, we enabled auto-flipping if you have a dropdown within a right
// aligned nav component. To enable the undoing of that, we provide an override
// to restore the default dropdown menu alignment.
//
// This is only for left-aligning a dropdown menu within a `.navbar-right` or
// `.pull-right` nav component.
.dropdown-menu-left {
left: 0;
right: auto;
}
// Dropdown section headers
.dropdown-header {
display: block;
padding: 3px 20px;
font-size: @font-size-small;
line-height: @line-height-base;
color: @dropdown-header-color;
white-space: nowrap; // as with > li > a
}
// Backdrop to catch body clicks on mobile, etc.
.dropdown-backdrop {
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 0;
z-index: (@zindex-dropdown - 10);
}
// Right aligned dropdowns
.pull-right > .dropdown-menu {
right: 0;
left: auto;
}
// Allow for dropdowns to go bottom up (aka, dropup-menu)
//
// Just add .dropup after the standard .dropdown class and you're set, bro.
// TODO: abstract this so that the navbar fixed styles are not placed here?
.dropup,
.navbar-fixed-bottom .dropdown {
// Reverse the caret
.caret {
border-top: 0;
border-bottom: @caret-width-base dashed;
border-bottom: @caret-width-base solid ~"\9"; // IE8
content: "";
}
// Different positioning for bottom up menu
.dropdown-menu {
top: auto;
bottom: 100%;
margin-bottom: 2px;
}
}
// Component alignment
//
// Reiterate per navbar.less and the modified component alignment there.
@media (min-width: @grid-float-breakpoint) {
.navbar-right {
.dropdown-menu {
.dropdown-menu-right();
}
// Necessary for overrides of the default right aligned menu.
// Will remove come v4 in all likelihood.
.dropdown-menu-left {
.dropdown-menu-left();
}
}
}

View file

@ -0,0 +1,613 @@
//
// Forms
// --------------------------------------------------
// Normalize non-controls
//
// Restyle and baseline non-control form elements.
fieldset {
padding: 0;
margin: 0;
border: 0;
// Chrome and Firefox set a `min-width: min-content;` on fieldsets,
// so we reset that to ensure it behaves more like a standard block element.
// See https://github.com/twbs/bootstrap/issues/12359.
min-width: 0;
}
legend {
display: block;
width: 100%;
padding: 0;
margin-bottom: @line-height-computed;
font-size: (@font-size-base * 1.5);
line-height: inherit;
color: @legend-color;
border: 0;
border-bottom: 1px solid @legend-border-color;
}
label {
display: inline-block;
max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)
margin-bottom: 5px;
font-weight: bold;
}
// Normalize form controls
//
// While most of our form styles require extra classes, some basic normalization
// is required to ensure optimum display with or without those classes to better
// address browser inconsistencies.
// Override content-box in Normalize (* isn't specific enough)
input[type="search"] {
.box-sizing(border-box);
}
// Position radios and checkboxes better
input[type="radio"],
input[type="checkbox"] {
margin: 4px 0 0;
margin-top: 1px \9; // IE8-9
line-height: normal;
}
input[type="file"] {
display: block;
}
// Make range inputs behave like textual form controls
input[type="range"] {
display: block;
width: 100%;
}
// Make multiple select elements height not fixed
select[multiple],
select[size] {
height: auto;
}
// Focus for file, radio, and checkbox
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
.tab-focus();
}
// Adjust output element
output {
display: block;
padding-top: (@padding-base-vertical + 1);
font-size: @font-size-base;
line-height: @line-height-base;
color: @input-color;
}
// Common form controls
//
// Shared size and type resets for form controls. Apply `.form-control` to any
// of the following form controls:
//
// select
// textarea
// input[type="text"]
// input[type="password"]
// input[type="datetime"]
// input[type="datetime-local"]
// input[type="date"]
// input[type="month"]
// input[type="time"]
// input[type="week"]
// input[type="number"]
// input[type="email"]
// input[type="url"]
// input[type="search"]
// input[type="tel"]
// input[type="color"]
.form-control {
display: block;
width: 100%;
height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
padding: @padding-base-vertical @padding-base-horizontal;
font-size: @font-size-base;
line-height: @line-height-base;
color: @input-color;
background-color: @input-bg;
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
border: 1px solid @input-border;
border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
.transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
// Customize the `:focus` state to imitate native WebKit styles.
.form-control-focus();
// Placeholder
.placeholder();
// Unstyle the caret on `<select>`s in IE10+.
&::-ms-expand {
border: 0;
background-color: transparent;
}
// Disabled and read-only inputs
//
// HTML5 says that controls under a fieldset > legend:first-child won't be
// disabled if the fieldset is disabled. Due to implementation difficulty, we
// don't honor that edge case; we style them as disabled anyway.
&[disabled],
&[readonly],
fieldset[disabled] & {
background-color: @input-bg-disabled;
opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655
}
&[disabled],
fieldset[disabled] & {
cursor: @cursor-disabled;
}
// Reset height for `textarea`s
textarea& {
height: auto;
}
}
// Search inputs in iOS
//
// This overrides the extra rounded corners on search inputs in iOS so that our
// `.form-control` class can properly style them. Note that this cannot simply
// be added to `.form-control` as it's not specific enough. For details, see
// https://github.com/twbs/bootstrap/issues/11586.
input[type="search"] {
-webkit-appearance: none;
}
// Special styles for iOS temporal inputs
//
// In Mobile Safari, setting `display: block` on temporal inputs causes the
// text within the input to become vertically misaligned. As a workaround, we
// set a pixel line-height that matches the given height of the input, but only
// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848
//
// Note that as of 9.3, iOS doesn't support `week`.
@media screen and (-webkit-min-device-pixel-ratio: 0) {
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="month"] {
&.form-control {
line-height: @input-height-base;
}
&.input-sm,
.input-group-sm & {
line-height: @input-height-small;
}
&.input-lg,
.input-group-lg & {
line-height: @input-height-large;
}
}
}
// Form groups
//
// Designed to help with the organization and spacing of vertical forms. For
// horizontal forms, use the predefined grid classes.
.form-group {
margin-bottom: @form-group-margin-bottom;
}
// Checkboxes and radios
//
// Indent the labels to position radios/checkboxes as hanging controls.
.radio,
.checkbox {
position: relative;
display: block;
margin-top: 10px;
margin-bottom: 10px;
label {
min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text
padding-left: 20px;
margin-bottom: 0;
font-weight: normal;
cursor: pointer;
}
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
position: absolute;
margin-left: -20px;
margin-top: 4px \9;
}
.radio + .radio,
.checkbox + .checkbox {
margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
}
// Radios and checkboxes on same line
.radio-inline,
.checkbox-inline {
position: relative;
display: inline-block;
padding-left: 20px;
margin-bottom: 0;
vertical-align: middle;
font-weight: normal;
cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
margin-top: 0;
margin-left: 10px; // space out consecutive inline controls
}
// Apply same disabled cursor tweak as for inputs
// Some special care is needed because <label>s don't inherit their parent's `cursor`.
//
// Note: Neither radios nor checkboxes can be readonly.
input[type="radio"],
input[type="checkbox"] {
&[disabled],
&.disabled,
fieldset[disabled] & {
cursor: @cursor-disabled;
}
}
// These classes are used directly on <label>s
.radio-inline,
.checkbox-inline {
&.disabled,
fieldset[disabled] & {
cursor: @cursor-disabled;
}
}
// These classes are used on elements with <label> descendants
.radio,
.checkbox {
&.disabled,
fieldset[disabled] & {
label {
cursor: @cursor-disabled;
}
}
}
// Static form control text
//
// Apply class to a `p` element to make any string of text align with labels in
// a horizontal form layout.
.form-control-static {
// Size it appropriately next to real form controls
padding-top: (@padding-base-vertical + 1);
padding-bottom: (@padding-base-vertical + 1);
// Remove default margin from `p`
margin-bottom: 0;
min-height: (@line-height-computed + @font-size-base);
&.input-lg,
&.input-sm {
padding-left: 0;
padding-right: 0;
}
}
// Form control sizing
//
// Build on `.form-control` with modifier classes to decrease or increase the
// height and font-size of form controls.
//
// The `.form-group-* form-control` variations are sadly duplicated to avoid the
// issue documented in https://github.com/twbs/bootstrap/issues/15074.
.input-sm {
.input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);
}
.form-group-sm {
.form-control {
height: @input-height-small;
padding: @padding-small-vertical @padding-small-horizontal;
font-size: @font-size-small;
line-height: @line-height-small;
border-radius: @input-border-radius-small;
}
select.form-control {
height: @input-height-small;
line-height: @input-height-small;
}
textarea.form-control,
select[multiple].form-control {
height: auto;
}
.form-control-static {
height: @input-height-small;
min-height: (@line-height-computed + @font-size-small);
padding: (@padding-small-vertical + 1) @padding-small-horizontal;
font-size: @font-size-small;
line-height: @line-height-small;
}
}
.input-lg {
.input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);
}
.form-group-lg {
.form-control {
height: @input-height-large;
padding: @padding-large-vertical @padding-large-horizontal;
font-size: @font-size-large;
line-height: @line-height-large;
border-radius: @input-border-radius-large;
}
select.form-control {
height: @input-height-large;
line-height: @input-height-large;
}
textarea.form-control,
select[multiple].form-control {
height: auto;
}
.form-control-static {
height: @input-height-large;
min-height: (@line-height-computed + @font-size-large);
padding: (@padding-large-vertical + 1) @padding-large-horizontal;
font-size: @font-size-large;
line-height: @line-height-large;
}
}
// Form control feedback states
//
// Apply contextual and semantic states to individual form controls.
.has-feedback {
// Enable absolute positioning
position: relative;
// Ensure icons don't overlap text
.form-control {
padding-right: (@input-height-base * 1.25);
}
}
// Feedback icon (requires .glyphicon classes)
.form-control-feedback {
position: absolute;
top: 0;
right: 0;
z-index: 2; // Ensure icon is above input groups
display: block;
width: @input-height-base;
height: @input-height-base;
line-height: @input-height-base;
text-align: center;
pointer-events: none;
}
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback,
.form-group-lg .form-control + .form-control-feedback {
width: @input-height-large;
height: @input-height-large;
line-height: @input-height-large;
}
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback,
.form-group-sm .form-control + .form-control-feedback {
width: @input-height-small;
height: @input-height-small;
line-height: @input-height-small;
}
// Feedback states
.has-success {
.form-control-validation(@state-success-text; @state-success-text; @state-success-bg);
}
.has-warning {
.form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);
}
.has-error {
.form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);
}
// Reposition feedback icon if input has visible label above
.has-feedback label {
& ~ .form-control-feedback {
top: (@line-height-computed + 5); // Height of the `label` and its margin
}
&.sr-only ~ .form-control-feedback {
top: 0;
}
}
// Help text
//
// Apply to any element you wish to create light text for placement immediately
// below a form control. Use for general help, formatting, or instructional text.
.help-block {
display: block; // account for any element using help-block
margin-top: 5px;
margin-bottom: 10px;
color: lighten(@text-color, 25%); // lighten the text some for contrast
}
// Inline forms
//
// Make forms appear inline(-block) by adding the `.form-inline` class. Inline
// forms begin stacked on extra small (mobile) devices and then go inline when
// viewports reach <768px.
//
// Requires wrapping inputs and labels with `.form-group` for proper display of
// default HTML form controls and our custom form controls (e.g., input groups).
//
// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
.form-inline {
// Kick in the inline
@media (min-width: @screen-sm-min) {
// Inline-block all the things for "inline"
.form-group {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
}
// In navbar-form, allow folks to *not* use `.form-group`
.form-control {
display: inline-block;
width: auto; // Prevent labels from stacking above inputs in `.form-group`
vertical-align: middle;
}
// Make static controls behave like regular ones
.form-control-static {
display: inline-block;
}
.input-group {
display: inline-table;
vertical-align: middle;
.input-group-addon,
.input-group-btn,
.form-control {
width: auto;
}
}
// Input groups need that 100% width though
.input-group > .form-control {
width: 100%;
}
.control-label {
margin-bottom: 0;
vertical-align: middle;
}
// Remove default margin on radios/checkboxes that were used for stacking, and
// then undo the floating of radios and checkboxes to match.
.radio,
.checkbox {
display: inline-block;
margin-top: 0;
margin-bottom: 0;
vertical-align: middle;
label {
padding-left: 0;
}
}
.radio input[type="radio"],
.checkbox input[type="checkbox"] {
position: relative;
margin-left: 0;
}
// Re-override the feedback icon.
.has-feedback .form-control-feedback {
top: 0;
}
}
}
// Horizontal forms
//
// Horizontal forms are built on grid classes and allow you to create forms with
// labels on the left and inputs on the right.
.form-horizontal {
// Consistent vertical alignment of radios and checkboxes
//
// Labels also get some reset styles, but that is scoped to a media query below.
.radio,
.checkbox,
.radio-inline,
.checkbox-inline {
margin-top: 0;
margin-bottom: 0;
padding-top: (@padding-base-vertical + 1); // Default padding plus a border
}
// Account for padding we're adding to ensure the alignment and of help text
// and other content below items
.radio,
.checkbox {
min-height: (@line-height-computed + (@padding-base-vertical + 1));
}
// Make form groups behave like rows
.form-group {
.make-row();
}
// Reset spacing and right align labels, but scope to media queries so that
// labels on narrow viewports stack the same as a default form example.
@media (min-width: @screen-sm-min) {
.control-label {
text-align: right;
margin-bottom: 0;
padding-top: (@padding-base-vertical + 1); // Default padding plus a border
}
}
// Validation states
//
// Reposition the icon because it's now within a grid column and columns have
// `position: relative;` on them. Also accounts for the grid gutter padding.
.has-feedback .form-control-feedback {
right: floor((@grid-gutter-width / 2));
}
// Form group sizes
//
// Quick utility class for applying `.input-lg` and `.input-sm` styles to the
// inputs and labels within a `.form-group`.
.form-group-lg {
@media (min-width: @screen-sm-min) {
.control-label {
padding-top: (@padding-large-vertical + 1);
font-size: @font-size-large;
}
}
}
.form-group-sm {
@media (min-width: @screen-sm-min) {
.control-label {
padding-top: (@padding-small-vertical + 1);
font-size: @font-size-small;
}
}
}
}

View file

@ -0,0 +1,305 @@
//
// Glyphicons for Bootstrap
//
// Since icons are fonts, they can be placed anywhere text is placed and are
// thus automatically sized to match the surrounding child. To use, create an
// inline element with the appropriate classes, like so:
//
// <a href="#"><span class="glyphicon glyphicon-star"></span> Star</a>
// Import the fonts
@font-face {
font-family: 'Glyphicons Halflings';
src: url('@{icon-font-path}@{icon-font-name}.eot');
src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),
url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),
url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),
url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),
url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');
}
// Catchall baseclass
.glyphicon {
position: relative;
top: 1px;
display: inline-block;
font-family: 'Glyphicons Halflings';
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
// Individual icons
.glyphicon-asterisk { &:before { content: "\002a"; } }
.glyphicon-plus { &:before { content: "\002b"; } }
.glyphicon-euro,
.glyphicon-eur { &:before { content: "\20ac"; } }
.glyphicon-minus { &:before { content: "\2212"; } }
.glyphicon-cloud { &:before { content: "\2601"; } }
.glyphicon-envelope { &:before { content: "\2709"; } }
.glyphicon-pencil { &:before { content: "\270f"; } }
.glyphicon-glass { &:before { content: "\e001"; } }
.glyphicon-music { &:before { content: "\e002"; } }
.glyphicon-search { &:before { content: "\e003"; } }
.glyphicon-heart { &:before { content: "\e005"; } }
.glyphicon-star { &:before { content: "\e006"; } }
.glyphicon-star-empty { &:before { content: "\e007"; } }
.glyphicon-user { &:before { content: "\e008"; } }
.glyphicon-film { &:before { content: "\e009"; } }
.glyphicon-th-large { &:before { content: "\e010"; } }
.glyphicon-th { &:before { content: "\e011"; } }
.glyphicon-th-list { &:before { content: "\e012"; } }
.glyphicon-ok { &:before { content: "\e013"; } }
.glyphicon-remove { &:before { content: "\e014"; } }
.glyphicon-zoom-in { &:before { content: "\e015"; } }
.glyphicon-zoom-out { &:before { content: "\e016"; } }
.glyphicon-off { &:before { content: "\e017"; } }
.glyphicon-signal { &:before { content: "\e018"; } }
.glyphicon-cog { &:before { content: "\e019"; } }
.glyphicon-trash { &:before { content: "\e020"; } }
.glyphicon-home { &:before { content: "\e021"; } }
.glyphicon-file { &:before { content: "\e022"; } }
.glyphicon-time { &:before { content: "\e023"; } }
.glyphicon-road { &:before { content: "\e024"; } }
.glyphicon-download-alt { &:before { content: "\e025"; } }
.glyphicon-download { &:before { content: "\e026"; } }
.glyphicon-upload { &:before { content: "\e027"; } }
.glyphicon-inbox { &:before { content: "\e028"; } }
.glyphicon-play-circle { &:before { content: "\e029"; } }
.glyphicon-repeat { &:before { content: "\e030"; } }
.glyphicon-refresh { &:before { content: "\e031"; } }
.glyphicon-list-alt { &:before { content: "\e032"; } }
.glyphicon-lock { &:before { content: "\e033"; } }
.glyphicon-flag { &:before { content: "\e034"; } }
.glyphicon-headphones { &:before { content: "\e035"; } }
.glyphicon-volume-off { &:before { content: "\e036"; } }
.glyphicon-volume-down { &:before { content: "\e037"; } }
.glyphicon-volume-up { &:before { content: "\e038"; } }
.glyphicon-qrcode { &:before { content: "\e039"; } }
.glyphicon-barcode { &:before { content: "\e040"; } }
.glyphicon-tag { &:before { content: "\e041"; } }
.glyphicon-tags { &:before { content: "\e042"; } }
.glyphicon-book { &:before { content: "\e043"; } }
.glyphicon-bookmark { &:before { content: "\e044"; } }
.glyphicon-print { &:before { content: "\e045"; } }
.glyphicon-camera { &:before { content: "\e046"; } }
.glyphicon-font { &:before { content: "\e047"; } }
.glyphicon-bold { &:before { content: "\e048"; } }
.glyphicon-italic { &:before { content: "\e049"; } }
.glyphicon-text-height { &:before { content: "\e050"; } }
.glyphicon-text-width { &:before { content: "\e051"; } }
.glyphicon-align-left { &:before { content: "\e052"; } }
.glyphicon-align-center { &:before { content: "\e053"; } }
.glyphicon-align-right { &:before { content: "\e054"; } }
.glyphicon-align-justify { &:before { content: "\e055"; } }
.glyphicon-list { &:before { content: "\e056"; } }
.glyphicon-indent-left { &:before { content: "\e057"; } }
.glyphicon-indent-right { &:before { content: "\e058"; } }
.glyphicon-facetime-video { &:before { content: "\e059"; } }
.glyphicon-picture { &:before { content: "\e060"; } }
.glyphicon-map-marker { &:before { content: "\e062"; } }
.glyphicon-adjust { &:before { content: "\e063"; } }
.glyphicon-tint { &:before { content: "\e064"; } }
.glyphicon-edit { &:before { content: "\e065"; } }
.glyphicon-share { &:before { content: "\e066"; } }
.glyphicon-check { &:before { content: "\e067"; } }
.glyphicon-move { &:before { content: "\e068"; } }
.glyphicon-step-backward { &:before { content: "\e069"; } }
.glyphicon-fast-backward { &:before { content: "\e070"; } }
.glyphicon-backward { &:before { content: "\e071"; } }
.glyphicon-play { &:before { content: "\e072"; } }
.glyphicon-pause { &:before { content: "\e073"; } }
.glyphicon-stop { &:before { content: "\e074"; } }
.glyphicon-forward { &:before { content: "\e075"; } }
.glyphicon-fast-forward { &:before { content: "\e076"; } }
.glyphicon-step-forward { &:before { content: "\e077"; } }
.glyphicon-eject { &:before { content: "\e078"; } }
.glyphicon-chevron-left { &:before { content: "\e079"; } }
.glyphicon-chevron-right { &:before { content: "\e080"; } }
.glyphicon-plus-sign { &:before { content: "\e081"; } }
.glyphicon-minus-sign { &:before { content: "\e082"; } }
.glyphicon-remove-sign { &:before { content: "\e083"; } }
.glyphicon-ok-sign { &:before { content: "\e084"; } }
.glyphicon-question-sign { &:before { content: "\e085"; } }
.glyphicon-info-sign { &:before { content: "\e086"; } }
.glyphicon-screenshot { &:before { content: "\e087"; } }
.glyphicon-remove-circle { &:before { content: "\e088"; } }
.glyphicon-ok-circle { &:before { content: "\e089"; } }
.glyphicon-ban-circle { &:before { content: "\e090"; } }
.glyphicon-arrow-left { &:before { content: "\e091"; } }
.glyphicon-arrow-right { &:before { content: "\e092"; } }
.glyphicon-arrow-up { &:before { content: "\e093"; } }
.glyphicon-arrow-down { &:before { content: "\e094"; } }
.glyphicon-share-alt { &:before { content: "\e095"; } }
.glyphicon-resize-full { &:before { content: "\e096"; } }
.glyphicon-resize-small { &:before { content: "\e097"; } }
.glyphicon-exclamation-sign { &:before { content: "\e101"; } }
.glyphicon-gift { &:before { content: "\e102"; } }
.glyphicon-leaf { &:before { content: "\e103"; } }
.glyphicon-fire { &:before { content: "\e104"; } }
.glyphicon-eye-open { &:before { content: "\e105"; } }
.glyphicon-eye-close { &:before { content: "\e106"; } }
.glyphicon-warning-sign { &:before { content: "\e107"; } }
.glyphicon-plane { &:before { content: "\e108"; } }
.glyphicon-calendar { &:before { content: "\e109"; } }
.glyphicon-random { &:before { content: "\e110"; } }
.glyphicon-comment { &:before { content: "\e111"; } }
.glyphicon-magnet { &:before { content: "\e112"; } }
.glyphicon-chevron-up { &:before { content: "\e113"; } }
.glyphicon-chevron-down { &:before { content: "\e114"; } }
.glyphicon-retweet { &:before { content: "\e115"; } }
.glyphicon-shopping-cart { &:before { content: "\e116"; } }
.glyphicon-folder-close { &:before { content: "\e117"; } }
.glyphicon-folder-open { &:before { content: "\e118"; } }
.glyphicon-resize-vertical { &:before { content: "\e119"; } }
.glyphicon-resize-horizontal { &:before { content: "\e120"; } }
.glyphicon-hdd { &:before { content: "\e121"; } }
.glyphicon-bullhorn { &:before { content: "\e122"; } }
.glyphicon-bell { &:before { content: "\e123"; } }
.glyphicon-certificate { &:before { content: "\e124"; } }
.glyphicon-thumbs-up { &:before { content: "\e125"; } }
.glyphicon-thumbs-down { &:before { content: "\e126"; } }
.glyphicon-hand-right { &:before { content: "\e127"; } }
.glyphicon-hand-left { &:before { content: "\e128"; } }
.glyphicon-hand-up { &:before { content: "\e129"; } }
.glyphicon-hand-down { &:before { content: "\e130"; } }
.glyphicon-circle-arrow-right { &:before { content: "\e131"; } }
.glyphicon-circle-arrow-left { &:before { content: "\e132"; } }
.glyphicon-circle-arrow-up { &:before { content: "\e133"; } }
.glyphicon-circle-arrow-down { &:before { content: "\e134"; } }
.glyphicon-globe { &:before { content: "\e135"; } }
.glyphicon-wrench { &:before { content: "\e136"; } }
.glyphicon-tasks { &:before { content: "\e137"; } }
.glyphicon-filter { &:before { content: "\e138"; } }
.glyphicon-briefcase { &:before { content: "\e139"; } }
.glyphicon-fullscreen { &:before { content: "\e140"; } }
.glyphicon-dashboard { &:before { content: "\e141"; } }
.glyphicon-paperclip { &:before { content: "\e142"; } }
.glyphicon-heart-empty { &:before { content: "\e143"; } }
.glyphicon-link { &:before { content: "\e144"; } }
.glyphicon-phone { &:before { content: "\e145"; } }
.glyphicon-pushpin { &:before { content: "\e146"; } }
.glyphicon-usd { &:before { content: "\e148"; } }
.glyphicon-gbp { &:before { content: "\e149"; } }
.glyphicon-sort { &:before { content: "\e150"; } }
.glyphicon-sort-by-alphabet { &:before { content: "\e151"; } }
.glyphicon-sort-by-alphabet-alt { &:before { content: "\e152"; } }
.glyphicon-sort-by-order { &:before { content: "\e153"; } }
.glyphicon-sort-by-order-alt { &:before { content: "\e154"; } }
.glyphicon-sort-by-attributes { &:before { content: "\e155"; } }
.glyphicon-sort-by-attributes-alt { &:before { content: "\e156"; } }
.glyphicon-unchecked { &:before { content: "\e157"; } }
.glyphicon-expand { &:before { content: "\e158"; } }
.glyphicon-collapse-down { &:before { content: "\e159"; } }
.glyphicon-collapse-up { &:before { content: "\e160"; } }
.glyphicon-log-in { &:before { content: "\e161"; } }
.glyphicon-flash { &:before { content: "\e162"; } }
.glyphicon-log-out { &:before { content: "\e163"; } }
.glyphicon-new-window { &:before { content: "\e164"; } }
.glyphicon-record { &:before { content: "\e165"; } }
.glyphicon-save { &:before { content: "\e166"; } }
.glyphicon-open { &:before { content: "\e167"; } }
.glyphicon-saved { &:before { content: "\e168"; } }
.glyphicon-import { &:before { content: "\e169"; } }
.glyphicon-export { &:before { content: "\e170"; } }
.glyphicon-send { &:before { content: "\e171"; } }
.glyphicon-floppy-disk { &:before { content: "\e172"; } }
.glyphicon-floppy-saved { &:before { content: "\e173"; } }
.glyphicon-floppy-remove { &:before { content: "\e174"; } }
.glyphicon-floppy-save { &:before { content: "\e175"; } }
.glyphicon-floppy-open { &:before { content: "\e176"; } }
.glyphicon-credit-card { &:before { content: "\e177"; } }
.glyphicon-transfer { &:before { content: "\e178"; } }
.glyphicon-cutlery { &:before { content: "\e179"; } }
.glyphicon-header { &:before { content: "\e180"; } }
.glyphicon-compressed { &:before { content: "\e181"; } }
.glyphicon-earphone { &:before { content: "\e182"; } }
.glyphicon-phone-alt { &:before { content: "\e183"; } }
.glyphicon-tower { &:before { content: "\e184"; } }
.glyphicon-stats { &:before { content: "\e185"; } }
.glyphicon-sd-video { &:before { content: "\e186"; } }
.glyphicon-hd-video { &:before { content: "\e187"; } }
.glyphicon-subtitles { &:before { content: "\e188"; } }
.glyphicon-sound-stereo { &:before { content: "\e189"; } }
.glyphicon-sound-dolby { &:before { content: "\e190"; } }
.glyphicon-sound-5-1 { &:before { content: "\e191"; } }
.glyphicon-sound-6-1 { &:before { content: "\e192"; } }
.glyphicon-sound-7-1 { &:before { content: "\e193"; } }
.glyphicon-copyright-mark { &:before { content: "\e194"; } }
.glyphicon-registration-mark { &:before { content: "\e195"; } }
.glyphicon-cloud-download { &:before { content: "\e197"; } }
.glyphicon-cloud-upload { &:before { content: "\e198"; } }
.glyphicon-tree-conifer { &:before { content: "\e199"; } }
.glyphicon-tree-deciduous { &:before { content: "\e200"; } }
.glyphicon-cd { &:before { content: "\e201"; } }
.glyphicon-save-file { &:before { content: "\e202"; } }
.glyphicon-open-file { &:before { content: "\e203"; } }
.glyphicon-level-up { &:before { content: "\e204"; } }
.glyphicon-copy { &:before { content: "\e205"; } }
.glyphicon-paste { &:before { content: "\e206"; } }
// The following 2 Glyphicons are omitted for the time being because
// they currently use Unicode codepoints that are outside the
// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle
// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.
// Notably, the bug affects some older versions of the Android Browser.
// More info: https://github.com/twbs/bootstrap/issues/10106
// .glyphicon-door { &:before { content: "\1f6aa"; } }
// .glyphicon-key { &:before { content: "\1f511"; } }
.glyphicon-alert { &:before { content: "\e209"; } }
.glyphicon-equalizer { &:before { content: "\e210"; } }
.glyphicon-king { &:before { content: "\e211"; } }
.glyphicon-queen { &:before { content: "\e212"; } }
.glyphicon-pawn { &:before { content: "\e213"; } }
.glyphicon-bishop { &:before { content: "\e214"; } }
.glyphicon-knight { &:before { content: "\e215"; } }
.glyphicon-baby-formula { &:before { content: "\e216"; } }
.glyphicon-tent { &:before { content: "\26fa"; } }
.glyphicon-blackboard { &:before { content: "\e218"; } }
.glyphicon-bed { &:before { content: "\e219"; } }
.glyphicon-apple { &:before { content: "\f8ff"; } }
.glyphicon-erase { &:before { content: "\e221"; } }
.glyphicon-hourglass { &:before { content: "\231b"; } }
.glyphicon-lamp { &:before { content: "\e223"; } }
.glyphicon-duplicate { &:before { content: "\e224"; } }
.glyphicon-piggy-bank { &:before { content: "\e225"; } }
.glyphicon-scissors { &:before { content: "\e226"; } }
.glyphicon-bitcoin { &:before { content: "\e227"; } }
.glyphicon-btc { &:before { content: "\e227"; } }
.glyphicon-xbt { &:before { content: "\e227"; } }
.glyphicon-yen { &:before { content: "\00a5"; } }
.glyphicon-jpy { &:before { content: "\00a5"; } }
.glyphicon-ruble { &:before { content: "\20bd"; } }
.glyphicon-rub { &:before { content: "\20bd"; } }
.glyphicon-scale { &:before { content: "\e230"; } }
.glyphicon-ice-lolly { &:before { content: "\e231"; } }
.glyphicon-ice-lolly-tasted { &:before { content: "\e232"; } }
.glyphicon-education { &:before { content: "\e233"; } }
.glyphicon-option-horizontal { &:before { content: "\e234"; } }
.glyphicon-option-vertical { &:before { content: "\e235"; } }
.glyphicon-menu-hamburger { &:before { content: "\e236"; } }
.glyphicon-modal-window { &:before { content: "\e237"; } }
.glyphicon-oil { &:before { content: "\e238"; } }
.glyphicon-grain { &:before { content: "\e239"; } }
.glyphicon-sunglasses { &:before { content: "\e240"; } }
.glyphicon-text-size { &:before { content: "\e241"; } }
.glyphicon-text-color { &:before { content: "\e242"; } }
.glyphicon-text-background { &:before { content: "\e243"; } }
.glyphicon-object-align-top { &:before { content: "\e244"; } }
.glyphicon-object-align-bottom { &:before { content: "\e245"; } }
.glyphicon-object-align-horizontal{ &:before { content: "\e246"; } }
.glyphicon-object-align-left { &:before { content: "\e247"; } }
.glyphicon-object-align-vertical { &:before { content: "\e248"; } }
.glyphicon-object-align-right { &:before { content: "\e249"; } }
.glyphicon-triangle-right { &:before { content: "\e250"; } }
.glyphicon-triangle-left { &:before { content: "\e251"; } }
.glyphicon-triangle-bottom { &:before { content: "\e252"; } }
.glyphicon-triangle-top { &:before { content: "\e253"; } }
.glyphicon-console { &:before { content: "\e254"; } }
.glyphicon-superscript { &:before { content: "\e255"; } }
.glyphicon-subscript { &:before { content: "\e256"; } }
.glyphicon-menu-left { &:before { content: "\e257"; } }
.glyphicon-menu-right { &:before { content: "\e258"; } }
.glyphicon-menu-down { &:before { content: "\e259"; } }
.glyphicon-menu-up { &:before { content: "\e260"; } }

View file

@ -0,0 +1,84 @@
//
// Grid system
// --------------------------------------------------
// Container widths
//
// Set the container width, and override it for fixed navbars in media queries.
.container {
.container-fixed();
@media (min-width: @screen-sm-min) {
width: @container-sm;
}
@media (min-width: @screen-md-min) {
width: @container-md;
}
@media (min-width: @screen-lg-min) {
width: @container-lg;
}
}
// Fluid container
//
// Utilizes the mixin meant for fixed width containers, but without any defined
// width for fluid, full width layouts.
.container-fluid {
.container-fixed();
}
// Row
//
// Rows contain and clear the floats of your columns.
.row {
.make-row();
}
// Columns
//
// Common styles for small and large grid columns
.make-grid-columns();
// Extra small grid
//
// Columns, offsets, pushes, and pulls for extra small devices like
// smartphones.
.make-grid(xs);
// Small grid
//
// Columns, offsets, pushes, and pulls for the small device range, from phones
// to tablets.
@media (min-width: @screen-sm-min) {
.make-grid(sm);
}
// Medium grid
//
// Columns, offsets, pushes, and pulls for the desktop device range.
@media (min-width: @screen-md-min) {
.make-grid(md);
}
// Large grid
//
// Columns, offsets, pushes, and pulls for the large desktop device range.
@media (min-width: @screen-lg-min) {
.make-grid(lg);
}

View file

@ -0,0 +1,171 @@
//
// Input groups
// --------------------------------------------------
// Base styles
// -------------------------
.input-group {
position: relative; // For dropdowns
display: table;
border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table
// Undo padding and float of grid classes
&[class*="col-"] {
float: none;
padding-left: 0;
padding-right: 0;
}
.form-control {
// Ensure that the input is always above the *appended* addon button for
// proper border colors.
position: relative;
z-index: 2;
// IE9 fubars the placeholder attribute in text inputs and the arrows on
// select elements in input groups. To fix it, we float the input. Details:
// https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855
float: left;
width: 100%;
margin-bottom: 0;
&:focus {
z-index: 3;
}
}
}
// Sizing options
//
// Remix the default form control sizing classes into new ones for easier
// manipulation.
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
.input-lg();
}
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
.input-sm();
}
// Display as table-cell
// -------------------------
.input-group-addon,
.input-group-btn,
.input-group .form-control {
display: table-cell;
&:not(:first-child):not(:last-child) {
border-radius: 0;
}
}
// Addon and addon wrapper for buttons
.input-group-addon,
.input-group-btn {
width: 1%;
white-space: nowrap;
vertical-align: middle; // Match the inputs
}
// Text input groups
// -------------------------
.input-group-addon {
padding: @padding-base-vertical @padding-base-horizontal;
font-size: @font-size-base;
font-weight: normal;
line-height: 1;
color: @input-color;
text-align: center;
background-color: @input-group-addon-bg;
border: 1px solid @input-group-addon-border-color;
border-radius: @input-border-radius;
// Sizing
&.input-sm {
padding: @padding-small-vertical @padding-small-horizontal;
font-size: @font-size-small;
border-radius: @input-border-radius-small;
}
&.input-lg {
padding: @padding-large-vertical @padding-large-horizontal;
font-size: @font-size-large;
border-radius: @input-border-radius-large;
}
// Nuke default margins from checkboxes and radios to vertically center within.
input[type="radio"],
input[type="checkbox"] {
margin-top: 0;
}
}
// Reset rounded corners
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
.border-right-radius(0);
}
.input-group-addon:first-child {
border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child),
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
.border-left-radius(0);
}
.input-group-addon:last-child {
border-left: 0;
}
// Button input groups
// -------------------------
.input-group-btn {
position: relative;
// Jankily prevent input button groups from wrapping with `white-space` and
// `font-size` in combination with `inline-block` on buttons.
font-size: 0;
white-space: nowrap;
// Negative margin for spacing, position for bringing hovered/focused/actived
// element above the siblings.
> .btn {
position: relative;
+ .btn {
margin-left: -1px;
}
// Bring the "active" button to the front
&:hover,
&:focus,
&:active {
z-index: 2;
}
}
// Negative margin to only have a 1px border between the two
&:first-child {
> .btn,
> .btn-group {
margin-right: -1px;
}
}
&:last-child {
> .btn,
> .btn-group {
z-index: 2;
margin-left: -1px;
}
}
}

View file

@ -0,0 +1,54 @@
//
// Jumbotron
// --------------------------------------------------
.jumbotron {
padding-top: @jumbotron-padding;
padding-bottom: @jumbotron-padding;
margin-bottom: @jumbotron-padding;
color: @jumbotron-color;
background-color: @jumbotron-bg;
h1,
.h1 {
color: @jumbotron-heading-color;
}
p {
margin-bottom: (@jumbotron-padding / 2);
font-size: @jumbotron-font-size;
font-weight: 200;
}
> hr {
border-top-color: darken(@jumbotron-bg, 10%);
}
.container &,
.container-fluid & {
border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
padding-left: (@grid-gutter-width / 2);
padding-right: (@grid-gutter-width / 2);
}
.container {
max-width: 100%;
}
@media screen and (min-width: @screen-sm-min) {
padding-top: (@jumbotron-padding * 1.6);
padding-bottom: (@jumbotron-padding * 1.6);
.container &,
.container-fluid & {
padding-left: (@jumbotron-padding * 2);
padding-right: (@jumbotron-padding * 2);
}
h1,
.h1 {
font-size: @jumbotron-heading-font-size;
}
}
}

View file

@ -0,0 +1,64 @@
//
// Labels
// --------------------------------------------------
.label {
display: inline;
padding: .2em .6em .3em;
font-size: 75%;
font-weight: bold;
line-height: 1;
color: @label-color;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: .25em;
// Add hover effects, but only for links
a& {
&:hover,
&:focus {
color: @label-link-hover-color;
text-decoration: none;
cursor: pointer;
}
}
// Empty labels collapse automatically (not available in IE8)
&:empty {
display: none;
}
// Quick fix for labels in buttons
.btn & {
position: relative;
top: -1px;
}
}
// Colors
// Contextual variations (linked labels get darker on :hover)
.label-default {
.label-variant(@label-default-bg);
}
.label-primary {
.label-variant(@label-primary-bg);
}
.label-success {
.label-variant(@label-success-bg);
}
.label-info {
.label-variant(@label-info-bg);
}
.label-warning {
.label-variant(@label-warning-bg);
}
.label-danger {
.label-variant(@label-danger-bg);
}

View file

@ -0,0 +1,130 @@
//
// List groups
// --------------------------------------------------
// Base class
//
// Easily usable on <ul>, <ol>, or <div>.
.list-group {
// No need to set list-style: none; since .list-group-item is block level
margin-bottom: 20px;
padding-left: 0; // reset padding because ul and ol
}
// Individual list items
//
// Use on `li`s or `div`s within the `.list-group` parent.
.list-group-item {
position: relative;
display: block;
padding: 10px 15px;
// Place the border on the list items and negative margin up for better styling
margin-bottom: -1px;
background-color: @list-group-bg;
border: 1px solid @list-group-border;
// Round the first and last items
&:first-child {
.border-top-radius(@list-group-border-radius);
}
&:last-child {
margin-bottom: 0;
.border-bottom-radius(@list-group-border-radius);
}
}
// Interactive list items
//
// Use anchor or button elements instead of `li`s or `div`s to create interactive items.
// Includes an extra `.active` modifier class for showing selected items.
a.list-group-item,
button.list-group-item {
color: @list-group-link-color;
.list-group-item-heading {
color: @list-group-link-heading-color;
}
// Hover state
&:hover,
&:focus {
text-decoration: none;
color: @list-group-link-hover-color;
background-color: @list-group-hover-bg;
}
}
button.list-group-item {
width: 100%;
text-align: left;
}
.list-group-item {
// Disabled state
&.disabled,
&.disabled:hover,
&.disabled:focus {
background-color: @list-group-disabled-bg;
color: @list-group-disabled-color;
cursor: @cursor-disabled;
// Force color to inherit for custom content
.list-group-item-heading {
color: inherit;
}
.list-group-item-text {
color: @list-group-disabled-text-color;
}
}
// Active class on item itself, not parent
&.active,
&.active:hover,
&.active:focus {
z-index: 2; // Place active items above their siblings for proper border styling
color: @list-group-active-color;
background-color: @list-group-active-bg;
border-color: @list-group-active-border;
// Force color to inherit for custom content
.list-group-item-heading,
.list-group-item-heading > small,
.list-group-item-heading > .small {
color: inherit;
}
.list-group-item-text {
color: @list-group-active-text-color;
}
}
}
// Contextual variants
//
// Add modifier classes to change text and background color on individual items.
// Organizationally, this must come after the `:hover` states.
.list-group-item-variant(success; @state-success-bg; @state-success-text);
.list-group-item-variant(info; @state-info-bg; @state-info-text);
.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);
.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);
// Custom content options
//
// Extra classes for creating well-formatted content within `.list-group-item`s.
.list-group-item-heading {
margin-top: 0;
margin-bottom: 5px;
}
.list-group-item-text {
margin-bottom: 0;
line-height: 1.3;
}

View file

@ -0,0 +1,66 @@
.media {
// Proper spacing between instances of .media
margin-top: 15px;
&:first-child {
margin-top: 0;
}
}
.media,
.media-body {
zoom: 1;
overflow: hidden;
}
.media-body {
width: 10000px;
}
.media-object {
display: block;
// Fix collapse in webkit from max-width: 100% and display: table-cell.
&.img-thumbnail {
max-width: none;
}
}
.media-right,
.media > .pull-right {
padding-left: 10px;
}
.media-left,
.media > .pull-left {
padding-right: 10px;
}
.media-left,
.media-right,
.media-body {
display: table-cell;
vertical-align: top;
}
.media-middle {
vertical-align: middle;
}
.media-bottom {
vertical-align: bottom;
}
// Reset margins on headings for tighter default spacing
.media-heading {
margin-top: 0;
margin-bottom: 5px;
}
// Media list variation
//
// Undo default ul/ol styles
.media-list {
padding-left: 0;
list-style: none;
}

View file

@ -0,0 +1,40 @@
// Mixins
// --------------------------------------------------
// Utilities
@import "mixins/hide-text.less";
@import "mixins/opacity.less";
@import "mixins/image.less";
@import "mixins/labels.less";
@import "mixins/reset-filter.less";
@import "mixins/resize.less";
@import "mixins/responsive-visibility.less";
@import "mixins/size.less";
@import "mixins/tab-focus.less";
@import "mixins/reset-text.less";
@import "mixins/text-emphasis.less";
@import "mixins/text-overflow.less";
@import "mixins/vendor-prefixes.less";
// Components
@import "mixins/alerts.less";
@import "mixins/buttons.less";
@import "mixins/panels.less";
@import "mixins/pagination.less";
@import "mixins/list-group.less";
@import "mixins/nav-divider.less";
@import "mixins/forms.less";
@import "mixins/progress-bar.less";
@import "mixins/table-row.less";
// Skins
@import "mixins/background-variant.less";
@import "mixins/border-radius.less";
@import "mixins/gradients.less";
// Layout
@import "mixins/clearfix.less";
@import "mixins/center-block.less";
@import "mixins/nav-vertical-align.less";
@import "mixins/grid-framework.less";
@import "mixins/grid.less";

View file

@ -0,0 +1,14 @@
// Alerts
.alert-variant(@background; @border; @text-color) {
background-color: @background;
border-color: @border;
color: @text-color;
hr {
border-top-color: darken(@border, 5%);
}
.alert-link {
color: darken(@text-color, 10%);
}
}

View file

@ -0,0 +1,9 @@
// Contextual backgrounds
.bg-variant(@color) {
background-color: @color;
a&:hover,
a&:focus {
background-color: darken(@color, 10%);
}
}

View file

@ -0,0 +1,18 @@
// Single side border-radius
.border-top-radius(@radius) {
border-top-right-radius: @radius;
border-top-left-radius: @radius;
}
.border-right-radius(@radius) {
border-bottom-right-radius: @radius;
border-top-right-radius: @radius;
}
.border-bottom-radius(@radius) {
border-bottom-right-radius: @radius;
border-bottom-left-radius: @radius;
}
.border-left-radius(@radius) {
border-bottom-left-radius: @radius;
border-top-left-radius: @radius;
}

View file

@ -0,0 +1,65 @@
// Button variants
//
// Easily pump out default styles, as well as :hover, :focus, :active,
// and disabled options for all buttons
.button-variant(@color; @background; @border) {
color: @color;
background-color: @background;
border-color: @border;
&:focus,
&.focus {
color: @color;
background-color: darken(@background, 10%);
border-color: darken(@border, 25%);
}
&:hover {
color: @color;
background-color: darken(@background, 10%);
border-color: darken(@border, 12%);
}
&:active,
&.active,
.open > .dropdown-toggle& {
color: @color;
background-color: darken(@background, 10%);
border-color: darken(@border, 12%);
&:hover,
&:focus,
&.focus {
color: @color;
background-color: darken(@background, 17%);
border-color: darken(@border, 25%);
}
}
&:active,
&.active,
.open > .dropdown-toggle& {
background-image: none;
}
&.disabled,
&[disabled],
fieldset[disabled] & {
&:hover,
&:focus,
&.focus {
background-color: @background;
border-color: @border;
}
}
.badge {
color: @background;
background-color: @color;
}
}
// Button sizes
.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
padding: @padding-vertical @padding-horizontal;
font-size: @font-size;
line-height: @line-height;
border-radius: @border-radius;
}

View file

@ -0,0 +1,7 @@
// Center-align a block level element
.center-block() {
display: block;
margin-left: auto;
margin-right: auto;
}

View file

@ -0,0 +1,22 @@
// Clearfix
//
// For modern browsers
// 1. The space content is one way to avoid an Opera bug when the
// contenteditable attribute is included anywhere else in the document.
// Otherwise it causes space to appear at the top and bottom of elements
// that are clearfixed.
// 2. The use of `table` rather than `block` is only necessary if using
// `:before` to contain the top-margins of child elements.
//
// Source: http://nicolasgallagher.com/micro-clearfix-hack/
.clearfix() {
&:before,
&:after {
content: " "; // 1
display: table; // 2
}
&:after {
clear: both;
}
}

View file

@ -0,0 +1,85 @@
// Form validation states
//
// Used in forms.less to generate the form validation CSS for warnings, errors,
// and successes.
.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {
// Color the label and help text
.help-block,
.control-label,
.radio,
.checkbox,
.radio-inline,
.checkbox-inline,
&.radio label,
&.checkbox label,
&.radio-inline label,
&.checkbox-inline label {
color: @text-color;
}
// Set the border and box shadow on specific inputs to match
.form-control {
border-color: @border-color;
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
&:focus {
border-color: darken(@border-color, 10%);
@shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);
.box-shadow(@shadow);
}
}
// Set validation states also for addons
.input-group-addon {
color: @text-color;
border-color: @border-color;
background-color: @background-color;
}
// Optional feedback icon
.form-control-feedback {
color: @text-color;
}
}
// Form control focus state
//
// Generate a customized focus state and for any input with the specified color,
// which defaults to the `@input-border-focus` variable.
//
// We highly encourage you to not customize the default value, but instead use
// this to tweak colors on an as-needed basis. This aesthetic change is based on
// WebKit's default styles, but applicable to a wider range of browsers. Its
// usability and accessibility should be taken into account with any change.
//
// Example usage: change the default blue border and shadow to white for better
// contrast against a dark gray background.
.form-control-focus(@color: @input-border-focus) {
@color-rgba: rgba(red(@color), green(@color), blue(@color), .6);
&:focus {
border-color: @color;
outline: 0;
.box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}");
}
}
// Form control sizing
//
// Relative text size, padding, and border-radii changes for form controls. For
// horizontal sizing, wrap controls in the predefined grid classes. `<select>`
// element gets special love because it's special, and that's a fact!
.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
height: @input-height;
padding: @padding-vertical @padding-horizontal;
font-size: @font-size;
line-height: @line-height;
border-radius: @border-radius;
select& {
height: @input-height;
line-height: @input-height;
}
textarea&,
select[multiple]& {
height: auto;
}
}

View file

@ -0,0 +1,59 @@
// Gradients
#gradient {
// Horizontal gradient, from left to right
//
// Creates two color stops, start and end, by specifying a color and position for each color stop.
// Color stops are not available in IE9 and below.
.horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+
background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12
background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
background-repeat: repeat-x;
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down
}
// Vertical gradient, from top to bottom
//
// Creates two color stops, start and end, by specifying a color and position for each color stop.
// Color stops are not available in IE9 and below.
.vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+
background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12
background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
background-repeat: repeat-x;
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down
}
.directional(@start-color: #555; @end-color: #333; @deg: 45deg) {
background-repeat: repeat-x;
background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+
background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12
background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
}
.horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);
background-repeat: no-repeat;
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback
}
.vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);
background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);
background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);
background-repeat: no-repeat;
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback
}
.radial(@inner-color: #555; @outer-color: #333) {
background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);
background-image: radial-gradient(circle, @inner-color, @outer-color);
background-repeat: no-repeat;
}
.striped(@color: rgba(255,255,255,.15); @angle: 45deg) {
background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
}
}

View file

@ -0,0 +1,91 @@
// Framework grid generation
//
// Used only by Bootstrap to generate the correct number of grid classes given
// any value of `@grid-columns`.
.make-grid-columns() {
// Common styles for all sizes of grid columns, widths 1-12
.col(@index) { // initial
@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
.col((@index + 1), @item);
}
.col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo
@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
.col((@index + 1), ~"@{list}, @{item}");
}
.col(@index, @list) when (@index > @grid-columns) { // terminal
@{list} {
position: relative;
// Prevent columns from collapsing when empty
min-height: 1px;
// Inner gutter via padding
padding-left: ceil((@grid-gutter-width / 2));
padding-right: floor((@grid-gutter-width / 2));
}
}
.col(1); // kickstart it
}
.float-grid-columns(@class) {
.col(@index) { // initial
@item: ~".col-@{class}-@{index}";
.col((@index + 1), @item);
}
.col(@index, @list) when (@index =< @grid-columns) { // general
@item: ~".col-@{class}-@{index}";
.col((@index + 1), ~"@{list}, @{item}");
}
.col(@index, @list) when (@index > @grid-columns) { // terminal
@{list} {
float: left;
}
}
.col(1); // kickstart it
}
.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {
.col-@{class}-@{index} {
width: percentage((@index / @grid-columns));
}
}
.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {
.col-@{class}-push-@{index} {
left: percentage((@index / @grid-columns));
}
}
.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {
.col-@{class}-push-0 {
left: auto;
}
}
.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {
.col-@{class}-pull-@{index} {
right: percentage((@index / @grid-columns));
}
}
.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {
.col-@{class}-pull-0 {
right: auto;
}
}
.calc-grid-column(@index, @class, @type) when (@type = offset) {
.col-@{class}-offset-@{index} {
margin-left: percentage((@index / @grid-columns));
}
}
// Basic looping in LESS
.loop-grid-columns(@index, @class, @type) when (@index >= 0) {
.calc-grid-column(@index, @class, @type);
// next iteration
.loop-grid-columns((@index - 1), @class, @type);
}
// Create grid for specific class
.make-grid(@class) {
.float-grid-columns(@class);
.loop-grid-columns(@grid-columns, @class, width);
.loop-grid-columns(@grid-columns, @class, pull);
.loop-grid-columns(@grid-columns, @class, push);
.loop-grid-columns(@grid-columns, @class, offset);
}

View file

@ -0,0 +1,122 @@
// Grid system
//
// Generate semantic grid columns with these mixins.
// Centered container element
.container-fixed(@gutter: @grid-gutter-width) {
margin-right: auto;
margin-left: auto;
padding-left: floor((@gutter / 2));
padding-right: ceil((@gutter / 2));
&:extend(.clearfix all);
}
// Creates a wrapper for a series of columns
.make-row(@gutter: @grid-gutter-width) {
margin-left: ceil((@gutter / -2));
margin-right: floor((@gutter / -2));
&:extend(.clearfix all);
}
// Generate the extra small columns
.make-xs-column(@columns; @gutter: @grid-gutter-width) {
position: relative;
float: left;
width: percentage((@columns / @grid-columns));
min-height: 1px;
padding-left: (@gutter / 2);
padding-right: (@gutter / 2);
}
.make-xs-column-offset(@columns) {
margin-left: percentage((@columns / @grid-columns));
}
.make-xs-column-push(@columns) {
left: percentage((@columns / @grid-columns));
}
.make-xs-column-pull(@columns) {
right: percentage((@columns / @grid-columns));
}
// Generate the small columns
.make-sm-column(@columns; @gutter: @grid-gutter-width) {
position: relative;
min-height: 1px;
padding-left: (@gutter / 2);
padding-right: (@gutter / 2);
@media (min-width: @screen-sm-min) {
float: left;
width: percentage((@columns / @grid-columns));
}
}
.make-sm-column-offset(@columns) {
@media (min-width: @screen-sm-min) {
margin-left: percentage((@columns / @grid-columns));
}
}
.make-sm-column-push(@columns) {
@media (min-width: @screen-sm-min) {
left: percentage((@columns / @grid-columns));
}
}
.make-sm-column-pull(@columns) {
@media (min-width: @screen-sm-min) {
right: percentage((@columns / @grid-columns));
}
}
// Generate the medium columns
.make-md-column(@columns; @gutter: @grid-gutter-width) {
position: relative;
min-height: 1px;
padding-left: (@gutter / 2);
padding-right: (@gutter / 2);
@media (min-width: @screen-md-min) {
float: left;
width: percentage((@columns / @grid-columns));
}
}
.make-md-column-offset(@columns) {
@media (min-width: @screen-md-min) {
margin-left: percentage((@columns / @grid-columns));
}
}
.make-md-column-push(@columns) {
@media (min-width: @screen-md-min) {
left: percentage((@columns / @grid-columns));
}
}
.make-md-column-pull(@columns) {
@media (min-width: @screen-md-min) {
right: percentage((@columns / @grid-columns));
}
}
// Generate the large columns
.make-lg-column(@columns; @gutter: @grid-gutter-width) {
position: relative;
min-height: 1px;
padding-left: (@gutter / 2);
padding-right: (@gutter / 2);
@media (min-width: @screen-lg-min) {
float: left;
width: percentage((@columns / @grid-columns));
}
}
.make-lg-column-offset(@columns) {
@media (min-width: @screen-lg-min) {
margin-left: percentage((@columns / @grid-columns));
}
}
.make-lg-column-push(@columns) {
@media (min-width: @screen-lg-min) {
left: percentage((@columns / @grid-columns));
}
}
.make-lg-column-pull(@columns) {
@media (min-width: @screen-lg-min) {
right: percentage((@columns / @grid-columns));
}
}

Some files were not shown because too many files have changed in this diff Show more