monor theme changes

This commit is contained in:
Mark Gregory
2026-07-28 11:48:53 +01:00
parent df5d6077cb
commit eafc5e8063
5 changed files with 171 additions and 92 deletions
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -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>