Updated: Shoppin cart and checkout workflow

This commit is contained in:
sayasilvi 2025-11-27 23:28:40 +07:00
parent 9f6f268376
commit a152a3dffc
159 changed files with 5243 additions and 10157 deletions

201
README.md
View File

@ -1,59 +1,184 @@
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel Logo"></a></p>
<p align="center">
<a href="https://github.com/laravel/framework/actions"><img src="https://github.com/laravel/framework/workflows/tests/badge.svg" alt="Build Status"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
<a href="https://laravel.com" target="_blank">
<img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="300" alt="Laravel Logo">
</a>
</p>
## About Laravel
<h1 align="center">Tani Desa</h1>
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
<p align="center">
<a href="https://github.com/laravel/framework/actions"><img src="https://github.com/laravel/framework/workflows/tests/badge.svg" alt="Build Status"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
</p>
- [Simple, fast routing engine](https://laravel.com/docs/routing).
- [Powerful dependency injection container](https://laravel.com/docs/container).
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
- [Robust background job processing](https://laravel.com/docs/queues).
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
<p align="center">
<strong>Platform digital terintegrasi untuk menghubungkan Petani lokal dengan Konsumen secara langsung (Direct-to-Consumer).</strong>
</p>
Laravel is accessible, powerful, and provides tools required for large, robust applications.
<hr>
## Learning Laravel
## 📑 Table of Contents
Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. You can also check out [Laravel Learn](https://laravel.com/learn), where you will be guided through building a modern Laravel application.
- [About the Project](#-about-the-project)
- [System Architecture](#-system-architecture)
- [Key Features](#-key-features)
- [Prerequisites](#-prerequisites)
- [Installation Guide](#-installation-guide)
- [Access Management (Seeders)](#-access-management-seeders)
- [Development Roadmap](#-development-roadmap)
- [License](#-license)
If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
---
## Laravel Sponsors
## 📖 About the Project
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com).
**Tani Desa** adalah solusi perangkat lunak berbasis web yang dirancang untuk mendigitalisasi proses jual-beli komoditas pertanian desa. Sistem ini bertujuan memotong rantai distribusi yang panjang dengan memfasilitasi transaksi langsung antara produsen (Petani) dan konsumen akhir.
### Premium Partners
Sistem ini dibangun menggunakan arsitektur **Monolithic** dengan framework **Laravel**, serta antarmuka modern yang responsif menggunakan **Bootstrap 5 CSS**.
- **[Vehikl](https://vehikl.com)**
- **[Tighten Co.](https://tighten.co)**
- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
- **[64 Robots](https://64robots.com)**
- **[Curotec](https://www.curotec.com/services/technologies/laravel)**
- **[DevSquad](https://devsquad.com/hire-laravel-developers)**
- **[Redberry](https://redberry.international/laravel-development)**
- **[Active Logic](https://activelogic.com)**
---
## Contributing
## 🛠 System Architecture
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
Aplikasi ini dikembangkan menggunakan *Tech Stack* modern dengan spesifikasi berikut:
## Code of Conduct
| Komponen | Teknologi | Versi / Detail |
| :--- | :--- | :--- |
| **Backend Framework** | Laravel | v12.x |
| **Language** | PHP | v8.2+ |
| **Database** | MySQL / MariaDB | Relational Database |
| **Frontend Styling** | Bootstrap 5 CSS | v4.x (Latest) |
In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
---
## Security Vulnerabilities
## Key Features
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
Sistem dibagi menjadi tiga modul utama berdasarkan *User Roles*:
## License
### 1. Admin Desa (Administrator)
*Bertugas memverifikasi petani dan memantau sistem.*
- [x] **Login Admin:** Halaman login khusus admin.
- [ ] **Dashboard Admin:** Statistik ringkas jumlah petani dan status verifikasi.
- [x] **Verifikasi Petani:** Melihat daftar pendaftar, menyetujui (Approve), atau menolak (Reject) akun petani.
- [ ] **Monitoring Transaksi:** Memantau seluruh aktivitas transaksi di platform (View Only).
The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
### 2. Petani (Penjual)
*Hanya bisa berjualan setelah akun diverifikasi oleh Admin Desa.*
- [ ] **Registrasi Petani:** Pendaftaran akun dengan status awal "Menunggu Persetujuan".
- [ ] **Dashboard Petani:** Ringkasan aktivitas toko.
- [x] **Manajemen Produk (CRUD):** Tambah, Edit, Hapus, dan Lihat daftar produk pertanian.
- [ ] **Manajemen Pesanan:** Menerima pesanan masuk dan mengubah status menjadi "Dikirim".
- [ ] **Kotak Masuk (Pesan):** Fitur tanya jawab dengan pembeli.
### 3. Pembeli (Publik)
*Pengguna umum yang membeli produk pertanian.*
- [ ] **Registrasi & Login:** Membuat akun pembeli.
- [x] **Katalog Produk:** Melihat dan mencari produk yang dijual petani.
- [x] **Detail Produk:** Melihat rincian produk.
- [x] **Keranjang Belanja:** Menambah produk ke cart sebelum checkout.
- [ ] **Checkout (Transaksi):** Melakukan pemesanan barang (Metode COD).
- [ ] **Riwayat Transaksi:** Melacak status pesanan (Diproses/Dikirim/Selesai).
- [ ] **Kirim Pesan:** Menghubungi petani terkait produk.
---
## Prerequisites
Sebelum melakukan instalasi, pastikan lingkungan server lokal Anda memenuhi persyaratan berikut:
- **PHP** >= 8.1
- **Composer** (PHP Dependency Manager)
- **MySQL** Database Server
- **Git** Version Control
---
## Installation Guide
Ikuti langkah-langkah berikut untuk menjalankan proyek di lingkungan pengembangan lokal (*Local Environment*):
### Step 1: Clone Repository
Unduh kode sumber dari repositori.
```bash
git clone [https://github.com/sayasilvi/web-pertanian.git)
cd web-pertanian
```
### Step 2: Install Backend Dependencies
Install library PHP melalui Composer.
```bash
composer install
```
### Step 3: Install Frontend Dependencies
Install library JavaScript.
```bash
npm install
```
### Step 4: Environment Configuration
Salin file konfigurasi dan sesuaikan kredensial database.
```bash
cp .env.example .env
```
*Edit file `.env` lalu atur parameter `DB_DATABASE`, `DB_USERNAME`, dan `DB_PASSWORD` sesuai konfigurasi lokal Anda.*
### Step 5: Application Key & Database
Generate key aplikasi dan jalankan migrasi database serta seeder data dummy.
```bash
php artisan key:generate
php artisan migrate --seed
```
### Step 6: Start Application
**Terminal (Laravel Server):**
```bash
php artisan serve
```
Aplikasi dapat diakses melalui browser di: `http://localhost:8000` atau `http://127.0.0.1:8000`
---
## Access Management (Seeders)
Berikut adalah kredensial default yang dibuat oleh sistem *Seeder* untuk keperluan *User Acceptance Testing (UAT)*:
### Administrator
| Role | Username | Password | Access Level |
| :--- | :--- | :--- | :--- |
| **Super Admin** | `admin` | `password123` | Full Access |
### Vendors (Petani)
| Account Name | Username | Password | Status | Notes |
| :--- | :--- | :--- | :--- | :--- |
| **Siti Sayur** | `siti_sayur` | `password123` | <span style="color:green">**Active**</span> | Dapat Login & Jualan |
| **Budi Tani** | `budi_tani` | `password123` | <span style="color:orange">**Pending**</span> | Menunggu Approval Admin |
| **Joko Tani** | `joko_tani` | `password123` | <span style="color:red">**Rejected**</span> | Akses Ditolak |
### Customers (Pembeli)
| Account Name | Username | Password |
| :--- | :--- | :--- |
| **Andi Pembeli** | `andi_beli` | `password123` |
| **Rina Sayur** | `rina_sayur` | `password123` |
---
## Development Roadmap
Status pengembangan fitur saat ini:
- [x] **Core:** Authentication & Role Management
- [x] **Core:** Database Schema & Migration
- [x] **Module:** Admin Verification Workflow
- [x] **Module:** Shopping Cart & Checkout
- [ ] **Module:** Product Management (Vendor)
- [ ] **Feature:** Transaction History Tracking
- [ ] **Feature:** In-app Messaging System
---

View File

@ -7,17 +7,14 @@
class AdminController extends Controller
{
// Tampilkan Dashboard Utama Admin
public function dashboard()
{
return view('admin.dashboard');
}
// Tampilkan Daftar Antrian Verifikasi
public function verifikasiIndex()
{
// Ambil data petani yang statusnya 'menunggu'
// Disini ambil semua biar admin bisa pantau histori juga
$petanis = Petani::orderBy('created_at', 'desc')->get();
return view('admin.verifikasi.index', compact('petanis'));

View File

@ -10,13 +10,11 @@
class AuthController extends Controller
{
// --- HALAMAN LOGIN ---
public function showLoginForm()
{
return view('auth.login');
}
// --- PROSES LOGIN ---
public function loginProcess(Request $request)
{
// Validasi Input
@ -58,19 +56,16 @@ public function loginProcess(Request $request)
return redirect()->intended('petani/dashboard');
}
// Jika semua gagal
return back()->withErrors([
'username' => 'Username atau password salah.',
]);
}
// --- HALAMAN REGISTER ---
public function showRegisterForm()
{
return view('auth.register');
}
// --- PROSES REGISTER ---
public function registerProcess(Request $request)
{
// Validasi
@ -109,7 +104,6 @@ public function registerProcess(Request $request)
}
}
// --- LOGOUT ---
public function logout(Request $request)
{
if (Auth::guard('admin')->check()) Auth::guard('admin')->logout();

View File

@ -0,0 +1,54 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Produk;
class CartController extends Controller
{
// Menampilkan Halaman Keranjang
public function index()
{
$cart = session()->get('cart', []);
return view('landing.cart', compact('cart'));
}
// Menambahkan Produk ke Session Keranjang
public function addToCart(Request $request)
{
$id = $request->id;
$produk = Produk::findOrFail($id);
$cart = session()->get('cart', []);
// Jika produk sudah ada di cart, tambahkan jumlahnya
if(isset($cart[$id])) {
$cart[$id]['quantity'] += $request->qty;
} else {
// Jika belum ada, masukkan data baru
$cart[$id] = [
"name" => $produk->nama_produk,
"quantity" => $request->qty,
"price" => $produk->harga,
"photo" => $produk->foto_produk
];
}
session()->put('cart', $cart);
return redirect()->back()->with('success', 'Produk berhasil masuk keranjang!');
}
// Menghapus Item dari Keranjang
public function remove(Request $request)
{
if($request->id) {
$cart = session()->get('cart');
if(isset($cart[$request->id])) {
unset($cart[$request->id]);
session()->put('cart', $cart);
}
return redirect()->back()->with('success', 'Produk dihapus dari keranjang');
}
}
}

View File

@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class CheckoutController extends Controller
{
/**
* Menampilkan halaman checkout.
* Mengecek apakah user punya item di keranjang sebelum masuk ke sini.
*/
public function index()
{
$cart = session()->get('cart');
if (!$cart || count($cart) == 0) {
return redirect()->route('shop')->with('error', 'Keranjang Anda kosong, silahkan belanja produk terlebih dahulu.');
}
return view('landing.checkout', compact('cart'));
}
}

View File

@ -7,14 +7,12 @@
class LandingController extends Controller
{
// Halaman Utama
public function index()
{
$produks = Produk::latest()->take(8)->get();
return view('landing.home', compact('produks'));
}
// Halaman Shop
public function shop(Request $request)
{
$query = Produk::query();
@ -28,7 +26,6 @@ public function shop(Request $request)
return view('landing.shop', compact('produks'));
}
// Halaman Detail Produk
public function detail($id)
{
$produk = Produk::with('petani')->findOrFail($id);

View File

@ -0,0 +1,83 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Transaksi;
use App\Models\DetailTransaksi;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
class TransaksiController extends Controller
{
/**
* PROSES CHECKOUT / MENYIMPAN TRANSAKSI.
* Menggunakan DB Transaction agar data header dan detail tersimpan atomik (bersamaan).
*/
public function store(Request $request)
{
$cart = session()->get('cart');
// Validasi Keranjang (Backend validation)
if (!$cart) {
return redirect()->route('shop')->with('error', 'Keranjang kosong!');
}
// Validasi Input User
$request->validate([
'alamat_pengiriman' => 'required|string|max:500',
'no_hp' => 'required|numeric',
'nama_lengkap' => 'required|string|max:255',
]);
try {
DB::beginTransaction();
$subtotal = $this->hitungSubtotal($cart);
$ongkir = 10000;
$total_bayar = $subtotal + $ongkir;
$transaksi = Transaksi::create([
'pembeli_id' => Auth::guard('pembeli')->id(),
'tanggal_transaksi' => now(),
'alamat_pengiriman' => $request->alamat_pengiriman,
'total_harga' => $total_bayar,
'status' => 'pending',
'kode_invoice' => 'INV/' . date('Ymd') . '/' . mt_rand(1000, 9999),
'catatan' => $request->catatan,
]);
foreach ($cart as $id_produk => $details) {
DetailTransaksi::create([
'transaksi_id' => $transaksi->id,
'produk_id' => $id_produk,
'jumlah' => $details['quantity'],
'harga_satuan' => $details['price'],
'subtotal' => $details['price'] * $details['quantity'],
]);
}
DB::commit();
session()->forget('cart');
return redirect()->route('home')->with('success', 'Pesanan berhasil dibuat! Kode Invoice: ' . $transaksi->kode_invoice);
} catch (\Exception $e) {
DB::rollBack();
return redirect()->back()->with('error', 'Terjadi kesalahan saat memproses transaksi: ' . $e->getMessage());
}
}
/**
* Helper untuk menghitung subtotal belanjaan dari session.
*/
private function hitungSubtotal($cart)
{
$total = 0;
foreach($cart as $id => $details) {
$total += $details['price'] * $details['quantity'];
}
return $total;
}
}

View File

@ -0,0 +1,39 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
class PembeliSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$data = [
[
'nama_lengkap' => 'Andi Pembeli',
'username' => 'andi_beli',
'password' => Hash::make('password123'),
'no_hp' => '081298765432',
'alamat' => 'Jl. Merdeka No. 45, Kota Sejahtera',
'created_at' => now(),
'updated_at' => now(),
],
[
'nama_lengkap' => 'Rina Suka Sayur',
'username' => 'rina_sayur',
'password' => Hash::make('password123'),
'no_hp' => '085612345678',
'alamat' => 'Perumahan Griya Asri Blok B2, Desa Sukamaju',
'created_at' => now(),
'updated_at' => now(),
],
];
DB::table('pembelis')->insert($data);
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,138 +0,0 @@
.nice-select {
-webkit-tap-highlight-color: transparent;
background-color: #fff;
border-radius: 5px;
border: solid 1px #e8e8e8;
box-sizing: border-box;
clear: both;
cursor: pointer;
display: block;
float: left;
font-family: inherit;
font-size: 14px;
font-weight: normal;
height: 42px;
line-height: 40px;
outline: none;
padding-left: 18px;
padding-right: 30px;
position: relative;
text-align: left !important;
-webkit-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
white-space: nowrap;
width: auto; }
.nice-select:hover {
border-color: #dbdbdb; }
.nice-select:active, .nice-select.open, .nice-select:focus {
border-color: #999; }
.nice-select:after {
border-bottom: 2px solid #999;
border-right: 2px solid #999;
content: '';
display: block;
height: 5px;
margin-top: -4px;
pointer-events: none;
position: absolute;
right: 12px;
top: 50%;
-webkit-transform-origin: 66% 66%;
-ms-transform-origin: 66% 66%;
transform-origin: 66% 66%;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
-webkit-transition: all 0.15s ease-in-out;
transition: all 0.15s ease-in-out;
width: 5px; }
.nice-select.open:after {
-webkit-transform: rotate(-135deg);
-ms-transform: rotate(-135deg);
transform: rotate(-135deg); }
.nice-select.open .list {
opacity: 1;
pointer-events: auto;
-webkit-transform: scale(1) translateY(0);
-ms-transform: scale(1) translateY(0);
transform: scale(1) translateY(0); }
.nice-select.disabled {
border-color: #ededed;
color: #999;
pointer-events: none; }
.nice-select.disabled:after {
border-color: #cccccc; }
.nice-select.wide {
width: 100%; }
.nice-select.wide .list {
left: 0 !important;
right: 0 !important; }
.nice-select.right {
float: right; }
.nice-select.right .list {
left: auto;
right: 0; }
.nice-select.small {
font-size: 12px;
height: 36px;
line-height: 34px; }
.nice-select.small:after {
height: 4px;
width: 4px; }
.nice-select.small .option {
line-height: 34px;
min-height: 34px; }
.nice-select .list {
background-color: #fff;
border-radius: 5px;
box-shadow: 0 0 0 1px rgba(68, 68, 68, 0.11);
box-sizing: border-box;
margin-top: 4px;
opacity: 0;
overflow: hidden;
padding: 0;
pointer-events: none;
position: absolute;
top: 100%;
left: 0;
-webkit-transform-origin: 50% 0;
-ms-transform-origin: 50% 0;
transform-origin: 50% 0;
-webkit-transform: scale(0.75) translateY(-21px);
-ms-transform: scale(0.75) translateY(-21px);
transform: scale(0.75) translateY(-21px);
-webkit-transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out;
transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out;
z-index: 9; }
.nice-select .list:hover .option:not(:hover) {
background-color: transparent !important; }
.nice-select .option {
cursor: pointer;
font-weight: 400;
line-height: 40px;
list-style: none;
min-height: 40px;
outline: none;
padding-left: 18px;
padding-right: 29px;
text-align: left;
-webkit-transition: all 0.2s;
transition: all 0.2s; }
.nice-select .option:hover, .nice-select .option.focus, .nice-select .option.selected.focus {
background-color: #f6f6f6; }
.nice-select .option.selected {
font-weight: bold; }
.nice-select .option.disabled {
background-color: transparent;
color: #999;
cursor: default; }
.no-csspointerevents .nice-select .list {
display: none; }
.no-csspointerevents .nice-select.open .list {
display: block; }

View File

@ -1,6 +0,0 @@
/**
* Owl Carousel v2.3.4
* Copyright 2013-2018 David Deutsch
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
*/
.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}

View File

@ -1,5 +0,0 @@
/*!
* SlickNav Responsive Mobile Menu v1.0.10
* (c) 2016 Josh Cope
* licensed under MIT
*/.slicknav_btn,.slicknav_nav .slicknav_item{cursor:pointer}.slicknav_menu,.slicknav_menu *{box-sizing:border-box}.slicknav_btn{position:relative;display:block;vertical-align:middle;float:right;padding:.438em .625em;line-height:1.125em}.slicknav_btn .slicknav_icon-bar+.slicknav_icon-bar{margin-top:.188em}.slicknav_menu .slicknav_menutxt{display:block;line-height:1.188em;float:left;color:#fff;font-weight:700;text-shadow:0 1px 3px #000}.slicknav_menu .slicknav_icon{float:left;width:1.125em;height:.875em;margin:.188em 0 0 .438em}.slicknav_menu .slicknav_icon:before{background:0 0;width:1.125em;height:.875em;display:block;content:"";position:absolute}.slicknav_menu .slicknav_no-text{margin:0}.slicknav_menu .slicknav_icon-bar{display:block;width:1.125em;height:.125em;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,.25);box-shadow:0 1px 0 rgba(0,0,0,.25)}.slicknav_menu:after,.slicknav_menu:before{content:" ";display:table}.slicknav_menu:after{clear:both}.slicknav_nav li,.slicknav_nav ul{display:block}.slicknav_nav .slicknav_arrow{font-size:.8em;margin:0 0 0 .4em}.slicknav_nav .slicknav_item a{display:inline}.slicknav_nav .slicknav_row,.slicknav_nav a{display:block}.slicknav_nav .slicknav_parent-link a{display:inline}.slicknav_menu{*zoom:1;font-size:16px;background:#4c4c4c;padding:5px}.slicknav_nav,.slicknav_nav ul{list-style:none;overflow:hidden;padding:0}.slicknav_menu .slicknav_icon-bar{background-color:#fff}.slicknav_btn{margin:5px 5px 6px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,.75);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background-color:#222}.slicknav_nav{clear:both;color:#fff;margin:0;font-size:.875em}.slicknav_nav ul{margin:0 0 0 20px}.slicknav_nav .slicknav_row,.slicknav_nav a{padding:5px 10px;margin:2px 5px}.slicknav_nav .slicknav_row:hover{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;background:#ccc;color:#fff}.slicknav_nav a{text-decoration:none;color:#fff}.slicknav_nav a:hover{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;background:#ccc;color:#222}.slicknav_nav .slicknav_txtnode{margin-left:15px}.slicknav_nav .slicknav_item a,.slicknav_nav .slicknav_parent-link a{padding:0;margin:0}.slicknav_brand{float:left;color:#fff;font-size:18px;line-height:30px;padding:7px 12px;height:44px}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 271 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 313 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 516 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

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