monor theme changes
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"name": "Saasland",
|
||||
"slug": "saasland",
|
||||
"version": "1.2.0",
|
||||
"version": "1.3.0",
|
||||
"author": "ABSDEV",
|
||||
"description": "Configurable premium SaaS frontend with CMS-driven content, pricing, blog, news, team, testimonials, FAQ and newsletter sections.",
|
||||
"description": "Premium dark SaaS frontend with compact section spacing, responsive dashboard hero, CMS-driven content and an expanded lead-generation footer.",
|
||||
"entry_view": "home",
|
||||
"stylesheet": "css/theme.css",
|
||||
"script": "js/app.js",
|
||||
|
||||
@@ -1,29 +1,112 @@
|
||||
<section class="hero">
|
||||
<div class="glow one"></div><div class="glow two"></div>
|
||||
<div class="wrap hero-inner">
|
||||
<span class="eyebrow">{{ $themeSettings['hero_eyebrow'] ?? 'A better way to run your business' }}</span>
|
||||
<h1>{{ $heroTitle }}</h1>
|
||||
<p>{{ $heroText }}</p>
|
||||
<div class="actions">
|
||||
<a class="btn primary" href="{{ $themeSettings['primary_cta_url'] ?? (Route::has('register') ? route('register') : '#contact') }}">{{ $themeSettings['primary_cta_label'] ?? 'Get started free' }} →</a>
|
||||
<a class="btn secondary" href="{{ $themeSettings['secondary_cta_url'] ?? '#contact' }}">{{ $themeSettings['secondary_cta_label'] ?? 'Book demo' }}</a>
|
||||
<section class="hero hero-premium">
|
||||
<div class="hero-ambient hero-ambient-one"></div>
|
||||
<div class="hero-ambient hero-ambient-two"></div>
|
||||
|
||||
<div class="wrap hero-premium-grid">
|
||||
<div class="hero-copy">
|
||||
<span class="eyebrow">{{ $themeSettings['hero_eyebrow'] ?? 'All-in-One CMS Platform' }}</span>
|
||||
<h1>{{ $heroTitle }}</h1>
|
||||
<p>{{ $heroText }}</p>
|
||||
|
||||
<div class="actions hero-actions">
|
||||
<a class="btn primary" href="{{ $themeSettings['primary_cta_url'] ?? (Route::has('register') ? route('register') : '#contact') }}">
|
||||
{{ $themeSettings['primary_cta_label'] ?? 'Get started free' }} →
|
||||
</a>
|
||||
<a class="btn secondary" href="{{ $themeSettings['secondary_cta_url'] ?? '#contact' }}">
|
||||
<span class="play-icon">▶</span>{{ $themeSettings['secondary_cta_label'] ?? 'Watch demo' }}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="hero-assurances" aria-label="Trial information">
|
||||
<span><i>✓</i>No credit card required</span>
|
||||
<span><i>✓</i>Free 14-day trial</span>
|
||||
<span><i>✓</i>Cancel anytime</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if($enabled('show_metrics', true))
|
||||
<div class="dashboard">
|
||||
<div class="dash-top"><b>Performance overview</b><span>Live</span></div>
|
||||
<div class="metrics"><article><small>Monthly revenue</small><strong>£48,240</strong><em>+18.4%</em></article><article><small>Active users</small><strong>12,842</strong><em>+9.2%</em></article><article><small>Conversion</small><strong>7.8%</strong><em>+2.1%</em></article></div>
|
||||
<div class="chart" aria-label="Performance chart"><i style="height:28%"></i><i style="height:42%"></i><i style="height:35%"></i><i style="height:62%"></i><i style="height:54%"></i><i style="height:78%"></i><i style="height:92%"></i></div>
|
||||
</div>
|
||||
<div class="dashboard-preview" aria-label="CMS dashboard preview">
|
||||
<aside class="dashboard-sidebar">
|
||||
<div class="dashboard-mark">A</div>
|
||||
@foreach(['Dashboard','Content','Media','Pages','Users','Analytics','Settings'] as $index => $item)
|
||||
<div class="dashboard-nav-item {{ $index === 0 ? 'active' : '' }}">
|
||||
<span>{{ ['⌂','▱','▧','□','♙','▥','⚙'][$index] }}</span>{{ $item }}
|
||||
</div>
|
||||
@endforeach
|
||||
</aside>
|
||||
|
||||
<div class="dashboard-main">
|
||||
<div class="dashboard-heading-row">
|
||||
<div>
|
||||
<small>Dashboard</small>
|
||||
<h3>Welcome back, Mark <span>👋</span></h3>
|
||||
<p>Here’s what’s happening with your site today.</p>
|
||||
</div>
|
||||
<button type="button">May 12 – May 18, 2024</button>
|
||||
</div>
|
||||
|
||||
<div class="dashboard-stats">
|
||||
@foreach([
|
||||
['Total Visitors','24,854','↑ 12.5%'],
|
||||
['Page Views','62,104','↑ 8.2%'],
|
||||
['New Users','1,429','↑ 15.3%'],
|
||||
['Bounce Rate','32.6%','↓ 4.1%'],
|
||||
] as $stat)
|
||||
<article><small>{{ $stat[0] }}</small><strong>{{ $stat[1] }}</strong><em>{{ $stat[2] }}</em></article>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
<div class="dashboard-panels">
|
||||
<article class="dashboard-chart-panel">
|
||||
<div class="panel-title"><strong>Visitors Overview</strong><span>This Week⌄</span></div>
|
||||
<div class="line-chart">
|
||||
<div class="chart-grid"></div>
|
||||
<svg viewBox="0 0 560 190" preserveAspectRatio="none" role="img" aria-label="Visitor growth chart">
|
||||
<defs><linearGradient id="chartFill" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#f97316" stop-opacity=".32"/><stop offset="1" stop-color="#f97316" stop-opacity="0"/></linearGradient></defs>
|
||||
<path class="chart-area" d="M0 128 C42 73 70 76 112 125 C156 170 185 104 224 108 C272 112 286 102 315 60 C355 3 388 142 438 119 C486 95 515 93 560 83 L560 190 L0 190 Z"/>
|
||||
<path class="chart-line" d="M0 128 C42 73 70 76 112 125 C156 170 185 104 224 108 C272 112 286 102 315 60 C355 3 388 142 438 119 C486 95 515 93 560 83"/>
|
||||
</svg>
|
||||
<div class="chart-labels"><span>May 12</span><span>May 13</span><span>May 14</span><span>May 15</span><span>May 16</span><span>May 17</span><span>May 18</span></div>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="dashboard-pages-panel">
|
||||
<div class="panel-title"><strong>Top Pages</strong></div>
|
||||
@foreach([['/','10,430'],['/features','8,129'],['/pricing','6,247'],['/blog','4,985'],['/contact','3,421']] as $page)
|
||||
<div><span>{{ $page[0] }}</span><strong>{{ $page[1] }}</strong></div>
|
||||
@endforeach
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@if($enabled('show_features', true))
|
||||
<section class="section" id="features"><div class="wrap"><div class="heading"><span>Powerful features</span><h2>Everything your team needs to grow</h2><p>Planning, collaboration, reporting, publishing, commerce and customer insight in one extensible platform.</p></div><div class="grid three">
|
||||
@foreach([['Smart automation','Remove repetitive work and delays.'],['Real-time analytics','Turn activity into useful business insight.'],['Content operations','Create, review and publish confidently.'],['Secure by design','Protect users and data with dependable controls.'],['Flexible integrations','Connect the tools your organisation already uses.'],['Modular architecture','Activate only the capabilities each site needs.']] as $i => $feature)
|
||||
<article class="card"><b>{{ str_pad((string)($i+1),2,'0',STR_PAD_LEFT) }}</b><h3>{{ $feature[0] }}</h3><p>{{ $feature[1] }}</p></article>
|
||||
@endforeach
|
||||
</div></div></section>
|
||||
<section class="section features-premium" id="features">
|
||||
<div class="wrap">
|
||||
<div class="heading compact-heading">
|
||||
<span>Powerful features</span>
|
||||
<h2>Everything your team needs to grow</h2>
|
||||
<p>Built with all the tools you need to manage content, engage users, and scale your business.</p>
|
||||
</div>
|
||||
|
||||
<div class="feature-row">
|
||||
@foreach([
|
||||
['✎','Easy Content Management','Create, edit, and publish content with an intuitive and powerful editor.'],
|
||||
['♙','Team Collaboration','Work together seamlessly with roles, permissions, and real-time updates.'],
|
||||
['▥','Advanced Analytics','Track performance and make data-driven decisions with detailed insights.'],
|
||||
['♢','Secure & Reliable','Enterprise-grade security and dependable uptime you can count on.'],
|
||||
] as $feature)
|
||||
<article class="feature-item">
|
||||
<div class="feature-icon">{{ $feature[0] }}</div>
|
||||
<div><h3>{{ $feature[1] }}</h3><p>{{ $feature[2] }}</p></div>
|
||||
</article>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@endif
|
||||
|
||||
@if($enabled('show_pricing', true) && $pricingPlans->isNotEmpty())
|
||||
|
||||
@@ -5,69 +5,10 @@
|
||||
$description = $siteDescription;
|
||||
$hero = true;
|
||||
$enabled = fn (string $key, bool $default = true) => filter_var($themeSettings[$key] ?? $default, FILTER_VALIDATE_BOOL);
|
||||
$heroTitle = filled($themeSettings['hero_title'] ?? null) ? $themeSettings['hero_title'] : 'Transform Your Business With Our SaaS Solution';
|
||||
$heroTitle = filled($themeSettings['hero_title'] ?? null) ? $themeSettings['hero_title'] : 'Transform Your Business With Our CMS Solution';
|
||||
$heroText = filled($themeSettings['hero_description'] ?? null) ? $themeSettings['hero_description'] : 'Streamline operations, boost productivity, and improve customer satisfaction with one connected platform built for modern teams.';
|
||||
@endphp
|
||||
|
||||
@section('content')
|
||||
<section class="hero">
|
||||
<div class="glow one"></div><div class="glow two"></div>
|
||||
<div class="wrap hero-inner">
|
||||
<span class="eyebrow">{{ $themeSettings['hero_eyebrow'] ?? 'A better way to run your business' }}</span>
|
||||
<h1>{{ $heroTitle }}</h1>
|
||||
<p>{{ $heroText }}</p>
|
||||
<div class="actions">
|
||||
<a class="btn primary" href="{{ $themeSettings['primary_cta_url'] ?? (Route::has('register') ? route('register') : '#contact') }}">{{ $themeSettings['primary_cta_label'] ?? 'Get started free' }} →</a>
|
||||
<a class="btn secondary" href="{{ $themeSettings['secondary_cta_url'] ?? '#contact' }}">{{ $themeSettings['secondary_cta_label'] ?? 'Book demo' }}</a>
|
||||
</div>
|
||||
@if($enabled('show_metrics', true))
|
||||
<div class="dashboard">
|
||||
<div class="dash-top"><b>Performance overview</b><span>Live</span></div>
|
||||
<div class="metrics"><article><small>Monthly revenue</small><strong>£48,240</strong><em>+18.4%</em></article><article><small>Active users</small><strong>12,842</strong><em>+9.2%</em></article><article><small>Conversion</small><strong>7.8%</strong><em>+2.1%</em></article></div>
|
||||
<div class="chart" aria-label="Performance chart"><i style="height:28%"></i><i style="height:42%"></i><i style="height:35%"></i><i style="height:62%"></i><i style="height:54%"></i><i style="height:78%"></i><i style="height:92%"></i></div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@if($enabled('show_features', true))
|
||||
<section class="section" id="features"><div class="wrap"><div class="heading"><span>Powerful features</span><h2>Everything your team needs to grow</h2><p>Planning, collaboration, reporting, publishing, commerce and customer insight in one extensible platform.</p></div><div class="grid three">
|
||||
@foreach([['Smart automation','Remove repetitive work and delays.'],['Real-time analytics','Turn activity into useful business insight.'],['Content operations','Create, review and publish confidently.'],['Secure by design','Protect users and data with dependable controls.'],['Flexible integrations','Connect the tools your organisation already uses.'],['Modular architecture','Activate only the capabilities each site needs.']] as $i => $feature)
|
||||
<article class="card"><b>{{ str_pad((string)($i+1),2,'0',STR_PAD_LEFT) }}</b><h3>{{ $feature[0] }}</h3><p>{{ $feature[1] }}</p></article>
|
||||
@endforeach
|
||||
</div></div></section>
|
||||
@endif
|
||||
|
||||
@if($enabled('show_pricing', true) && $pricingPlans->isNotEmpty())
|
||||
<section class="section alt" id="pricing"><div class="wrap"><div class="heading"><span>Simple pricing</span><h2>Choose a plan that fits</h2><p>Plans are managed from Products & Pricing in the CMS.</p></div><div class="grid three pricing">
|
||||
@foreach($pricingPlans as $plan)
|
||||
<article class="card plan {{ $plan->is_featured ? 'featured' : '' }}">@if($plan->is_featured)<div class="popular">Most popular</div>@endif<h3>{{ $plan->name }}</h3><strong>@if($plan->price !== null){{ $plan->currency === 'GBP' ? '£' : $plan->currency.' ' }}{{ rtrim(rtrim(number_format((float)$plan->price,2), '0'), '.') }}<small>/{{ $plan->billing_period ?: 'month' }}</small>@else Custom @endif</strong><p>{{ $plan->description }}</p><ul>@foreach((array)$plan->features as $feature)<li>{{ $feature }}</li>@endforeach</ul><a class="btn {{ $plan->is_featured ? 'primary' : 'secondary' }}" href="{{ $plan->cta_url ?: '#contact' }}">{{ $plan->cta_label ?: 'Learn more' }}</a></article>
|
||||
@endforeach
|
||||
</div></div></section>
|
||||
@endif
|
||||
|
||||
@if($enabled('show_testimonials', true) && $testimonials->isNotEmpty())
|
||||
<section class="section"><div class="wrap"><div class="heading"><span>Customer stories</span><h2>Trusted by ambitious teams</h2></div><div class="grid three">@foreach($testimonials as $testimonial)<blockquote class="card">“{{ $testimonial->content }}”<footer>{{ $testimonial->name }}@if($testimonial->company) · {{ $testimonial->company }}@endif</footer></blockquote>@endforeach</div></div></section>
|
||||
@endif
|
||||
|
||||
@if($enabled('show_team', false) && $teamMembers->isNotEmpty())
|
||||
<section class="section alt"><div class="wrap"><div class="heading"><span>Our team</span><h2>People behind the platform</h2></div><div class="grid three">@foreach($teamMembers as $member)<article class="card"><h3>{{ $member->name }}</h3><b>{{ $member->job_title }}</b><p>{{ $member->biography }}</p></article>@endforeach</div></div></section>
|
||||
@endif
|
||||
|
||||
@if($enabled('show_blog', true) && $latestBlogPosts->isNotEmpty())
|
||||
<section class="section"><div class="wrap"><div class="heading"><span>Insights</span><h2>Latest from the blog</h2></div><div class="grid three">@foreach($latestBlogPosts as $post)<article class="card"><b>{{ optional($post->published_at)->format('d M Y') }}</b><h3>{{ $post->title }}</h3><p>{{ $post->excerpt }}</p><a class="read-more" href="{{ route('blog.public.show',$post->slug) }}">Read article →</a></article>@endforeach</div></div></section>
|
||||
@endif
|
||||
|
||||
@if($enabled('show_news', true) && $latestNewsArticles->isNotEmpty())
|
||||
<section class="section alt"><div class="wrap"><div class="heading"><span>Newsroom</span><h2>Latest news</h2></div><div class="grid three">@foreach($latestNewsArticles as $article)<article class="card"><b>{{ optional($article->published_at)->format('d M Y') }}</b><h3>{{ $article->title }}</h3><p>{{ $article->excerpt }}</p><a class="read-more" href="{{ route('news.public.show',$article->slug) }}">Read update →</a></article>@endforeach</div></div></section>
|
||||
@endif
|
||||
|
||||
@if($enabled('show_faq', true) && $faqs->isNotEmpty())
|
||||
<section class="section"><div class="wrap faq"><div><span class="section-label">FAQ</span><h2>Answers before you begin</h2></div><div>@foreach($faqs as $faq)<article><button type="button" @click="openFaq = openFaq === {{ $faq->id }} ? null : {{ $faq->id }}">{{ $faq->question }}<span>+</span></button><p x-cloak x-show="openFaq === {{ $faq->id }}">{{ $faq->answer }}</p></article>@endforeach</div></div></section>
|
||||
@endif
|
||||
|
||||
@if($enabled('show_newsletter', true))
|
||||
<section class="section alt"><div class="wrap"><div class="content-card newsletter-panel"><div><span class="section-label">Newsletter</span><h2>Useful updates, no noise</h2><p>Receive product news, publishing guidance, and practical platform updates.</p></div><form method="POST" action="{{ route('newsletter.public.subscribe') }}">@csrf<input type="email" name="email" required placeholder="you@example.com" aria-label="Email address"><button class="btn primary" type="submit">Subscribe</button></form></div></div></section>
|
||||
@endif
|
||||
|
||||
@include('stylist-theme-saasland::legacy-home-content', compact('enabled', 'heroTitle', 'heroText'))
|
||||
@endsection
|
||||
|
||||
@@ -2,16 +2,59 @@
|
||||
$footerContent = $footerContent ?? [];
|
||||
$navigation = app(\Modules\Stylist\Support\FrontendNavigation::class);
|
||||
$columns = collect([
|
||||
['heading' => $footerContent['explore_heading'] ?? 'Explore', 'items' => $navigation->location($footerContent['explore_menu_location'] ?? 'footer', $footerNavigation ?? [])],
|
||||
['heading' => $footerContent['account_heading'] ?? 'Account', 'items' => $navigation->location($footerContent['account_menu_location'] ?? 'footer_account')],
|
||||
['heading' => $footerContent['legal_heading'] ?? 'Legal', 'items' => $navigation->location($footerContent['legal_menu_location'] ?? 'footer_legal')],
|
||||
])->filter(fn(array $column) => $column['items'] !== []);
|
||||
$copyright = $siteSettings['copyright'] ?: ('© '.date('Y').' '.$siteSettings['company_name'].'. All rights reserved.');
|
||||
['heading' => $footerContent['explore_heading'] ?? 'Product', 'items' => $navigation->location($footerContent['explore_menu_location'] ?? 'footer', $footerNavigation ?? [])],
|
||||
['heading' => $footerContent['account_heading'] ?? 'Resources', 'items' => $navigation->location($footerContent['account_menu_location'] ?? 'footer_account')],
|
||||
['heading' => $footerContent['legal_heading'] ?? 'Company', 'items' => $navigation->location($footerContent['legal_menu_location'] ?? 'footer_legal')],
|
||||
])->filter(fn (array $column) => $column['items'] !== []);
|
||||
$copyright = ($siteSettings['copyright'] ?? null) ?: ('© '.date('Y').' '.($siteSettings['company_name'] ?? $siteTitle).'. All rights reserved.');
|
||||
@endphp
|
||||
<footer class="footer cms-editable-footer">
|
||||
<div class="wrap footer-grid">
|
||||
<div class="footer-brand"><a class="logo" href="{{ $siteSettings['site_url'] ?: url('/') }}">{{ $siteTitle }}</a><p>{{ $siteDescription }}</p>@if($siteSettings['contact_email'])<a href="mailto:{{ $siteSettings['contact_email'] }}">{{ $siteSettings['contact_email'] }}</a>@endif</div>
|
||||
@foreach($columns as $column)<div class="footer-column"><h3>{{ $column['heading'] }}</h3><ul>@foreach($column['items'] as $link)<li><a href="{{ $link['url'] }}" @if($link['target']) target="{{ $link['target'] }}" rel="noopener" @endif>{{ $link['label'] }}</a></li>@endforeach</ul></div>@endforeach
|
||||
|
||||
<footer class="footer cms-editable-footer" id="contact">
|
||||
<div class="wrap footer-grid footer-grid-premium">
|
||||
<div class="footer-brand">
|
||||
<a class="logo footer-logo" href="{{ $siteSettings['site_url'] ?? url('/') }}">
|
||||
@if ($logoUrl)<img src="{{ $logoUrl }}" alt="{{ $siteTitle }}">@else<span class="footer-brand-mark">A</span>{{ $siteTitle }}@endif
|
||||
</a>
|
||||
<p>{{ $siteDescription }}</p>
|
||||
<div class="footer-socials" aria-label="Social links">
|
||||
<a href="{{ $siteSettings['facebook_url'] ?? '#' }}" aria-label="Facebook">f</a>
|
||||
<a href="{{ $siteSettings['x_url'] ?? '#' }}" aria-label="X">𝕏</a>
|
||||
<a href="{{ $siteSettings['linkedin_url'] ?? '#' }}" aria-label="LinkedIn">in</a>
|
||||
<a href="{{ $siteSettings['github_url'] ?? '#' }}" aria-label="GitHub">⌘</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@foreach($columns as $column)
|
||||
<nav class="footer-column" aria-label="{{ $column['heading'] }}">
|
||||
<h3>{{ $column['heading'] }}</h3>
|
||||
<ul>
|
||||
@foreach($column['items'] as $link)
|
||||
<li><a href="{{ $link['url'] }}" @if($link['target']) target="{{ $link['target'] }}" rel="noopener" @endif>{{ $link['label'] }}</a></li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</nav>
|
||||
@endforeach
|
||||
|
||||
<div class="footer-newsletter">
|
||||
<h3>Stay in the loop</h3>
|
||||
<p>Subscribe to get the latest updates and news.</p>
|
||||
<form class="footer-subscribe" method="POST" action="{{ route('newsletter.public.subscribe') }}">
|
||||
@csrf
|
||||
<label class="sr-only" for="footer-email">Email address</label>
|
||||
<input id="footer-email" type="email" name="email" required placeholder="Enter email address">
|
||||
<button type="submit">Subscribe</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer-bottom">
|
||||
<div class="wrap copyright">
|
||||
<span>{{ $copyright }}</span>
|
||||
<div class="footer-bottom-links">
|
||||
<a href="{{ url('/privacy-policy') }}">Privacy Policy</a>
|
||||
<a href="{{ url('/terms-and-conditions') }}">Terms of Service</a>
|
||||
<a href="#">Cookie Settings</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="wrap copyright"><span>{{ $copyright }}</span>@if(filter_var($footerContent['show_back_to_top'] ?? true,FILTER_VALIDATE_BOOL))<a href="#top">{{ $footerContent['back_to_top_label'] ?? 'Back to top ↑' }}</a>@endif</div>
|
||||
</footer>
|
||||
|
||||
Reference in New Issue
Block a user