Compare commits

..

10 Commits

Author SHA1 Message Date
88b4725a69 . 2025-06-09 13:25:59 +05:45
793f6ec7da blogs 2025-06-06 17:53:01 +05:45
9ceb854168 testimonial done 2025-06-05 17:21:28 +05:45
27d26848e2 about done 2025-06-05 16:05:24 +05:45
01785b7bb9 services done 2025-06-05 15:19:12 +05:45
18e5f8f173 preparations done 2025-06-05 10:53:57 +05:45
b3e543863a sliders done 2025-06-04 17:37:14 +05:45
f9a589c05f :3 2025-06-03 12:40:13 +05:45
50c804d445 request classes 2025-05-08 15:47:58 +05:45
ea35db2164 fixed logo 2025-05-08 13:03:09 +05:45
455 changed files with 37305 additions and 70 deletions

View File

View File

@@ -0,0 +1,82 @@
<?php
namespace App\Http\Controllers;
use App\Models\About;
use Illuminate\Http\Request;
class AboutController extends Controller
{
// Show all blocks
public function index()
{
$abouts = About::orderBy('display_order')->get();
return view('abouts.index', compact('abouts'));
}
// Show form to create new block
public function create()
{
return view('abouts.create');
}
public function show($id)
{
$about = About::findOrFail($id);
return view('abouts.show', compact('about'));
}
// Store new block to DB
public function store(Request $request)
{
$data = $this->validateData($request);
About::create($data);
return redirect()->route('abouts.index')->with('success', 'Block created successfully.');
}
// Show form to edit a block
public function edit($id)
{
$about = About::findOrFail($id);
return view('abouts.edit', compact('about'));
}
// Update existing block
public function update(Request $request, $id)
{
$about = About::findOrFail($id);
$data = $this->validateData($request);
$about->update($data);
return redirect()->route('abouts.index')->with('success', 'Block updated successfully.');
}
// Delete a block
public function destroy($id)
{
$about = About::findOrFail($id);
$about->delete();
return redirect()->route('abouts.index')->with('success', 'Block deleted successfully.');
}
// Validation rules
protected function validateData(Request $request)
{
return $request->validate([
'title' => 'nullable|string|max:255',
'description' => 'nullable|string',
'icon_class' => 'nullable|string|max:255',
'button_text' => 'nullable|string|max:100',
'button_url' => 'nullable|string|max:255',
'image' => 'nullable|image|max:2048', // max 2MB image upload
'display_order' => 'nullable|integer',
'extra_classes' => 'nullable|string|max:255',
]);
}
}

View File

@@ -0,0 +1,145 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Blog;
use Illuminate\Support\Facades\Storage;
class BlogController extends Controller
{
public function index()
{
$blogs = Blog::orderBy('display_order')->get();
return view('blogs.index', compact('blogs'));
}
public function create()
{
return view('blogs.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required',
'thumbnail' => 'required|image|mimes:jpeg,png,jpg,webp',
'banner' => 'nullable|image|mimes:jpeg,png,jpg,webp',
'subtitle1' => 'nullable|string',
'description1' => 'nullable|string',
'subtitle2' => 'nullable|string',
'description2' => 'nullable|string',
'image' => 'nullable|image|mimes:jpeg,png,jpg,webp',
'button_text' => 'required|string',
'button_url' => 'nullable|string',
'display_order' => 'nullable|integer',
'is_published' => 'nullable|boolean',
]);
if ($request->hasFile('thumbnail')) {
$validated['thumbnail'] = $request->file('thumbnail')->store('blogs/thumbnails', 'public');
}
if ($request->hasFile('banner')) {
$validated['banner'] = $request->file('banner')->store('blogs/banners', 'public');
}
if ($request->hasFile('image')) {
$validated['image'] = $request->file('image')->store('blogs/images', 'public');
}
$validated['is_published'] = $request->has('is_published'); // checkbox handling
Blog::create($validated);
return redirect()->route('blogs.index')->with('success', 'Blog created successfully');
}
public function show($id)
{
$blog = Blog::findOrFail($id);
return view('blogs.show', compact('blog'));
}
public function edit($id)
{
$blog = Blog::findOrFail($id);
return view('blogs.edit', compact('blog'));
}
public function update(Request $request, Blog $blog)
{
$validated = $request->validate([
'title' => 'required|string',
'thumbnail' => 'required|image|mimes:jpeg,png,jpg,webp',
'banner' => 'nullable|image|mimes:jpeg,png,jpg,webp',
'subtitle1' => 'nullable|string',
'description1' => 'nullable|string',
'subtitle2' => 'nullable|string',
'description2' => 'nullable|string',
'image' => 'nullable|image|mimes:jpeg,png,jpg,webp',
'button_text' => 'required|string',
'button_url' => 'nullable|string',
'display_order' => 'nullable|integer',
'is_published' => 'nullable|boolean',
]);
if ($request->hasFile('thumbnail')) {
if ($blog->thumbnail && Storage::disk('public')->exists($blog->thumbnail)) {
Storage::disk('public')->delete($blog->thumbnail);
}
$validated['thumbnail'] = $request->file('thumbnail')->store('blogs/thumbnails', 'public');
}
// Handle banner file
if ($request->hasFile('banner')) {
if ($blog->banner && Storage::disk('public')->exists($blog->banner)) {
Storage::disk('public')->delete($blog->banner);
}
$validated['banner'] = $request->file('banner')->store('blogs/banners', 'public');
}
// Handle image file
if ($request->hasFile('image')) {
if ($blog->image && Storage::disk('public')->exists($blog->image)) {
Storage::disk('public')->delete($blog->image);
}
$validated['image'] = $request->file('image')->store('blogs/images', 'public');
}
$validated['is_published'] = $request->has('is_published'); // checkbox handling
$blog->update($validated);
return redirect()->route('blogs.index')->with('success', 'Blog updated successfully');
}
public function destroy($id)
{
$blog = Blog::findOrFail($id);
if ($blog->image && Storage::disk('public')->exists($blog->image)) {
Storage::disk('public')->delete($blog->image);
}
$blog->delete();
return redirect()->route('blogs.index')->with('success', 'Blog deleted successfully');
}
public function togglePublish(Request $request, $id)
{
$blog = Blog::findOrFail($id);
$blog->is_published = $request->input('is_published'); // input, not has()
$blog->save();
return response()->json(['success' => true, 'message' => 'Publish status updated.']);
}
public function updateOrder(Request $request)
{
foreach ($request->order as $item) {
Blog::where('id', $item['id'])->update(['display_order' => $item['display_order']]);
}
return response()->json(['status' => 'success']);
}
}

View File

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use App\Models\Company;
use Illuminate\Http\Request;
use App\Http\Requests\CompanyRequest;
class CompanyController extends Controller
{
@@ -18,22 +19,21 @@ class CompanyController extends Controller
return view('companies.create');
}
public function store(Request $request)
public function store(CompanyRequest $request)
{
$request->validate([
'name' => 'required',
'email' => 'nullable|email',
'logo' => 'nullable|image|dimensions:min_width=100,min_height=100',
'website' => 'nullable|url',
]);
// Store the validated data from the form
$validatedData = $request->validated();
// Handle the logo upload if it exists
if ($request->hasFile('logo')) {
$path = $request->file('logo')->store('public/logos');
$request->merge(['logo' => $path]);
$logoPath = $request->file('logo')->store('logos', 'public');
$validatedData['logo'] = $logoPath;
}
Company::create($request->all());
// Create the company with the validated data
$company = Company::create($validatedData);
// Redirect or return a response
return redirect()->route('companies.index')->with('success', 'Company created successfully.');
}
@@ -47,22 +47,21 @@ class CompanyController extends Controller
return view('companies.edit', compact('company'));
}
public function update(Request $request, Company $company)
public function update(CompanyRequest $request, Company $company)
{
$request->validate([
'name' => 'required',
'email' => 'nullable|email',
'logo' => 'nullable|image|dimensions:min_width=100,min_height=100',
'website' => 'nullable|url',
]);
// Store the validated data from the form
$validatedData = $request->validated();
// Handle the logo upload if it exists
if ($request->hasFile('logo')) {
$path = $request->file('logo')->store('public/logos');
$company->logo = $path;
$logoPath = $request->file('logo')->store('logos', 'public');
$validatedData['logo'] = $logoPath;
}
$company->update($request->all());
// Update the company with the validated data
$company->update($validatedData);
// Redirect or return a response
return redirect()->route('companies.index')->with('success', 'Company updated successfully.');
}

View File

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use App\Models\Employee;
use App\Models\Company;
use Illuminate\Http\Request;
use App\Http\Requests\EmployeeRequest;
class EmployeeController extends Controller
{
@@ -20,19 +21,18 @@ class EmployeeController extends Controller
return view('employees.create', compact('companies'));
}
public function store(Request $request)
public function store(EmployeeRequest $request)
{
$request->validate([
'first_name' => 'required',
'last_name' => 'required',
'company_id' => 'required|exists:companies,id',
'email' => 'nullable|email',
'phone' => 'nullable|string',
]);
Employee::create($request->all());
return redirect()->route('employees.index');
$employee = new Employee();
$employee->first_name = $request->first_name;
$employee->last_name = $request->last_name;
$employee->company_id = $request->company_id;
$employee->email = $request->email;
$employee->phone = $request->phone;
$employee->save();
return redirect()->route('employees.index')->with('success', 'Employee created successfully!');
}
public function show(Employee $employee)

View File

@@ -0,0 +1,61 @@
<?php
// app/Http/Controllers/FrontendController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Post;
use App\Models\Slider;
use App\Models\Preparation;
use App\Models\Service;
use App\Models\About;
use App\Models\Testimonial;
use App\Models\Blog;
class FrontendController extends Controller
{
public function homePage()
{
$data['sliderItems'] = Slider::all();
$data['preparations'] = Preparation::all();
$data['services'] = Service::all();
$data['abouts'] = About::all();
// $data['contact'] = Contact::first();
$data['testimonials'] = Testimonial::all();
// $data['partners'] = Partner::all();
// $data['passers'] = Passer::all();
$data['blogs'] = Blog::where('is_published', true)
->orderBy('display_order', 'asc')
->take(3)
->get();
return view('frontend.home',$data);
}
public function aboutPage()
{
$posts = Post::all();
return view('frontend.about', compact('posts'));
}
public function blogDetails($id)
{
$blog = Blog::findOrFail($id);
$otherBlogs = Blog::where('id', '!=', $id)->latest()->take(5)->get(); // Latest 5 except current
return view('frontend.blog-details', compact('blog', 'otherBlogs'));
}
}
/*
slider
preparation
service
about
contact
testimonial
partners
passers
blog
*/

View File

@@ -0,0 +1,62 @@
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index()
{
$posts = Post::paginate(10); // paginated, no dumb errors
return view('posts.index', compact('posts'));
}
public function create()
{
return view('posts.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|max:255',
'content' => 'required|string',
]);
Post::create($validated);
return redirect()->route('posts.index')->with('success', 'Post created successfully.');
}
public function show(Post $post)
{
return view('posts.show', compact('post'));
}
public function edit(Post $post)
{
return view('posts.edit', compact('post'));
}
public function update(Request $request, Post $post)
{
$validated = $request->validate([
'title' => 'required|string|max:255',
'content' => 'required|string',
]);
$post->update($validated);
return redirect()->route('posts.index')->with('success', 'Post updated successfully.');
}
public function destroy(Post $post)
{
$post->delete();
return redirect()->route('posts.index')->with('success', 'Post deleted successfully.');
}
}

View File

@@ -0,0 +1,59 @@
<?php
namespace App\Http\Controllers;
use App\Models\Preparation;
use Illuminate\Http\Request;
class PreparationController extends Controller
{
public function index()
{
$preparations = Preparation::all();
return view('preparations.index', compact('preparations'));
}
public function create()
{
return view('preparations.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|max:225',
'content' => 'required|string',
]);
Preparation::create($validated);
return redirect()->route('preparations.index')->with('success', 'Preparation created successfully');
}
public function show(Preparation $preparation)
{
return view('preparations.show', compact('preparation'));
}
public function edit(Preparation $preparation)
{
return view('preparations.edit', compact('preparation'));
}
public function update(Request $request, Preparation $preparation)
{
$validated = $request->validate([
'title' => 'required|string|max:225',
'content' => 'required|string',
]);
$preparation->update($validated);
return redirect()->route('preparations.index')->with('success', 'Preparation updated successfully');
}
public function destroy(Preparation $preparation)
{
$preparation->delete();
return redirect()->route('preparations.index')->with('success', 'Preparation deleted successfully');
}
}

View File

@@ -0,0 +1,81 @@
<?php
namespace App\Http\Controllers;
use App\Models\Service;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class ServiceController extends Controller
{
public function index()
{
$services = Service::all();
return view('services.index', compact('services'));
}
public function create()
{
return view('services.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|max:225',
'description' => 'required|string',
'button_url' => 'nullable|url',
'image' => 'nullable|image|mimes:jpeg,png,jpg,webp|max:2048',
]);
if ($request->hasFile('image')) {
$validated['image'] = $request->file('image')->store('services', 'public');
}
Service::create($validated);
return redirect()->route('services.index')->with('success', 'Service created successfully');
}
public function show(Service $service)
{
return view('services.show', compact('service'));
}
public function edit(Service $service)
{
return view('services.edit', compact('service'));
}
public function update(Request $request, Service $service)
{
$validated = $request->validate([
'title' => 'required|string|max:225',
'description' => 'required|string',
'button_url' => 'nullable|string',
'image' => 'nullable|image|mimes:jpeg,png,jpg,webp|max:2048',
]);
if ($request->hasFile('image')) {
// Delete old image
if ($service->image) {
Storage::disk('public')->delete($service->image);
}
$validated['image'] = $request->file('image')->store('services', 'public');
}
$service->update($validated);
return redirect()->route('services.index')->with('success', 'Service updated successfully');
}
public function destroy(Service $service)
{
if ($service->image) {
Storage::disk('public')->delete($service->image);
}
$service->delete();
return redirect()->route('services.index')->with('success', 'Service deleted successfully');
}
}

View File

@@ -0,0 +1,92 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Slider;
class SliderController extends Controller
{
public function index()
{
$sliders = Slider::all();
return view('sliders.index', compact('sliders'));
}
public function create()
{
return view('sliders.create');
}
public function store(Request $request)
{
if ($request->hasFile('logo')) {
$logoPath = $request->file('logo')->store('logos', 'public');
$validatedData['logo'] = $logoPath;
}
// $imagePath = $request->file('image')->store('sliders', 'public');
$slider = Slider::create([
'title' => $request->title,
'subtitle' => $request->subtitle,
'description' => $request->description,
// 'image' => hasFile('image'),
'button_text' => $request->button_text,
'button_url' => $request->button_url,
]);
return redirect()->route('sliders.index')->with('success', 'Slider created successfully');
}
public function destroy($id)
{
$slider = Slider::findOrFail($id);
// Optionally delete the image from storage
if ($slider->image && \Storage::disk('public')->exists($slider->image)) {
\Storage::disk('public')->delete($slider->image);
}
$slider->delete();
return redirect()->route('sliders.index')->with('success', 'Slider deleted successfully');
}
public function show($id)
{
$slider = Slider::findOrFail($id);
return view('sliders.show', compact('slider'));
}
public function edit($id)
{
$slider = Slider::findOrFail($id);
return view('sliders.edit', compact('slider'));
}
public function update(Request $request, Slider $slider)
{
// dd($slider->toArray());
$validated = $request->validate([
'title' => 'nullable|string|max:255',
'subtitle' => 'nullable|string|max:255',
'description' => 'nullable|string',
'button_text' => 'nullable|string|max:255',
'button_url' => 'nullable|string|max:255',
'image' => 'nullable|image',
]);
// If image is uploaded
if ($request->hasFile('image')) {
// Delete old image if exists
if ($slider->image && \Storage::disk('public')->exists($slider->image)) {
\Storage::disk('public')->delete($slider->image);
}
$imagePath = $request->file('image')->store('sliders', 'public');
$validated['image'] = $imagePath;
}
$slider->update($validated);
return redirect()->route('sliders.index')->with('success', 'Slider updated successfully');
}
}

View File

@@ -0,0 +1,88 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Testimonial;
class TestimonialController extends Controller
{
public function index()
{
$testimonials = Testimonial::all();
return view('testimonials.index', compact('testimonials'));
}
public function create()
{
return view('testimonials.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:225',
'message' => 'required|string',
'image' => 'nullable|image|mimes:jpeg,png,jpg,webp|max:2048',
]);
if ($request->hasFile('image')) {
$validated['image'] = $request->file('image')->store('testimonials', 'public');
}
Testimonial::create($validated);
return redirect()->route('testimonials.index')->with('success', 'Testimonials created successfully');
}
public function destroy($id)
{
$testimonial = Testimonial::findOrFail($id);
// Optionally delete the image from storage
if ($testimonial->image && \Storage::disk('public')->exists($testimonial->image)) {
\Storage::disk('public')->delete($testimonial->image);
}
$testimonial->delete();
return redirect()->route('testimonials.index')->with('success', 'testimonial deleted successfully');
}
public function show($id)
{
$testimonial = Testimonial::findOrFail($id);
return view('testimonials.show', compact('testimonial'));
}
public function edit($id)
{
$testimonial = Testimonial::findOrFail($id);
return view('testimonials.edit', compact('testimonial'));
}
public function update(Request $request, testimonial $testimonial)
{
// dd($testimonial->toArray());
$validated = $request->validate([
'name' => 'nullable|string|max:255',
'message' => 'nullable|string',
'image' => 'nullable|image',
]);
// If image is uploaded
if ($request->hasFile('image')) {
// Delete old image if exists
if ($testimonial->image && \Storage::disk('public')->exists($testimonial->image)) {
\Storage::disk('public')->delete($testimonial->image);
}
$imagePath = $request->file('image')->store('testimonials', 'public');
$validated['image'] = $imagePath;
}
$testimonial->update($validated);
return redirect()->route('testimonials.index')->with('success', 'testimonial updated successfully');
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class CompanyRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true; // Change this to true to allow validation
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules()
{
return [
'name' => 'required|string|max:255', // Name is required
'email' => 'nullable|email|max:255', // Email is optional but must be a valid email if provided
'logo' => 'nullable|image|dimensions:min_width=100,min_height=100', // Logo must be an image and at least 100x100 pixels
'website' => 'nullable|url|max:255', // Website is optional but must be a valid URL if provided
];
}
}

View File

@@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class EmployeeRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules()
{
return [
'first_name' => 'required|string|max:255', // First name is required and a string
'last_name' => 'required|string|max:255', // Last name is required and a string
'company_id' => 'required|exists:companies,id', // Company should be valid
'email' => 'nullable|email|max:255', // Email is optional but must be a valid email if provided
'phone' => 'nullable|string|max:20', // Phone is optional and can be a string up to 20 characters
];
}
}

View File

@@ -16,4 +16,9 @@ class Company extends Model
'logo',
'website',
];
public function employees()
{
return $this->hasMany(Employee::class);
}
}

View File

@@ -17,4 +17,9 @@ class Employee extends Model
'email',
'phone',
];
public function company()
{
return $this->belongsTo(Company::class);
}
}

13
app/Models/Post.php Normal file
View File

@@ -0,0 +1,13 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
protected $fillable = ['title', 'content'];
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Preparation extends Model
{
protected $fillable = ['title', 'content'];
}

10
app/Models/Service.php Normal file
View File

@@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Service extends Model
{
protected $fillable = ['title', 'description', 'image', 'button_url'];
}

14
app/Models/Slider.php Normal file
View File

@@ -0,0 +1,14 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Slider extends Model
{
use HasFactory;
protected $fillable = ['title', 'subtitle', 'description', 'image', 'button_text', 'button_url'];
}

22
app/Models/about.php Normal file
View File

@@ -0,0 +1,22 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class about extends Model
{
use HasFactory;
protected $fillable = [
'title',
'description',
'icon_class',
'button_text',
'button_url',
'image',
'display_order',
'extra_classes'
];
//
}

23
app/Models/blog.php Normal file
View File

@@ -0,0 +1,23 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class blog extends Model
{
protected $fillable =[
'title',
'thumbnail',
'banner',
'subtitle1',
'description1',
'subtitle2',
'description2',
'image',
'button_url',
'button_text',
'display_order',
'is_published'
];
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class testimonial extends Model
{
protected $fillable = ['name', 'message', 'image'];
}

View File

@@ -1,11 +0,0 @@
@extends('layouts.app')
@section('content')
<div class="container mt-5">
<h1>Dashboard</h1>
<div class="d-flex gap-3 mt-3">
<a href="{{ route('companies.index') }}" class="btn btn-primary">Manage Companies</a>
<a href="{{ route('employees.index') }}" class="btn btn-secondary">Manage Employees</a>
</div>
</div>
@endsection

View File

@@ -1,22 +0,0 @@
<?php
use App\Http\Controllers\CompanyController;
use App\Http\Controllers\EmployeeController;
use App\Http\Controllers\Auth\AuthenticatedSessionController;
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');
Route::middleware('auth')->group(function () {
Route::resource('companies', CompanyController::class);
Route::resource('employees', EmployeeController::class);
});
Route::post('/logout', [AuthenticatedSessionController::class, 'destroy'])->name('logout');
require __DIR__.'/auth.php';

View File

@@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('posts');
}
};

View File

@@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('sliders', function (Blueprint $table) {
$table->id();
$table->string('title')->nullable();
$table->string('subtitle')->nullable();
$table->string('description')->nullable();
$table->string('image')->nullable();
$table->string('button_text')->nullable();
$table->string('button_url')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('sliders');
}
};

View File

@@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('preparations', function (Blueprint $table) {
$table->id();
$table->string('title')->nullable();
$table->string('content')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('preparations');
}
};

View File

@@ -0,0 +1,27 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up()
{
Schema::table('preparations', function (Blueprint $table) {
$table->text('content')->change(); // or longText
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
//
}
};

View File

@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('services', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('description');
$table->string('image')->nullable();
$table->string('button_url')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('services');
}
};

View File

@@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('abouts', function (Blueprint $table) {
$table->id();
$table->string('title')->nullable();
$table->text('description')->nullable();
$table->string('icon_class')->nullable();
$table->string('button_text')->nullable();
$table->string('button_url')->nullable();
$table->string('image')->nullable();
$table->integer('display_order')->nullable();
$table->string('extra_classes')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('abouts');
}
};

View File

@@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('testimonials', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('message');
$table->string('image');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('testimonials');
}
};

View File

@@ -0,0 +1,40 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('blogs', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('thumbnail');
$table->string('banner')->nullable();
$table->string('subtitle1')->nullable();
$table->text('description1')->nullable();
$table->string('subtitle2')->nullable();
$table->text('description2')->nullable();
$table->string('image')->nullable();
$table->string('button_text');
$table->string('button_url')->nullable();
$table->integer('display_order')->nullable();
$table->boolean('is_published')->default(false);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists(table: 'blog');
}
};

View File

@@ -1,5 +1,5 @@
{
"name": "crm-panel",
"name": "ccms",
"lockfileVersion": 3,
"requires": true,
"packages": {

3322
public/assets/css/animate.css vendored Normal file

File diff suppressed because it is too large Load Diff

11731
public/assets/css/bootstrap.min.css vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,206 @@
@font-face {
font-family: "flaticon";
src: url("../fonts/flaticon-92c18bb4a83ca25255a20027c5427312.ttf") format("truetype"),
url("../fonts/flaticon-92c18bb4a83ca25255a20027c5427312.woff") format("woff"),
url("../fonts/flaticon-92c18bb4a83ca25255a20027c5427312.woff2") format("woff2"),
url("../fonts/flaticon-92c18bb4a83ca25255a20027c5427312.eot#iefix") format("embedded-opentype"),
url("../fonts/flaticon-92c18bb4a83ca25255a20027c5427312.svg#flaticon") format("svg");
}
i[class^="flaticon-"]:before, i[class*=" flaticon-"]:before {
font-family: flaticon !important;
font-style: normal;
font-weight: normal !important;
font-variant: normal;
text-transform: none;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.flaticon-cardiovascular:before {
content: "\f101";
}
.flaticon-map:before {
content: "\f102";
}
.flaticon-heart-beat:before {
content: "\f103";
}
.flaticon-send:before {
content: "\f104";
}
.flaticon-first-aid-kit:before {
content: "\f105";
}
.flaticon-heart:before {
content: "\f106";
}
.flaticon-support:before {
content: "\f107";
}
.flaticon-cardiology:before {
content: "\f108";
}
.flaticon-healthcare:before {
content: "\f109";
}
.flaticon-cardiogram:before {
content: "\f10a";
}
.flaticon-call:before {
content: "\f10b";
}
.flaticon-shopping-cart:before {
content: "\f10c";
}
.flaticon-search:before {
content: "\f10d";
}
.flaticon-exit:before {
content: "\f10e";
}
.flaticon-microsurgery:before {
content: "\f10f";
}
.flaticon-phone-call:before {
content: "\f110";
}
.flaticon-email:before {
content: "\f111";
}
.flaticon-clock:before {
content: "\f112";
}
.flaticon-share:before {
content: "\f113";
}
.flaticon-chat:before {
content: "\f114";
}
.flaticon-pdf:before {
content: "\f115";
}
.flaticon-arrow-down:before {
content: "\f116";
}
.flaticon-straight-quotes:before {
content: "\f117";
}
.flaticon-veterinarian:before {
content: "\f118";
}
.flaticon-hospital:before {
content: "\f119";
}
.flaticon-heart-disease:before {
content: "\f11a";
}
.flaticon-cardiology-2:before {
content: "\f11b";
}
.flaticon-diagnosis:before {
content: "\f11c";
}
.flaticon-arrow-pointing-to-right:before {
content: "\f11d";
}
.flaticon-map-1:before {
content: "\f11e";
}
.flaticon-heart-2:before {
content: "\f11f";
}
.flaticon-heart-3:before {
content: "\f120";
}
.flaticon-organ-transplantation:before {
content: "\f121";
}
.flaticon-heart-attack:before {
content: "\f122";
}
.flaticon-heart-4:before {
content: "\f123";
}
.flaticon-vaccine:before {
content: "\f124";
}
.flaticon-heart-5:before {
content: "\f125";
}
.flaticon-heart-6:before {
content: "\f126";
}
.flaticon-cardiologist:before {
content: "\f127";
}
.flaticon-health-care:before {
content: "\f128";
}
.flaticon-heart-7:before {
content: "\f129";
}
.flaticon-defribillator:before {
content: "\f12a";
}
.flaticon-heart-8:before {
content: "\f12b";
}
.flaticon-emergency-call:before {
content: "\f12c";
}
.flaticon-awards:before {
content: "\f12d";
}
.flaticon-ecg-reading:before {
content: "\f12e";
}
.flaticon-patient:before {
content: "\f12f";
}
.flaticon-patient-1:before {
content: "\f130";
}
.flaticon-medical-insurance:before {
content: "\f131";
}
.flaticon-search-1:before {
content: "\f132";
}
.flaticon-placeholder:before {
content: "\f133";
}
.flaticon-healthcare-2:before {
content: "\f134";
}
.flaticon-file:before {
content: "\f135";
}
.flaticon-tick-mark:before {
content: "\f136";
}
.flaticon-doctor:before {
content: "\f137";
}
.flaticon-doctor-1:before {
content: "\f138";
}
.flaticon-right-arrow:before {
content: "\f139";
}
.flaticon-share-1:before {
content: "\f13a";
}
.flaticon-left-quote:before {
content: "\f13b";
}
.flaticon-comment:before {
content: "\f13c";
}
.flaticon-phone-call-1:before {
content: "\f13d";
}
.flaticon-bubble-chat:before {
content: "\f13e";
}

2337
public/assets/css/font-awesome.css vendored Normal file

File diff suppressed because it is too large Load Diff

72
public/assets/css/fontello.css vendored Normal file
View File

@@ -0,0 +1,72 @@
@font-face {
font-family: 'fontello';
src: url('../fonts/fontello-51113876.eot');
src: url('../fonts/fontello-51113876.eot#iefix') format('embedded-opentype'),
url('../fonts/fontello-51113876.woff2') format('woff2'),
url('../fonts/fontello-51113876.woff') format('woff'),
url('../fonts/fontello-51113876.ttf') format('truetype'),
url('../fonts/fontello-51113876.svg#fontello') format('svg');
font-weight: normal;
font-style: normal;
}
/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
/*
@media screen and (-webkit-min-device-pixel-ratio:0) {
@font-face {
font-family: 'fontello';
src: url('https://themetechmount.com/html/dezily/font/fontello.svg?51113876#fontello') format('svg');
}
}
*/
[class^="icon-"]:before, [class*=" icon-"]:before {
font-family: "fontello";
font-style: normal;
font-weight: normal;
speak: never;
display: inline-block;
text-decoration: inherit;
width: 1em;
margin-right: .2em;
text-align: center;
/* opacity: .8; */
/* For safety - reset parent styles, that can break glyph codes*/
font-variant: normal;
text-transform: none;
/* fix buttons height, for twitter bootstrap */
line-height: 1em;
/* Animation center compensation - margins should be symmetric */
/* remove if not needed */
margin-left: .2em;
/* you can be more comfortable with increased icons size */
/* font-size: 120%; */
/* Font smoothing. That was taken from TWBS */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
/* Uncomment for 3D effect */
/* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
}
.icon-ok:before { content: '\e800'; } /* '' */
.icon-left-dir:before { content: '\e801'; } /* '' */
.icon-logout:before { content: '\e802'; } /* '' */
.icon-right-dir:before { content: '\e803'; } /* '' */
.icon-quote-left-alt:before { content: '\e804'; } /* '' */
.icon-ok-circle:before { content: '\e805'; } /* '' */
.icon-ok-circled:before { content: '\e806'; } /* '' */
.icon-share:before { content: '\e807'; } /* '' */
.icon-phone:before { content: '\e808'; } /* '' */
.icon-mail:before { content: '\e809'; } /* '' */
.icon-plus:before { content: '\e80a'; } /* '' */
.icon-plus-1:before { content: '\e80b'; } /* '' */
.icon-right-open:before { content: '\e80c'; } /* '' */
.icon-left-open:before { content: '\e80d'; } /* '' */
.icon-angle-circled-right:before { content: '\f138'; } /* '' */
.icon-right:before { content: '\f178'; } /* '' */

3772
public/assets/css/main.css Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,399 @@
/* MEGAMENU STYLE
=================================*/
nav.main-menu .mega-menu-item.megamenu-fw {
position: static;
}
nav.main-menu .megamenu-fw .mega-submenu, nav.main-menu .megamenu-content {
width: auto !important;
}
nav.main-menu .megamenu-fw .mega-submenu .row{
margin: 0;
}
nav.main-menu .megamenu-content {
width: 100%;
}
nav.main-menu .megamenu-content .title{
margin: 0;
display: block;
background: rgba(0, 0, 0, 0) none repeat scroll 0 0;
font-weight: 500;
font-size: 14px;
text-transform: capitalize;
padding: 6px 20px;
color: inherit;
border-right: 1px solid transparent;
}
nav.main-menu .mega-menu-item.megamenu-fw .mega-submenu {
left: 0;
right: 0;
}
nav.main-menu ul {
padding: 0px;
margin: 0px;
list-style: none;
}
nav.main-menu ul li {
position: relative;
}
nav.main-menu{
margin-bottom: 0;
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
-o-border-radius: 0px;
border-radius: 0px;
border: none;
z-index: 2;
}
nav.main-menu li ul.mega-submenu {
position: absolute;
display: block;
width: 250px;
opacity: 0.5;
z-index: 2;
border: 0;
top: 50px;
-webkit-transform-origin: top;
transform-origin: top;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
transition: all .5s ease;
-webkit-transition: all .5s ease;
-moz-transition: all 500ms ease;
-o-transition: all 500ms ease;
-ms-transition: all 500ms ease;
background: #fff;
border-radius: 0;
box-shadow: 0 3px 25px 0px rgb(43 52 59 / 10%), 0 0 0 rgb(43 52 59 / 10%) inset;
-webkit-box-shadow: 0 3px 25px 0px rgb(43 52 59 / 10%), 0 0 0 rgb(43 52 59 / 10%) inset;
background-clip: padding-box;
border-top: 3px solid #006836;
-webkit-transition: all 0.2s ease-out;
transition: all 0.5s ease-out;
-moz-transition: all 0.5s ease-out;
-ms-transition: all 0.5s ease-out;
-webkit-box-shadow: 0px 4px 4px 1px rgb(0 0 0 / 20%);
box-shadow: 0px 4px 4px 1px rgb(0 0 0 / 20%);
-webkit-transform: rotateX(-90deg);
transform: rotateX(-90deg);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
}
nav.main-menu ul.menu > li{
z-index: 11;
display: inline-block;
}
nav.main-menu ul.menu li ul > li:not(:first-child) {
border-top: 1px solid;
border-color: var(--base-grey);
}
nav.main-menu ul.menu li ul.mega-submenu li a {
font-size: 14px;
line-height: 24px;
font-weight: 400;
display: block;
padding: 10px 10px 10px 20px;
text-align: left;
color: var(--base-bodyfont-color);
background-color: var(--base-white);
font-family: var(--base-bodyfont);
border-radius: 0;
-webkit-transition: all .3s linear;
transition: all .3s linear;
}
nav.main-menu ul.menu li ul.mega-submenu li a span {
display: inline!important;
padding: 4px 8px;
background: #ff6f00;
color: var(--base-white) !important;
text-shadow: none;
border-radius: 0;
margin-left: 14px;
position: relative;
text-transform: uppercase;
font-size: 11px!important;
font-weight: 500!important;
}
nav.main-menu ul.menu li ul.mega-submenu li a span:before {
right: 100%;
top: 50%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
border-color: var(--base-white);
border-right-color: #ff6f00;
border-width: 5px;
margin-top: -5px;
}
ul.menu-col li a{
color: #6f6f6f;
}
ul.menu-col li a:hover,
ul.menu-col li a:focus{
text-decoration: none;
}
/* Responsive
=================================*/
@media (min-width: 1200px) {
nav.main-menu li.mega-menu-item ul.mega-submenu li ul {
left: 100%;
top: 0;
border-top: 0;
}
nav.main-menu li.mega-menu-item:last-child > ul {
right: 0;
left: auto;
}
nav.main-menu ul.menu > li > a{
display: block;
font-weight: 600;
text-transform: uppercase;
font-size: 14px;
line-height: 26px;
font-family: var(--base-headingfont);
}
nav.main-menu li.mega-menu-item ul.mega-submenu li.mega-menu-item > a.mega-menu-link:before {
font-family: 'FontAwesome';
float: right;
content: "\f105";
margin-top: 0;
}
nav.main-menu ul.mega-submenu.megamenu-content .col-menu{
padding: 0;
width: 240px;
border-right: solid 1px #f0f0f0;
}
nav.main-menu ul.mega-submenu.megamenu-content .col-menu:first-child{
border-left: none;
}
nav.main-menu ul.mega-submenu.megamenu-content .col-menu:last-child{
border-right: none;
}
nav.main-menu ul.mega-submenu.megamenu-content .content ul.menu-col li:last-child a{
border-bottom: unset;
}
nav.main-menu li.mega-menu-item.on ul.mega-submenu.megamenu-content .content{
display: block !important;
height: auto !important;
}
nav.main-menu li.mega-menu-item:hover > ul.mega-submenu {
opacity: 1;
display: block;
visibility: visible;
height: auto;
filter: alpha(opacity=100);
-webkit-transform: rotateX(0);
transform: rotateX(0);
}
header.ttm-header-style-01 .site-navigation nav.main-menu li ul.mega-submenu { top: 82px; }
header.ttm-header-style-02 .site-navigation nav.main-menu li ul.mega-submenu { top: 82px; }
header.ttm-header-style-03 .site-navigation nav.main-menu li ul.mega-submenu { top: 100px; }
}
@media (max-width: 1199px) {
.menubar{
position: absolute;
right: 0;
top: 0;
bottom: 0;
z-index: 9;
}
.menubar-box {
display: block;
width: 30px;
height: 24px;
}
.menubar-inner, .menubar-inner:after, .menubar-inner:before {
position: absolute;
width: 30px;
height: 3px;
transition-timing-function: ease;
transition-duration: .15s;
transition-property: transform;
border-radius: 4px;
background-color: #2f2f2f;
}
.menubar--squeeze .menubar-inner {
top: 50%;
display: block;
margin-top: -2px;
transition-timing-function: cubic-bezier(.55,.055,.675,.19);
transition-duration: .1s;
}
.menubar-inner:after, .menubar-inner:before {
display: block;
content: '';
}
.menubar-inner:after {
bottom: -8px;
}
.menubar-inner:before {
top: -8px;
}
.menubar--squeeze.is-active .menubar-inner {
transition-delay: .14s;
transition-timing-function: cubic-bezier(.215,.61,.355,1);
transform: rotate(45deg);
}
.menubar--squeeze.is-active .menubar-inner:before {
top: 0;
transition: top .1s ease,opacity .1s ease .14s;
opacity: 0;
}
.menubar--squeeze.is-active .menubar-inner:after {
bottom: 0;
transition: bottom .1s ease,transform .1s cubic-bezier(.215,.61,.355,1) .14s;
transform: rotate(-90deg);
}
nav.main-menu{
display: none ;
max-height: 10000px;
position: absolute;
box-shadow: 0 0 10px 0 rgba(0, 43, 92, 0.08);
z-index: 100;
top: 100%;
left: 0;
right: 0;
background-color: var(--base-white);
border-top: 3px solid;
overflow: visible;
}
nav.main-menu.show{
display: block;
max-height: 10000px;
}
nav.main-menu ul.menu, nav.main-menu ul.menu > li{
display: block;
position: relative;
}
nav.main-menu ul.menu > li > a{
display: block;
font-weight: 600;
font-size: 16px;
padding: 15px 15px;
line-height: 20px;
text-align: left;
background-color: var(--base-white);
}
nav.main-menu ul.menu > li {
border-top: solid 1px;
border-color: var(--base-grey);
}
nav.main-menu ul.menu > li:first-child{
border-top: none;
}
nav.main-menu ul.menu li > ul.mega-submenu li a:hover{
background-color: var(--base-white);
}
nav.main-menu li.mega-menu-item a.mega-menu-link:after{
font-family: 'FontAwesome';
content: "\f105";
float: right;
font-size: 16px;
}
nav.main-menu li.mega-menu-item.on > a.mega-menu-link:after{
content: "\f107";
}
nav.main-menu ul.menu-left > li:last-child > ul.mega-submenu{
border-bottom: solid 1px #e0e0e0;
}
nav.main-menu ul.menu li.mega-menu-item ul.mega-submenu{
width: 100%;
background-color: var(--base-white);
float: none;
border: none;
padding: 0 0 0 15px;
-moz-box-shadow: 0px 0px 0px;
-webkit-box-shadow: 0px 0px 0px;
-o-box-shadow: 0px 0px 0px;
box-shadow: 0px 0px 0px;
-moz-border-radius: 0px 0px 0px;
-webkit-border-radius: 0px 0px 0px;
-o-border-radius: 0px 0px 0px;
border-radius: 0px 0px 0px;
}
nav.main-menu ul.menu li ul.mega-submenu li a { padding: 10px 25px; }
nav.main-menu ul.menu li ul.mega-submenu li.active > a { background-color: var(--base-white); }
nav.main-menu ul.menu li.mega-menu-item ul.mega-submenu.active {
position: relative;
visibility: visible;
top: 0;
width: 100%;
opacity: 1;
z-index: 1;
display: contents;
background-color: inherit;
box-shadow: unset;
}
nav.main-menu ul.menu ul.mega-submenu li.mega-menu-item.on > ul.mega-submenu{
display: inline-block;
margin-top: -10px;
}
nav.main-menu .mega-menu-item .megamenu-content .col-menu .title{
padding: 10px 15px 10px 0;
line-height: 24px;
font-size: 14px;
text-transform: none;
font-weight: 500;
letter-spacing: 0px;
margin-bottom: 0;
cursor: pointer;
background-color: transparent;
border-right: 0;
border-bottom: solid 1px #e0e0e0;
}
nav.main-menu .mega-menu-item .megamenu-content .col-menu .title:before{
font-family: 'FontAwesome';
content: "\f105";
float: right;
font-size: 16px;
margin-left: 10px;
position: relative;
right: 0;
}
nav.main-menu .mega-menu-item .megamenu-content .col-menu:last-child .title{
border-bottom: none;
}
nav.main-menu .mega-menu-item .megamenu-content .col-menu.on:last-child .title{
border-bottom: solid 1px #e0e0e0;
}
nav.main-menu .mega-menu-item .megamenu-content .col-menu:last-child ul.menu-col li:last-child a{
border-bottom: none;
}
nav.main-menu .mega-menu-item .megamenu-content .col-menu.on .title:before{
content: "\f107";
}
nav.main-menu .megamenu-content{
padding: 0;
}
nav.main-menu .megamenu-content .col-menu{
padding-bottom: 0;
max-width: 100%;
flex: 100%;
}
nav.main-menu .megamenu-content .title{
cursor: pointer;
display: block;
padding: 10px 15px;
margin-bottom: 0;
font-weight: normal;
}
nav.main-menu .megamenu-content .content{
display: none;
}
nav.main-menu .megamenu-content .content.active{
display: block;
}
}

View File

@@ -0,0 +1,170 @@
div.pp_default .pp_top,div.pp_default .pp_top .pp_middle,div.pp_default .pp_top .pp_left,div.pp_default .pp_top .pp_right,div.pp_default .pp_bottom,div.pp_default .pp_bottom .pp_left,div.pp_default .pp_bottom .pp_middle,div.pp_default .pp_bottom .pp_right{height:13px}
div.pp_default .pp_top .pp_left{background:url("../images/prettyPhoto/default/sprite.png") -78px -93px no-repeat}
div.pp_default .pp_top .pp_middle{background:url("../images/prettyPhoto/default/sprite_x.png") top left repeat-x}
div.pp_default .pp_top .pp_right{background:url("../images/prettyPhoto/default/sprite.png") -112px -93px no-repeat}
div.pp_default .pp_content .ppt{color:#f8f8f8}
div.pp_default .pp_content_container .pp_left{background:url("../images/prettyPhoto/default/sprite_y.png") -7px 0 repeat-y;padding-left:13px}
div.pp_default .pp_content_container .pp_right{background:url("../images/prettyPhoto/default/sprite_y.png") top right repeat-y;padding-right:13px}
div.pp_default .pp_next:hover{background:url("../images/prettyPhoto/default/sprite_next.png") center right no-repeat;cursor:pointer}
div.pp_default .pp_previous:hover{background:url("../images/prettyPhoto/default/sprite_prev.png") center left no-repeat;cursor:pointer}
div.pp_default .pp_expand{background:url("../images/prettyPhoto/default/sprite.png") 0 -29px no-repeat;cursor:pointer;width:28px;height:28px}
div.pp_default .pp_expand:hover{background:url("../images/prettyPhoto/default/sprite.png") 0 -56px no-repeat;cursor:pointer}
div.pp_default .pp_contract{background:url("../images/prettyPhoto/default/sprite.png") 0 -84px no-repeat;cursor:pointer;width:28px;height:28px}
div.pp_default .pp_contract:hover{background:url("../images/prettyPhoto/default/sprite.png") 0 -113px no-repeat;cursor:pointer}
div.pp_default .pp_close{width:30px;height:30px;background:url("../images/prettyPhoto/default/sprite.png") 2px 1px no-repeat;cursor:pointer}
div.pp_default .pp_gallery ul li a{background:url("../images/prettyPhoto/default/default_thumb.png") center center #f8f8f8;border:1px solid #aaa}
div.pp_default .pp_social{margin-top:7px}
div.pp_default .pp_gallery a.pp_arrow_previous,div.pp_default .pp_gallery a.pp_arrow_next{position:static;left:auto}
div.pp_default .pp_nav .pp_play,div.pp_default .pp_nav .pp_pause{background:url("../images/prettyPhoto/default/sprite.png") -51px 1px no-repeat;height:30px;width:30px}
div.pp_default .pp_nav .pp_pause{background-position:-51px -29px}
div.pp_default a.pp_arrow_previous,div.pp_default a.pp_arrow_next{background:url("../images/prettyPhoto/default/sprite.png") -31px -3px no-repeat;height:20px;width:20px;margin:4px 0 0}
div.pp_default a.pp_arrow_next{left:52px;background-position:-82px -3px}
div.pp_default .pp_content_container .pp_details{margin-top:5px}
div.pp_default .pp_nav{clear:none;height:30px;width:110px;position:relative}
div.pp_default .pp_nav .currentTextHolder{font-family:Georgia;font-style:italic;color:#999;font-size:11px;left:75px;line-height:25px;position:absolute;top:2px;margin:0;padding:0 0 0 10px}
div.pp_default .pp_close:hover,div.pp_default .pp_nav .pp_play:hover,div.pp_default .pp_nav .pp_pause:hover,div.pp_default .pp_arrow_next:hover,div.pp_default .pp_arrow_previous:hover{opacity:0.7}
div.pp_default .pp_description{font-size:11px;font-weight:700;line-height:14px;margin:5px 50px 5px 0}
div.pp_default .pp_bottom .pp_left{background:url("../images/prettyPhoto/default/sprite.png") -78px -127px no-repeat}
div.pp_default .pp_bottom .pp_middle{background:url("../images/prettyPhoto/default/sprite_x.png") bottom left repeat-x}
div.pp_default .pp_bottom .pp_right{background:url("../images/prettyPhoto/default/sprite.png") -112px -127px no-repeat}
div.pp_default .pp_loaderIcon{background:url("../images/prettyPhoto/default/loader.gif") center center no-repeat}
div.light_rounded .pp_top .pp_left{background:url("../images/prettyPhoto/light_rounded/sprite.png") -88px -53px no-repeat}
div.light_rounded .pp_top .pp_right{background:url("../images/prettyPhoto/light_rounded/sprite.png") -110px -53px no-repeat}
div.light_rounded .pp_next:hover{background:url("../images/prettyPhoto/light_rounded/btnNext.png") center right no-repeat;cursor:pointer}
div.light_rounded .pp_previous:hover{background:url("../images/prettyPhoto/light_rounded/btnPrevious.png") center left no-repeat;cursor:pointer}
div.light_rounded .pp_expand{background:url("../images/prettyPhoto/light_rounded/sprite.png") -31px -26px no-repeat;cursor:pointer}
div.light_rounded .pp_expand:hover{background:url("../images/prettyPhoto/light_rounded/sprite.png") -31px -47px no-repeat;cursor:pointer}
div.light_rounded .pp_contract{background:url("../images/prettyPhoto/light_rounded/sprite.png") 0 -26px no-repeat;cursor:pointer}
div.light_rounded .pp_contract:hover{background:url("../images/prettyPhoto/light_rounded/sprite.png") 0 -47px no-repeat;cursor:pointer}
div.light_rounded .pp_close{width:75px;height:22px;background:url("../images/prettyPhoto/light_rounded/sprite.png") -1px -1px no-repeat;cursor:pointer}
div.light_rounded .pp_nav .pp_play{background:url("../images/prettyPhoto/light_rounded/sprite.png") -1px -100px no-repeat;height:15px;width:14px}
div.light_rounded .pp_nav .pp_pause{background:url("../images/prettyPhoto/light_rounded/sprite.png") -24px -100px no-repeat;height:15px;width:14px}
div.light_rounded .pp_arrow_previous{background:url("../images/prettyPhoto/light_rounded/sprite.png") 0 -71px no-repeat}
div.light_rounded .pp_arrow_next{background:url("../images/prettyPhoto/light_rounded/sprite.png") -22px -71px no-repeat}
div.light_rounded .pp_bottom .pp_left{background:url("../images/prettyPhoto/light_rounded/sprite.png") -88px -80px no-repeat}
div.light_rounded .pp_bottom .pp_right{background:url("../images/prettyPhoto/light_rounded/sprite.png") -110px -80px no-repeat}
div.dark_rounded .pp_top .pp_left{background:url("../images/prettyPhoto/dark_rounded/sprite.png") -88px -53px no-repeat}
div.dark_rounded .pp_top .pp_right{background:url("../images/prettyPhoto/dark_rounded/sprite.png") -110px -53px no-repeat}
div.dark_rounded .pp_content_container .pp_left{background:url("../images/prettyPhoto/dark_rounded/contentPattern.png") top left repeat-y}
div.dark_rounded .pp_content_container .pp_right{background:url("../images/prettyPhoto/dark_rounded/contentPattern.png") top right repeat-y}
div.dark_rounded .pp_next:hover{background:url("../images/prettyPhoto/dark_rounded/btnNext.png") center right no-repeat;cursor:pointer}
div.dark_rounded .pp_previous:hover{background:url("../images/prettyPhoto/dark_rounded/btnPrevious.png") center left no-repeat;cursor:pointer}
div.dark_rounded .pp_expand{background:url("../images/prettyPhoto/dark_rounded/sprite.png") -31px -26px no-repeat;cursor:pointer}
div.dark_rounded .pp_expand:hover{background:url("../images/prettyPhoto/dark_rounded/sprite.png") -31px -47px no-repeat;cursor:pointer}
div.dark_rounded .pp_contract{background:url("../images/prettyPhoto/dark_rounded/sprite.png") 0 -26px no-repeat;cursor:pointer}
div.dark_rounded .pp_contract:hover{background:url("../images/prettyPhoto/dark_rounded/sprite.png") 0 -47px no-repeat;cursor:pointer}
div.dark_rounded .pp_close{width:75px;height:22px;background:url("../images/prettyPhoto/dark_rounded/sprite.png") -1px -1px no-repeat;cursor:pointer}
div.dark_rounded .pp_description{margin-right:85px;color:#fff}
div.dark_rounded .pp_nav .pp_play{background:url("../images/prettyPhoto/dark_rounded/sprite.png") -1px -100px no-repeat;height:15px;width:14px}
div.dark_rounded .pp_nav .pp_pause{background:url("../images/prettyPhoto/dark_rounded/sprite.png") -24px -100px no-repeat;height:15px;width:14px}
div.dark_rounded .pp_arrow_previous{background:url("../images/prettyPhoto/dark_rounded/sprite.png") 0 -71px no-repeat}
div.dark_rounded .pp_arrow_next{background:url("../images/prettyPhoto/dark_rounded/sprite.png") -22px -71px no-repeat}
div.dark_rounded .pp_bottom .pp_left{background:url("../images/prettyPhoto/dark_rounded/sprite.png") -88px -80px no-repeat}
div.dark_rounded .pp_bottom .pp_right{background:url("../images/prettyPhoto/dark_rounded/sprite.png") -110px -80px no-repeat}
div.dark_rounded .pp_loaderIcon{background:url("../images/prettyPhoto/dark_rounded/loader.gif") center center no-repeat}
div.dark_square .pp_left,div.dark_square .pp_middle,div.dark_square .pp_right,div.dark_square .pp_content{background:#000}
div.dark_square .pp_description{color:#fff;margin:0 85px 0 0}
div.dark_square .pp_loaderIcon{background:url("../images/prettyPhoto/dark_square/loader.gif") center center no-repeat}
div.dark_square .pp_expand{background:url("../images/prettyPhoto/dark_square/sprite.png") -31px -26px no-repeat;cursor:pointer}
div.dark_square .pp_expand:hover{background:url("../images/prettyPhoto/dark_square/sprite.png") -31px -47px no-repeat;cursor:pointer}
div.dark_square .pp_contract{background:url("../images/prettyPhoto/dark_square/sprite.png") 0 -26px no-repeat;cursor:pointer}
div.dark_square .pp_contract:hover{background:url("../images/prettyPhoto/dark_square/sprite.png") 0 -47px no-repeat;cursor:pointer}
div.dark_square .pp_close{width:75px;height:22px;background:url("../images/prettyPhoto/dark_square/sprite.png") -1px -1px no-repeat;cursor:pointer}
div.dark_square .pp_nav{clear:none}
div.dark_square .pp_nav .pp_play{background:url("../images/prettyPhoto/dark_square/sprite.png") -1px -100px no-repeat;height:15px;width:14px}
div.dark_square .pp_nav .pp_pause{background:url("../images/prettyPhoto/dark_square/sprite.png") -24px -100px no-repeat;height:15px;width:14px}
div.dark_square .pp_arrow_previous{background:url("../images/prettyPhoto/dark_square/sprite.png") 0 -71px no-repeat}
div.dark_square .pp_arrow_next{background:url("../images/prettyPhoto/dark_square/sprite.png") -22px -71px no-repeat}
div.dark_square .pp_next:hover{background:url("../images/prettyPhoto/dark_square/btnNext.png") center right no-repeat;cursor:pointer}
div.dark_square .pp_previous:hover{background:url("../images/prettyPhoto/dark_square/btnPrevious.png") center left no-repeat;cursor:pointer}
div.light_square .pp_expand{background:url("../images/prettyPhoto/light_square/sprite.png") -31px -26px no-repeat;cursor:pointer}
div.light_square .pp_expand:hover{background:url("../images/prettyPhoto/light_square/sprite.png") -31px -47px no-repeat;cursor:pointer}
div.light_square .pp_contract{background:url("../images/prettyPhoto/light_square/sprite.png") 0 -26px no-repeat;cursor:pointer}
div.light_square .pp_contract:hover{background:url("../images/prettyPhoto/light_square/sprite.png") 0 -47px no-repeat;cursor:pointer}
div.light_square .pp_close{width:75px;height:22px;background:url("../images/prettyPhoto/light_square/sprite.png") -1px -1px no-repeat;cursor:pointer}
div.light_square .pp_nav .pp_play{background:url("../images/prettyPhoto/light_square/sprite.png") -1px -100px no-repeat;height:15px;width:14px}
div.light_square .pp_nav .pp_pause{background:url("../images/prettyPhoto/light_square/sprite.png") -24px -100px no-repeat;height:15px;width:14px}
div.light_square .pp_arrow_previous{background:url("../images/prettyPhoto/light_square/sprite.png") 0 -71px no-repeat}
div.light_square .pp_arrow_next{background:url("../images/prettyPhoto/light_square/sprite.png") -22px -71px no-repeat}
div.light_square .pp_next:hover{background:url("../images/prettyPhoto/light_square/btnNext.png") center right no-repeat;cursor:pointer}
div.light_square .pp_previous:hover{background:url("../images/prettyPhoto/light_square/btnPrevious.png") center left no-repeat;cursor:pointer}
div.facebook .pp_top .pp_left{background:url("../images/prettyPhoto/facebook/sprite.png") -88px -53px no-repeat}
div.facebook .pp_top .pp_middle{background:url("../images/prettyPhoto/facebook/contentPatternTop.png") top left repeat-x}
div.facebook .pp_top .pp_right{background:url("../images/prettyPhoto/facebook/sprite.png") -110px -53px no-repeat}
div.facebook .pp_content_container .pp_left{background:url("../images/prettyPhoto/facebook/contentPatternLeft.png") top left repeat-y}
div.facebook .pp_content_container .pp_right{background:url("../images/prettyPhoto/facebook/contentPatternRight.png") top right repeat-y}
div.facebook .pp_expand{background:url("../images/prettyPhoto/facebook/sprite.png") -31px -26px no-repeat;cursor:pointer}
div.facebook .pp_expand:hover{background:url("../images/prettyPhoto/facebook/sprite.png") -31px -47px no-repeat;cursor:pointer}
div.facebook .pp_contract{background:url("../images/prettyPhoto/facebook/sprite.png") 0 -26px no-repeat;cursor:pointer}
div.facebook .pp_contract:hover{background:url("../images/prettyPhoto/facebook/sprite.png") 0 -47px no-repeat;cursor:pointer}
div.facebook .pp_close{width:22px;height:22px;background:url("../images/prettyPhoto/facebook/sprite.png") -1px -1px no-repeat;cursor:pointer}
div.facebook .pp_description{margin:0 37px 0 0}
div.facebook .pp_loaderIcon{background:url("../images/prettyPhoto/facebook/loader.gif") center center no-repeat}
div.facebook .pp_arrow_previous{background:url("../images/prettyPhoto/facebook/sprite.png") 0 -71px no-repeat;height:22px;margin-top:0;width:22px}
div.facebook .pp_arrow_previous.disabled{background-position:0 -96px;cursor:default}
div.facebook .pp_arrow_next{background:url("../images/prettyPhoto/facebook/sprite.png") -32px -71px no-repeat;height:22px;margin-top:0;width:22px}
div.facebook .pp_arrow_next.disabled{background-position:-32px -96px;cursor:default}
div.facebook .pp_nav{margin-top:0}
div.facebook .pp_nav p{font-size:15px;padding:0 3px 0 4px}
div.facebook .pp_nav .pp_play{background:url("../images/prettyPhoto/facebook/sprite.png") -1px -123px no-repeat;height:22px;width:22px}
div.facebook .pp_nav .pp_pause{background:url("../images/prettyPhoto/facebook/sprite.png") -32px -123px no-repeat;height:22px;width:22px}
div.facebook .pp_next:hover{background:url("../images/prettyPhoto/facebook/btnNext.png") center right no-repeat;cursor:pointer}
div.facebook .pp_previous:hover{background:url("../images/prettyPhoto/facebook/btnPrevious.png") center left no-repeat;cursor:pointer}
div.facebook .pp_bottom .pp_left{background:url("../images/prettyPhoto/facebook/sprite.png") -88px -80px no-repeat}
div.facebook .pp_bottom .pp_middle{background:url("../images/prettyPhoto/facebook/contentPatternBottom.png") top left repeat-x}
div.facebook .pp_bottom .pp_right{background:url("../images/prettyPhoto/facebook/sprite.png") -110px -80px no-repeat}
div.pp_pic_holder a:focus{outline:none}
div.pp_overlay{background:#000;display:none;left:0;position:absolute;top:0;width:100%;z-index:9500}
div.pp_pic_holder{display:none;position:absolute;width:100px;z-index:10000}
.pp_content{height:40px;min-width:40px}
* html .pp_content{width:40px}
.pp_content_container{position:relative;text-align:left;width:100%}
.pp_content_container .pp_left{padding-left:20px}
.pp_content_container .pp_right{padding-right:20px}
.pp_content_container .pp_details{float:left;margin:10px 0 2px}
.pp_description{display:none;margin:0}
.pp_social{float:left;margin:0}
.pp_social .facebook{float:left;margin-left:5px;width:55px;overflow:hidden}
.pp_social .twitter{float:left}
.pp_nav{clear:right;float:left;margin:3px 10px 0 0}
.pp_nav p{float:left;white-space:nowrap;margin:2px 4px}
.pp_nav .pp_play,.pp_nav .pp_pause{float:left;margin-right:4px;text-indent:-10000px}
a.pp_arrow_previous,a.pp_arrow_next{display:block;float:left;height:15px;margin-top:3px;overflow:hidden;text-indent:-10000px;width:14px}
.pp_hoverContainer{position:absolute;top:0;width:100%;z-index:2000}
.pp_gallery{display:none;left:50%;margin-top:-50px;position:absolute;z-index:10000}
.pp_gallery div{float:left;overflow:hidden;position:relative}
.pp_gallery ul{float:left;height:35px;position:relative;white-space:nowrap;margin:0 0 0 5px;padding:0}
.pp_gallery ul a{border:1px rgba(0,0,0,0.5) solid;display:block;float:left;height:33px;overflow:hidden}
.pp_gallery ul a img{border:0}
.pp_gallery li{display:block;float:left;margin:0 5px 0 0;padding:0}
.pp_gallery li.default a{background:url("../images/prettyPhoto/facebook/default_thumbnail.gif") 0 0 no-repeat;display:block;height:33px;width:50px}
.pp_gallery .pp_arrow_previous,.pp_gallery .pp_arrow_next{margin-top:7px!important}
a.pp_next{background:url("../images/prettyPhoto/light_rounded/btnNext.png") 10000px 10000px no-repeat;display:block;float:right;height:100%;text-indent:-10000px;width:49%}
a.pp_previous{background:url("../images/prettyPhoto/light_rounded/btnNext.png") 10000px 10000px no-repeat;display:block;float:left;height:100%;text-indent:-10000px;width:49%}
a.pp_expand,a.pp_contract{cursor:pointer;display:none;height:20px;position:absolute;right:30px;text-indent:-10000px;top:10px;width:20px;z-index:20000}
a.pp_close{position:absolute;right:0;top:0;display:block;line-height:22px;text-indent:-10000px}
.pp_loaderIcon{display:block;height:24px;left:50%;position:absolute;top:50%;width:24px;margin:-12px 0 0 -12px}
#pp_full_res{line-height:1!important}
#pp_full_res .pp_inline{text-align:left}
#pp_full_res .pp_inline p{margin:0 0 15px}
div.ppt{color:#fff;display:none;font-size:17px;z-index:9999;margin:0 0 5px 15px}
div.pp_default .pp_content,div.light_rounded .pp_content{background-color:#fff}
div.pp_default #pp_full_res .pp_inline,div.light_rounded .pp_content .ppt,div.light_rounded #pp_full_res .pp_inline,div.light_square .pp_content .ppt,div.light_square #pp_full_res .pp_inline,div.facebook .pp_content .ppt,div.facebook #pp_full_res .pp_inline{color:#000}
div.pp_default .pp_gallery ul li a:hover,div.pp_default .pp_gallery ul li.selected a,.pp_gallery ul a:hover,.pp_gallery li.selected a{border-color:#fff}
div.pp_default .pp_details,div.light_rounded .pp_details,div.dark_rounded .pp_details,div.dark_square .pp_details,div.light_square .pp_details,div.facebook .pp_details{position:relative}
div.light_rounded .pp_top .pp_middle,div.light_rounded .pp_content_container .pp_left,div.light_rounded .pp_content_container .pp_right,div.light_rounded .pp_bottom .pp_middle,div.light_square .pp_left,div.light_square .pp_middle,div.light_square .pp_right,div.light_square .pp_content,div.facebook .pp_content{background:#fff}
div.light_rounded .pp_description,div.light_square .pp_description{margin-right:85px}
div.light_rounded .pp_gallery a.pp_arrow_previous,div.light_rounded .pp_gallery a.pp_arrow_next,div.dark_rounded .pp_gallery a.pp_arrow_previous,div.dark_rounded .pp_gallery a.pp_arrow_next,div.dark_square .pp_gallery a.pp_arrow_previous,div.dark_square .pp_gallery a.pp_arrow_next,div.light_square .pp_gallery a.pp_arrow_previous,div.light_square .pp_gallery a.pp_arrow_next{margin-top:12px!important}
div.light_rounded .pp_arrow_previous.disabled,div.dark_rounded .pp_arrow_previous.disabled,div.dark_square .pp_arrow_previous.disabled,div.light_square .pp_arrow_previous.disabled{background-position:0 -87px;cursor:default}
div.light_rounded .pp_arrow_next.disabled,div.dark_rounded .pp_arrow_next.disabled,div.dark_square .pp_arrow_next.disabled,div.light_square .pp_arrow_next.disabled{background-position:-22px -87px;cursor:default}
div.light_rounded .pp_loaderIcon,div.light_square .pp_loaderIcon{background:url("../images/prettyPhoto/light_rounded/loader.gif") center center no-repeat}
div.dark_rounded .pp_top .pp_middle,div.dark_rounded .pp_content,div.dark_rounded .pp_bottom .pp_middle{background:url("../images/prettyPhoto/dark_rounded/contentPattern.png") top left repeat}
div.dark_rounded .currentTextHolder,div.dark_square .currentTextHolder{color:#c4c4c4}
div.dark_rounded #pp_full_res .pp_inline,div.dark_square #pp_full_res .pp_inline{color:#fff}
.pp_top,.pp_bottom{height:20px;position:relative}
* html .pp_top,* html .pp_bottom{padding:0 20px}
.pp_top .pp_left,.pp_bottom .pp_left{height:20px;left:0;position:absolute;width:20px}
.pp_top .pp_middle,.pp_bottom .pp_middle{height:20px;left:20px;position:absolute;right:20px}
* html .pp_top .pp_middle,* html .pp_bottom .pp_middle{left:0;position:static}
.pp_top .pp_right,.pp_bottom .pp_right{height:20px;left:auto;position:absolute;right:0;top:0;width:20px}
.pp_fade,.pp_gallery li.default a img{display:none}

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