move into sonardesk
This commit is contained in:
@@ -1 +1,13 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SonarDesk Downloads</title><style>body{font:16px system-ui;background:#f6f8fc;color:#17243c;margin:0}.wrap{max-width:1120px;margin:48px auto;padding:0 24px}h1{font-size:42px;margin-bottom:6px}.card{background:white;border:1px solid #dce3ee;border-radius:14px;padding:22px;margin:18px 0}a.button{display:inline-block;background:#183b73;color:white;padding:10px 18px;border-radius:8px;text-decoration:none}small{color:#58657a}ul{line-height:2}</style></head><body><main class="wrap"><h1>SonarDesk Downloads</h1><p>Current applications and release history.</p>@if($latest)<section class="card"><h2>SonarDesk <small>{{ $latest->version }}</small></h2><p>{{ \Illuminate\Support\Str::limit(strip_tags($latest->release_notes ?? 'Native SonarQube dashboard for macOS.'),190) }}</p><a class="button" href="{{ route('sonardesk.releases.download',$latest) }}">Download for macOS</a> <a href="{{ route('sonardesk.releases.show',$latest) }}">Release notes & requirements</a></section>@endif @if($products->isNotEmpty())<section class="card"><h2>Other downloads</h2><ul>@foreach($products as $product)<li><strong>{{ $product->name }}</strong> {{ $product->version }} ({{ $product->platform }}) — <a href="{{ route('sonardesk.products.download',$product) }}">Download</a> · <a href="{{ route('sonardesk.products.show',$product) }}">Details</a></li>@endforeach</ul></section>@endif<section class="card"><h2>Previous releases</h2><ul>@forelse($releases as $release)<li><strong>{{ $release->version }}</strong> — {{ $release->channel }} · <a href="{{ route('sonardesk.releases.show',$release) }}">Notes</a> · <a href="{{ route('sonardesk.releases.download',$release) }}">Download</a></li>@empty<li>No releases published.</li>@endforelse</ul>{{ $releases->links() }}</section></main></body></html>
|
||||
@extends('sonardesk.layout')
|
||||
@section('title','Downloads & Release Notes')
|
||||
@section('content')
|
||||
<section class="sd-hero" style="padding-bottom:24px"><span class="sd-kicker">SonarDesk / Distribution</span><h1>Downloads <span style="color:var(--gold)">& releases.</span></h1><p class="sd-lead">Installers and published release history, collected in one place. Review details before downloading.</p></section>
|
||||
@if($latest)
|
||||
<section class="sd-section"><div class="sd-section-head"><div><span class="sd-kicker">Latest stable release</span><h2>SonarDesk {{ $latest->version }}</h2><p>{{ \Illuminate\Support\Str::limit(trim(strip_tags($latest->release_notes ?? 'Native SonarQube monitoring for macOS.')), 210) }}</p></div><span class="sd-badge">Stable</span></div><div class="sd-actions"><a class="sd-button" href="{{ route('sonardesk.releases.download',$latest) }}">Download SonarDesk →</a><a class="sd-button secondary" href="{{ route('sonardesk.releases.show',$latest) }}">Release notes & requirements</a></div></section>
|
||||
@endif
|
||||
<section class="sd-section"><div class="sd-section-head"><div><span class="sd-kicker">Product library</span><h2>Available downloads</h2><p>Published products grouped together, with concise descriptions and direct access to details.</p></div></div>
|
||||
@if($products->isNotEmpty())<div class="sd-list">@foreach($products as $product)<article class="sd-row"><div><span class="sd-badge">{{ $product->platform ?: 'Software' }}</span><h3 style="margin-top:10px">{{ $product->name }} <span class="sd-meta">{{ $product->version }}</span></h3><p>{{ \Illuminate\Support\Str::limit(trim(strip_tags($product->description ?? '')), 160) }}</p></div><div class="sd-row-actions"><a class="sd-button secondary" href="{{ route('sonardesk.products.show',$product) }}">Details</a><a class="sd-button" href="{{ route('sonardesk.products.download',$product) }}">Download ↓</a></div></article>@endforeach</div>
|
||||
@else<div class="sd-empty">No additional products have been published yet.</div>@endif
|
||||
</section>
|
||||
<section class="sd-section"><div class="sd-section-head"><div><span class="sd-kicker">Version history</span><h2>Release notes</h2><p>Browse changes and download previous published builds.</p></div></div><div class="sd-list">@forelse($releases as $release)<article class="sd-row"><div><h3>SonarDesk {{ $release->version }} <span class="sd-badge">{{ ucfirst($release->channel) }}</span></h3><p>{{ \Illuminate\Support\Str::limit(trim(strip_tags($release->release_notes ?? 'Release notes available on the details page.')), 160) }}</p><span class="sd-meta">{{ $release->published_at?->format('j M Y') }}</span></div><div class="sd-row-actions"><a class="sd-button secondary" href="{{ route('sonardesk.releases.show',$release) }}">Full notes</a><a class="sd-button" href="{{ route('sonardesk.releases.download',$release) }}">Download ↓</a></div></article>@empty<div class="sd-empty">No releases have been published yet.</div>@endforelse</div><div style="margin-top:24px">{{ $releases->links() }}</div></section>
|
||||
@endsection
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
<!doctype html><html><head><meta name="viewport" content="width=device-width,initial-scale=1"><title>{{ $product->name }}</title></head><body style="font:16px system-ui;max-width:900px;margin:50px auto;padding:20px"><a href="{{ route('sonardesk.downloads') }}">← All downloads</a><h1>{{ $product->name }}</h1><p>Version {{ $product->version }} · {{ $product->platform }}</p><div style="white-space:pre-wrap">{{ $product->description }}</div><p><a href="{{ route('sonardesk.products.download',$product) }}">Download {{ $product->original_filename }}</a></p></body></html>
|
||||
@extends('sonardesk.layout')
|
||||
@section('title', $product->name)
|
||||
@section('content')<section class="sd-hero" style="padding-bottom:24px"><a class="sd-meta" href="{{ route('sonardesk.downloads') }}">← All downloads</a><p class="sd-kicker">Product details</p><h1>{{ $product->name }}</h1><p class="sd-lead">{{ $product->platform }} · Version {{ $product->version }}</p><div class="sd-actions"><a class="sd-button" href="{{ route('sonardesk.products.download',$product) }}">Download {{ $product->original_filename ?: 'file' }} ↓</a><a class="sd-button secondary" href="{{ route('sonardesk.downloads') }}">Other downloads</a></div></section><section class="sd-section"><div class="sd-grid two"><article class="sd-card"><h2>About this product</h2><div class="sd-text">{{ $product->description ?: 'No description provided.' }}</div></article><article class="sd-card"><h2>Download details</h2><p>Platform: {{ $product->platform ?: 'Not specified' }}</p><p>Version: {{ $product->version ?: 'Not specified' }}</p><p>File: {{ $product->original_filename ?: 'Download' }}</p>@if($product->file_size)<p>Size: {{ number_format($product->file_size / 1048576, 1) }} MB</p>@endif</article></div></section>@endsection
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
<!doctype html><html><head><meta name="viewport" content="width=device-width,initial-scale=1"><title>SonarDesk {{ $release->version }}</title></head><body style="font:16px system-ui;max-width:900px;margin:50px auto;padding:20px"><a href="{{ route('sonardesk.downloads') }}">← All downloads</a><h1>SonarDesk {{ $release->version }}</h1><p>Build {{ $release->build_number }} · {{ $release->channel }}</p><h2>Release notes</h2><div style="white-space:pre-wrap">{{ $release->release_notes ?: 'No release notes provided.' }}</div><h2>System requirements</h2><p>macOS {{ $release->minimum_macos ?: 'See application documentation' }} or later.</p><p>SHA-256: <code>{{ $release->sha256 }}</code></p><a href="{{ route('sonardesk.releases.download',$release) }}">Download {{ $release->original_filename }}</a></body></html>
|
||||
@extends('sonardesk.layout')
|
||||
@section('title', 'SonarDesk '.$release->version.' Release Notes')
|
||||
@section('content')<section class="sd-hero" style="padding-bottom:20px"><a class="sd-meta" href="{{ route('sonardesk.downloads') }}">← All downloads</a><p class="sd-kicker">{{ ucfirst($release->channel) }} release · {{ $release->published_at?->format('j M Y') }}</p><h1>SonarDesk <span style="color:var(--gold)">{{ $release->version }}</span></h1><p class="sd-lead">Build {{ $release->build_number ?: '—' }}</p><div class="sd-actions"><a class="sd-button" href="{{ route('sonardesk.releases.download',$release) }}">Download {{ $release->original_filename ?: 'SonarDesk' }} ↓</a><a class="sd-button secondary" href="{{ route('sonardesk.downloads') }}">Browse all releases</a></div></section><section class="sd-section"><div class="sd-grid two" style="grid-template-columns:minmax(0,1.5fr) minmax(280px,.7fr)"><article class="sd-card"><h2>Full release notes</h2><div class="sd-text">{{ $release->release_notes ?: 'No release notes provided.' }}</div></article><article class="sd-card"><h2>System requirements</h2><p>macOS {{ $release->minimum_macos ?: 'Version not specified' }}@if($release->minimum_macos) or later @endif</p><h3>File information</h3><p>{{ $release->original_filename ?: 'SonarDesk installer' }}</p>@if($release->file_size)<p>{{ number_format($release->file_size / 1048576, 1) }} MB</p>@endif @if($release->sha256)<p class="sd-meta">SHA-256</p><code style="font-size:12px;word-break:break-all">{{ $release->sha256 }}</code>@endif</article></div></section>@endsection
|
||||
|
||||
@@ -23,4 +23,10 @@
|
||||
: 'Streamline operations, boost productivity, and improve customer satisfaction with one connected platform built for modern teams.',
|
||||
])
|
||||
@endif
|
||||
<section class="abs-sonardesk-feature" style="background:linear-gradient(115deg,#0d1b30,#172b49);border-block:1px solid #3b4c68;padding:64px 0;color:#f4f6fb">
|
||||
<div style="width:min(1440px,calc(100% - 48px));margin:auto;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:28px">
|
||||
<div style="max-width:740px"><span style="color:#e6bd6b;font-weight:800;font-size:12px;letter-spacing:.16em">ABSDEV SOFTWARE</span><h2 style="font-size:clamp(36px,4vw,56px);margin:12px 0;line-height:1.1">Sonar<span style="color:#e6bd6b">Desk</span></h2><p style="color:#c2d0e2;font-size:18px;line-height:1.6">Native SonarQube monitoring for macOS. Keep quality gates, issues and project health in view, all from your desktop.</p></div>
|
||||
<div style="display:flex;gap:12px;flex-wrap:wrap"><a href="{{ route('absdev.sonardesk.home') }}" style="background:#e6bd6b;color:#0d1b30;padding:13px 20px;border-radius:9px;font-weight:800">Explore SonarDesk →</a><a href="{{ route('sonardesk.downloads') }}" style="border:1px solid #8496af;color:#f4f6fb;padding:13px 20px;border-radius:9px;font-weight:750">Downloads</a></div>
|
||||
</div>
|
||||
</section>
|
||||
@endsection
|
||||
|
||||
@@ -14,13 +14,40 @@
|
||||
@if (filter_var($headerContent['show_navigation'] ?? true, FILTER_VALIDATE_BOOL))
|
||||
<nav class="desktop-nav" aria-label="Primary navigation">
|
||||
@foreach ($navigationLinks as $link)
|
||||
<a href="{{ $link['url'] }}" @if($link['target'] ?? null) target="{{ $link['target'] }}" rel="noopener" @endif>{{ $link['label'] }}</a>
|
||||
@if (strtolower(trim($link['label'])) !== 'products' && strtolower(trim($link['label'])) !== 'sonardesk')
|
||||
@if (!empty($link['children']))
|
||||
<details class="abs-nav-group"><summary>{{ $link['label'] }}</summary><div class="abs-nav-panel">
|
||||
@foreach ($link['children'] as $child)
|
||||
<a href="{{ $child['url'] }}" @if($child['target'] ?? null) target="{{ $child['target'] }}" rel="noopener" @endif>{{ $child['label'] }}</a>
|
||||
@endforeach
|
||||
</div></details>
|
||||
@else
|
||||
<a href="{{ $link['url'] }}" @if($link['target'] ?? null) target="{{ $link['target'] }}" rel="noopener" @endif>{{ $link['label'] }}</a>
|
||||
@endif
|
||||
@endif
|
||||
@endforeach
|
||||
@if (Route::has('absdev.sonardesk.home'))
|
||||
<a href="{{ route('absdev.sonardesk.home') }}">SonarDesk</a>
|
||||
@endif
|
||||
<details class="abs-nav-group abs-products"><summary>Products <span aria-hidden="true">⌄</span></summary>
|
||||
<div class="abs-nav-panel">
|
||||
<a href="{{ route('absdev.sonardesk.home') }}"><strong>SonarDesk</strong><small>Native SonarQube dashboard for Mac</small></a>
|
||||
<a href="{{ route('absdev.sonardesk.features') }}">Features</a>
|
||||
<a href="{{ route('absdev.sonardesk.pricing') }}">Pricing</a>
|
||||
<a href="{{ route('sonardesk.downloads') }}">Downloads & releases</a>
|
||||
</div>
|
||||
</details>
|
||||
</nav>
|
||||
@endif
|
||||
<style>
|
||||
.abs-nav-group{position:relative;display:flex;align-items:center}
|
||||
.abs-nav-group summary{list-style:none;cursor:pointer;color:#ddd;font-size:14px;white-space:nowrap}
|
||||
.abs-nav-group summary::-webkit-details-marker{display:none}
|
||||
.abs-nav-group[open] summary,.abs-nav-group summary:hover{color:#e5b95b}
|
||||
.abs-nav-panel{position:absolute;top:calc(100% + 20px);left:0;width:280px;z-index:100;background:#131d30;border:1px solid #35415a;border-radius:12px;box-shadow:0 22px 45px #0008;padding:9px;display:grid;gap:2px}
|
||||
.abs-nav-panel a{display:block!important;padding:10px 12px!important;color:#eaf0f9!important;border-radius:7px;font-size:13px!important}
|
||||
.abs-nav-panel a:hover{background:#253550;color:#e5b95b!important}
|
||||
.abs-nav-panel small{display:block;color:#aab8ce;font-size:11px}
|
||||
.abs-mobile-products{padding:12px 16px;border-top:1px solid #3a3a3a;display:grid;gap:10px}
|
||||
.abs-mobile-products strong{color:#e5b95b}.abs-mobile-products a{padding:5px 0!important}
|
||||
</style>
|
||||
|
||||
<div class="nav-actions">
|
||||
@auth
|
||||
@@ -42,10 +69,18 @@
|
||||
@if (filter_var($headerContent['show_mobile_menu'] ?? true, FILTER_VALIDATE_BOOL))
|
||||
<div id="{{ $mobileMenuId }}" class="mobile-nav" data-saasland-mobile-nav hidden>
|
||||
@foreach($navigationLinks as $link)
|
||||
<a href="{{ $link['url'] }}" @if($link['target'] ?? null) target="{{ $link['target'] }}" rel="noopener" @endif>{{ $link['label'] }}</a>
|
||||
@if (!in_array(strtolower(trim($link['label'])), ['products', 'sonardesk'], true))
|
||||
<a href="{{ $link['url'] }}" @if($link['target'] ?? null) target="{{ $link['target'] }}" rel="noopener" @endif>{{ $link['label'] }}</a>
|
||||
@foreach(($link['children'] ?? []) as $child)
|
||||
<a href="{{ $child['url'] }}" style="padding-left:28px">{{ $child['label'] }}</a>
|
||||
@endforeach
|
||||
@endif
|
||||
@endforeach
|
||||
@if (Route::has('absdev.sonardesk.home'))
|
||||
<a href="{{ route('absdev.sonardesk.home') }}">SonarDesk</a>
|
||||
@endif
|
||||
<div class="abs-mobile-products"><strong>Products · SonarDesk</strong>
|
||||
<a href="{{ route('absdev.sonardesk.home') }}">Overview</a>
|
||||
<a href="{{ route('absdev.sonardesk.features') }}">Features</a>
|
||||
<a href="{{ route('absdev.sonardesk.pricing') }}">Pricing</a>
|
||||
<a href="{{ route('sonardesk.downloads') }}">Downloads & releases</a>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
@extends('sonardesk.layout')
|
||||
@section('title','Features')
|
||||
@section('content')<section class="hero"><h1>Focus on what matters.</h1><p class="lead">SonarDesk brings SonarQube project health and issue exploration to a native macOS workspace.</p></section><div class="grid"><div class="card"><h2>Quality gates</h2><p>Understand project health quickly.</p></div><div class="card"><h2>Issue details</h2><p>Explore bugs, vulnerabilities and code smells.</p></div><div class="card"><h2>Multiple projects</h2><p>Organise and switch between your projects.</p></div></div>@endsection
|
||||
@section('content')<section class="sd-hero"><span class="sd-kicker">SonarDesk / Features</span><h1>Less switching.<br><span style="color:var(--gold)">More clarity.</span></h1><p class="sd-lead">Stay close to your SonarQube project health with a native macOS workspace.</p><div class="sd-actions"><a class="sd-button" href="{{ route('sonardesk.downloads') }}">Download SonarDesk →</a></div></section><section class="sd-section"><div class="sd-grid"><article class="sd-card"><h3>Quality gates</h3><p>Keep the current status of your projects visible.</p></article><article class="sd-card"><h3>Bugs & vulnerabilities</h3><p>Explore issues and their details without losing context.</p></article><article class="sd-card"><h3>Code smells</h3><p>See maintainability concerns alongside your other quality metrics.</p></article><article class="sd-card"><h3>Multiple servers</h3><p>Connect to and switch between SonarQube servers.</p></article><article class="sd-card"><h3>Project organisation</h3><p>Arrange your project sidebar around your workflow.</p></article><article class="sd-card"><h3>Native macOS experience</h3><p>Designed for the desktop with light and dark appearance support.</p></article></div></section>@endsection
|
||||
|
||||
@@ -1,22 +1,7 @@
|
||||
@extends('sonardesk.layout')
|
||||
@section('title', 'SonarDesk')
|
||||
@section('title','SonarDesk — SonarQube for Mac')
|
||||
@section('content')
|
||||
@php
|
||||
$base = in_array(request()->getHost(), [
|
||||
'sonardesk.absdev.net', 'sonardesk.co.uk', 'www.sonardesk.co.uk',
|
||||
], true) ? '' : '/sonardesk';
|
||||
@endphp
|
||||
<section class="hero">
|
||||
<p style="color:var(--gold);font-weight:700">NATIVE MACOS · SONARQUBE</p>
|
||||
<h1>Code quality, without the clutter.</h1>
|
||||
<p class="lead">Monitor projects, inspect issues and follow quality gates from a purpose-built macOS dashboard.</p>
|
||||
<a class="button" href="{{ $base }}/features">Explore features</a>
|
||||
<a class="button secondary" href="{{ $base }}/pricing">View pricing</a>
|
||||
<a class="button secondary" href="{{ route('sonardesk.downloads') }}">Download SonarDesk</a>
|
||||
</section>
|
||||
<div class="grid">
|
||||
<article class="card"><h2>At a glance</h2><p>Keep quality gates, bugs, vulnerabilities and code smells in view.</p></article>
|
||||
<article class="card"><h2>Project focused</h2><p>Switch between projects and investigate issues with fewer distractions.</p></article>
|
||||
<article class="card"><h2>Built for macOS</h2><p>A native interface designed for your Mac.</p></article>
|
||||
</div>
|
||||
<section class="sd-hero"><span class="sd-kicker">Native macOS · SonarQube</span><h1>Your code quality.<br><span style="color:var(--gold)">Clearly in view.</span></h1><p class="sd-lead">A dedicated Mac dashboard for SonarQube. Follow quality gates, inspect bugs and vulnerabilities, and move between projects without the clutter.</p><div class="sd-actions"><a class="sd-button" href="{{ route('sonardesk.downloads') }}">Browse downloads →</a><a class="sd-button secondary" href="{{ $sdBase }}/features">Explore features</a><a class="sd-button secondary" href="{{ $sdBase }}/pricing">See pricing</a></div><p class="sd-meta">Built for macOS · Connects to your SonarQube server</p></section>
|
||||
<section class="sd-section"><div class="sd-section-head"><div><span class="sd-kicker">Everything in one place</span><h2>Quality signals, not noise.</h2></div></div><div class="sd-grid"><article class="sd-card"><span class="sd-badge">01 / Monitor</span><h3 style="margin-top:16px">Project health at a glance</h3><p>Track quality gates, bugs, vulnerabilities and code smells from a single dashboard.</p></article><article class="sd-card"><span class="sd-badge">02 / Investigate</span><h3 style="margin-top:16px">Go straight to the issue</h3><p>Inspect issue details, navigate results and focus on the work that needs attention.</p></article><article class="sd-card"><span class="sd-badge">03 / Organise</span><h3 style="margin-top:16px">Your projects, your workflow</h3><p>Manage multiple projects and servers in a native Mac interface.</p></article></div></section>
|
||||
<section class="sd-section"><div class="sd-card" style="display:flex;justify-content:space-between;align-items:center;gap:25px;flex-wrap:wrap"><div><span class="sd-kicker">Download centre</span><h2>Ready to get started?</h2><p>Find published installers, release notes and product details.</p></div><div class="sd-actions"><a class="sd-button" href="{{ route('sonardesk.downloads') }}">View all downloads →</a><a class="sd-button secondary" href="{{ route('sonardesk.buy') }}">Plans & licensing</a></div></div></section>
|
||||
@endsection
|
||||
|
||||
@@ -1,50 +1,13 @@
|
||||
@php
|
||||
$isDedicatedHost = in_array(request()->getHost(), [
|
||||
'sonardesk.absdev.net', 'sonardesk.co.uk', 'www.sonardesk.co.uk',
|
||||
], true);
|
||||
$base = $isDedicatedHost ? '' : '/sonardesk';
|
||||
$dedicated = in_array(request()->getHost(), ['sonardesk.absdev.net', 'sonardesk.co.uk', 'www.sonardesk.co.uk'], true);
|
||||
$sdBase = $dedicated ? '' : '/sonardesk';
|
||||
@endphp
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>@yield('title', 'SonarDesk') · ABSDEV</title>
|
||||
<meta name="description" content="SonarDesk, a native macOS dashboard for SonarQube.">
|
||||
<style>
|
||||
:root{color-scheme:dark;--navy:#0d1c36;--gold:#e5b95b;--ink:#eef3fb}
|
||||
*{box-sizing:border-box}
|
||||
body{margin:0;background:linear-gradient(135deg,#0d1c36,#172d4e);color:var(--ink);font:16px/1.6 system-ui,-apple-system,sans-serif}
|
||||
a{color:inherit}
|
||||
header,main,footer{max-width:1200px;margin:auto;padding:24px 32px}
|
||||
header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ffffff26}
|
||||
nav{display:flex;gap:24px;flex-wrap:wrap}
|
||||
.brand{font-weight:800;font-size:24px;letter-spacing:-.5px}
|
||||
.brand span{color:var(--gold)}
|
||||
.hero{padding:96px 0 64px;max-width:850px}
|
||||
h1{font-size:clamp(42px,6vw,76px);line-height:1.08;letter-spacing:-2px;margin:0 0 24px}
|
||||
h2{font-size:32px}
|
||||
.lead{font-size:21px;color:#c5d2e5}
|
||||
.button{display:inline-block;background:var(--gold);color:var(--navy);padding:14px 25px;border-radius:9px;text-decoration:none;font-weight:750;margin:12px 12px 12px 0}
|
||||
.button.secondary{background:#ffffff16;color:white;border:1px solid #ffffff4d}
|
||||
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(245px,1fr));gap:20px;margin:36px 0 80px}
|
||||
.card{padding:28px;border:1px solid #ffffff28;background:#ffffff0b;border-radius:14px}
|
||||
footer{border-top:1px solid #ffffff26;color:#a9b8ce}
|
||||
@media(max-width:650px){header{display:block}nav{margin-top:16px}.hero{padding:56px 0}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a class="brand" href="{{ $base ?: '/' }}">Sonar<span>Desk</span></a>
|
||||
<nav>
|
||||
<a href="{{ $base }}/features">Features</a>
|
||||
<a href="{{ $base }}/pricing">Pricing</a>
|
||||
<a href="{{ route('sonardesk.downloads') }}">Downloads</a>
|
||||
<a href="{{ route('sonardesk.buy') }}">Buy</a>
|
||||
<a href="https://absdev.net">ABSDEV</a>
|
||||
</nav>
|
||||
</header>
|
||||
<main>@yield('content')</main>
|
||||
<footer>SonarDesk by ABSDEV · macOS software</footer>
|
||||
</body>
|
||||
</html>
|
||||
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>@yield('title', 'SonarDesk') · ABSDEV</title><meta name="description" content="SonarDesk — native SonarQube monitoring for macOS.">
|
||||
<style>
|
||||
:root{color-scheme:dark;--navy:#0b1629;--gold:#e6bd6b;--muted:#a9b8ce;--border:#293953;--text:#f1f5fc}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:radial-gradient(ellipse at 85% -10%,#1d385b 0,transparent 42%),#0b1629;color:var(--text);font:16px/1.65 system-ui,-apple-system,sans-serif}a{color:inherit;text-decoration:none}a:hover{color:var(--gold)}.sd-container{width:min(1440px,calc(100% - 64px));margin:auto}.sd-header{border-bottom:1px solid var(--border);background:#0a1525e8;position:sticky;top:0;z-index:30;backdrop-filter:blur(18px)}.sd-header-inner{min-height:76px;display:flex;align-items:center;justify-content:space-between;gap:26px}.sd-brand{font-size:26px;font-weight:850;letter-spacing:-1.3px;white-space:nowrap}.sd-brand span{color:var(--gold)}.sd-nav{display:flex;align-items:center;gap:clamp(12px,2vw,30px);flex-wrap:wrap}.sd-nav a{font-size:14px;color:#c6d3e6}.sd-nav a[aria-current=page],.sd-nav a:hover{color:var(--gold)}.sd-nav .sd-nav-cta{background:var(--gold);color:#101c30;padding:9px 16px;border-radius:8px;font-weight:750}.sd-main{min-height:65vh}.sd-hero{padding:94px 0 65px;max-width:920px}.sd-kicker{font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--gold);font-weight:800}.sd-hero h1{font-size:clamp(43px,5.5vw,78px);line-height:1.07;letter-spacing:-.055em;margin:14px 0 22px}.sd-lead{font-size:clamp(17px,2vw,22px);color:#b9c8dd;max-width:760px;line-height:1.65}.sd-actions{display:flex;gap:12px;flex-wrap:wrap;margin:28px 0}.sd-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--gold);color:#101c30;border:1px solid var(--gold);border-radius:9px;padding:12px 20px;font-weight:800;font-size:14px}.sd-button:hover{background:#f3d390;color:#101c30}.sd-button.secondary{background:transparent;color:#eef4ff;border-color:#425575}.sd-button.secondary:hover{border-color:var(--gold);color:var(--gold)}.sd-section{padding:34px 0 65px}.sd-section-head{display:flex;justify-content:space-between;align-items:end;gap:24px;flex-wrap:wrap;margin-bottom:24px}.sd-section h2{font-size:clamp(26px,3vw,38px);letter-spacing:-.035em;margin:0 0 8px}.sd-section p{color:#b3c2d8}.sd-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.sd-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}.sd-card{min-width:0;background:linear-gradient(150deg,#192941,#101d30);border:1px solid #30425d;border-radius:14px;padding:26px}.sd-card h2,.sd-card h3{margin:0 0 9px;line-height:1.3}.sd-card p{color:#b5c3d6;margin:8px 0 16px}.sd-card .sd-actions{margin-bottom:0}.sd-meta{color:#aabbd2;font-size:13px}.sd-badge{display:inline-block;background:#e6bd6b18;color:var(--gold);border:1px solid #e6bd6b60;border-radius:99px;padding:3px 11px;font-size:12px;font-weight:750}.sd-list{display:grid;gap:12px}.sd-row{display:flex;align-items:center;justify-content:space-between;gap:22px;background:#15243a;border:1px solid var(--border);border-radius:12px;padding:20px 24px}.sd-row h3{margin:0 0 4px}.sd-row p{margin:4px 0;color:#b2c1d6}.sd-row-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;flex-shrink:0}.sd-text{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.75;color:#c6d3e4}.sd-footer{margin-top:60px;border-top:1px solid var(--border);padding:32px 0;color:#98acc8}.sd-footer-inner{display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap}.sd-footer a{margin-left:18px}.sd-price{font-size:32px;font-weight:850;color:#fff}.sd-muted{color:#aabbd2}.sd-empty{border:1px dashed #465a78;border-radius:12px;padding:28px;color:#b8c7db}.sd-checks{padding-left:20px;color:#c0cde0}.sd-checks li{margin:8px 0}code{overflow-wrap:anywhere}@media(max-width:900px){.sd-grid,.sd-grid.two{grid-template-columns:1fr 1fr}.sd-header-inner{align-items:flex-start;flex-direction:column;padding:16px 0}.sd-nav{gap:14px}.sd-hero{padding:65px 0 40px}}@media(max-width:650px){.sd-container{width:calc(100% - 36px)}.sd-grid,.sd-grid.two{grid-template-columns:1fr}.sd-row{align-items:stretch;flex-direction:column}.sd-row-actions{flex-shrink:1}.sd-header{position:static}.sd-nav a{font-size:13px}.sd-hero h1{font-size:43px}.sd-card{padding:21px}}
|
||||
</style></head><body>
|
||||
<header class="sd-header"><div class="sd-container sd-header-inner"><a class="sd-brand" href="{{ $sdBase ?: '/' }}">Sonar<span>Desk</span></a><nav class="sd-nav" aria-label="SonarDesk navigation"><a href="{{ $sdBase ?: '/' }}">Overview</a><a href="{{ $sdBase }}/features">Features</a><a href="{{ $sdBase }}/pricing">Pricing</a><a href="{{ route('sonardesk.downloads') }}">Downloads</a><a href="{{ route('account.sonardesk.index') }}">My licences</a><a href="{{ url('/') }}">ABSDEV</a><a class="sd-nav-cta" href="{{ route('sonardesk.buy') }}">Get SonarDesk</a></nav></div></header>
|
||||
<main class="sd-container sd-main">@yield('content')</main>
|
||||
<footer class="sd-footer"><div class="sd-container sd-footer-inner"><span>SonarDesk by ABSDEV · Native macOS software</span><div><a href="{{ route('sonardesk.downloads') }}">Downloads</a><a href="{{ route('sonardesk.buy') }}">Licensing</a><a href="{{ route('account.sonardesk.index') }}">Account</a></div></div></footer></body></html>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
@extends('sonardesk.layout')
|
||||
@section('title','Pricing')
|
||||
@section('content')<section class="hero"><h1>Simple plans for developers.</h1><p class="lead">Choose a plan that fits your workflow. Checkout will be available once the existing payment integration has passed migration verification.</p></section><div class="grid"><div class="card"><h2>Personal</h2><p>£4.99/month or £39.99/year</p></div><div class="card"><h2>Professional</h2><p>£8.99/month or £79.99/year</p></div></div>@endsection
|
||||
@section('content')<section class="sd-hero"><span class="sd-kicker">SonarDesk / Licensing</span><h1>Simple plans.<br><span style="color:var(--gold)">Built for developers.</span></h1><p class="sd-lead">Choose the SonarDesk licence that fits your workflow. Checkout and subscription management remain with the existing SonarDesk licensing service.</p></section><section class="sd-section"><div class="sd-grid two"><article class="sd-card"><span class="sd-badge">Personal</span><h2 style="margin-top:18px">For individual developers</h2><p><span class="sd-price">£4.99</span> / month</p><p>Or £39.99 billed annually.</p><a class="sd-button" href="{{ route('sonardesk.buy') }}">View purchase options →</a></article><article class="sd-card"><span class="sd-badge">Professional</span><h2 style="margin-top:18px">For advanced workflows</h2><p><span class="sd-price">£8.99</span> / month</p><p>Or £79.99 billed annually.</p><a class="sd-button" href="{{ route('sonardesk.buy') }}">View purchase options →</a></article></div><p class="sd-muted" style="margin-top:22px">The purchase page shows whether checkout is currently enabled. No payment is taken directly on ABSDEV.</p></section>@endsection
|
||||
|
||||
Reference in New Issue
Block a user