download fixes
This commit is contained in:
@@ -1,13 +1,22 @@
|
||||
@extends('layouts.app', ['title' => 'Download SonarDesk — Native SonarQube monitoring for macOS', 'description' => 'Download the latest signed SonarDesk release for macOS, review release notes and system requirements.'])
|
||||
@extends('layouts.app', ['title' => 'Downloads — SonarDesk'])
|
||||
@section('fullbleed')
|
||||
<main class="download-page"><section class="download-hero"><div class="download-shell"><div class="download-copy"><span class="eyebrow">{{ $settings['eyebrow'] }}</span><h1>{{ $settings['title'] }}</h1><p>{{ $settings['intro'] }}</p>@if($latest)<div class="download-actions"><a class="btn download-primary" href="{{ route('download.latest') }}"><span class="download-icon">↓</span><span><strong>Download SonarDesk {{ $latest->version }}</strong><small>{{ $latest->formatted_size }} · macOS {{ $latest->minimum_macos ?: 'supported versions' }}</small></span></a><a class="btn download-secondary" href="#release-notes">View release notes</a></div><div class="release-verification"><span>✓ Signed distribution</span><span>✓ SHA-256 verified</span><span>✓ Secure licence activation</span></div>@else<div class="no-release"><strong>The next SonarDesk release is being prepared.</strong><span>Check back shortly or contact support.</span></div>@endif</div><div class="product-visual"><div class="mac-window"><div class="mac-titlebar"><i></i><i></i><i></i><span>SonarDesk</span></div><div class="mac-content"><div class="mini-sidebar"><img src="{{ asset('icons/sonardesk-icon-64.png') }}" alt=""><b>SonarDesk</b><span class="active"></span><span></span><span></span><span></span><span></span></div><div class="mini-dashboard"><div class="mini-head"><b>Project health</b><em>All systems monitored</em></div><div class="mini-stats"><i></i><i></i><i></i><i></i></div><div class="mini-chart"><span></span><span></span><span></span><span></span><span></span><span></span></div></div></div></div><div class="visual-badge"><span>Native</span><strong>Built for macOS</strong></div></div></div></section>
|
||||
<section class="download-confidence"><div class="download-shell confidence-grid"><div><span>Native macOS</span><strong>Fast, focused desktop workflow</strong></div><div><span>SonarQube</span><strong>Your server remains the source of truth</strong></div><div><span>Security</span><strong>Tokens protected by macOS Keychain</strong></div><div><span>Updates</span><strong>Professional in-app release delivery</strong></div></div></section>
|
||||
@if($latest)
|
||||
<div class="download-shell download-content"><section id="release-notes" class="release-notes-panel"><div class="release-heading"><div><span class="eyebrow">Latest stable release</span><h2>SonarDesk {{ $latest->version }}</h2><p>Build {{ $latest->build_number }} · Released {{ $latest->published_at?->format('j F Y') }}</p></div><a class="btn btn-primary" href="{{ route('download.release',$latest) }}">Download {{ $latest->version }}</a></div><div class="release-note-copy">{!! nl2br(e($latest->release_notes ?: 'This release contains the latest SonarDesk improvements and maintenance updates.')) !!}</div><details class="checksum-box"><summary>SHA-256 checksum · Verify download</summary><code>{{ $latest->sha256 }}</code></details></section><aside class="requirements-panel"><span class="eyebrow">Before you install</span><h2>System requirements</h2><p>{{ $settings['requirements'] }}</p><ol><li><span>1</span><div><strong>Download</strong><small>Get the latest signed SonarDesk package.</small></div></li><li><span>2</span><div><strong>Install</strong><small>Open the DMG and move SonarDesk to Applications.</small></div></li><li><span>3</span><div><strong>Activate</strong><small>Enter the licence key delivered after purchase.</small></div></li></ol><a href="{{ route('buy') }}">Need a licence? View pricing →</a></aside></div>
|
||||
@endif
|
||||
@if($products->isNotEmpty())
|
||||
<section class="distribution-catalogue"><div class="download-shell"><div class="section-heading"><span class="eyebrow">SOFTWARE LIBRARY</span><h2>Available downloads</h2><p>Installers and tools, ready to download.</p></div><div class="distribution-product-grid">@foreach($products as $product)<article class="distribution-product-card"><div class="distribution-product-main"><div class="distribution-product-icon" aria-hidden="true">↓</div><div class="distribution-product-info"><div class="distribution-product-top"><span class="distribution-platform">{{ $product->platform ?: 'Software' }}</span><span class="distribution-version">{{ $product->version ? 'Version '.$product->version : 'Latest' }}</span></div><h3>{{ $product->name }}</h3><p>{{ $product->description ?: 'Download the latest available package.' }}</p></div></div><div class="distribution-product-footer"><span>{{ $product->formatted_size }}</span><a class="btn btn-primary" href="{{ route('download.product',$product) }}" aria-label="Download {{ $product->name }}">Download <span aria-hidden="true">↓</span></a></div></article>@endforeach</div></div></section>
|
||||
@endif
|
||||
<section class="release-history"><div class="download-shell"><div class="section-heading"><span class="eyebrow">Release archive</span><h2>Previous versions</h2><p>Published SonarDesk builds remain available here for customers who need a previous release.</p></div><div class="release-history-list">@forelse($releases as $release)<article><div><strong>SonarDesk {{ $release->version }}</strong><span>Build {{ $release->build_number }} · {{ ucfirst($release->channel) }} · {{ $release->published_at?->format('j M Y') }}</span></div><div><span>{{ $release->formatted_size }}</span><a href="{{ route('download.release',$release) }}">Download</a></div></article>@empty<p>No published releases are available yet.</p>@endforelse</div>{{ $releases->links() }}</div></section>
|
||||
<section class="download-support"><div class="download-shell"><div><span class="eyebrow">Support</span><h2>Installation or activation help?</h2><p>{{ $settings['support_text'] }}</p></div><a class="btn btn-secondary" href="{{ route('support') }}">Contact SonarDesk support</a></div></section></main>
|
||||
<main class="download-page sd-downloads-v3">
|
||||
<div class="download-shell sd3-container">
|
||||
<header class="sd3-heading"><div><span class="eyebrow">SOFTWARE DISTRIBUTION</span><h1>Downloads</h1><p>Installers and releases, all in one place.</p></div></header>
|
||||
@if($latest)
|
||||
<section class="sd3-featured" aria-label="Featured SonarDesk release"><div><span class="sd3-tag">FEATURED · macOS</span><h2>SonarDesk <span>{{ $latest->version }}</span></h2><p>A native SonarQube workspace for macOS. Monitor project health and manage quality from your desktop.</p><div class="sd3-meta">{{ $latest->formatted_size }} · Build {{ $latest->build_number }} · {{ $latest->published_at?->format('j M Y') }}</div></div><div class="sd3-feature-actions"><a class="btn btn-primary" href="{{ route('download.latest') }}">Download for macOS ↓</a><a href="#release-notes">Release notes →</a></div></section>
|
||||
@endif
|
||||
@if($products->isNotEmpty())
|
||||
<section class="sd3-section" aria-label="Software catalogue"><div class="sd3-section-title"><div><span class="eyebrow">SOFTWARE CATALOGUE</span><h2>Available products</h2></div><span>{{ $products->count() }} {{ $products->count() === 1 ? 'product' : 'products' }}</span></div>
|
||||
<div class="sd3-products">@foreach($products as $product)
|
||||
<article class="sd3-product"><div class="sd3-product-mark" aria-hidden="true">↓</div><div class="sd3-product-copy"><h3>{{ $product->name }}</h3><p>{{ $product->description ?: 'Software installer available for download.' }}</p><div class="sd3-product-meta"><span>{{ $product->platform ?: 'Software' }}</span><span>{{ $product->version ? 'v'.$product->version : 'Latest' }}</span><span>{{ $product->formatted_size }}</span></div></div><a class="sd3-download-link" href="{{ route('download.product', $product) }}" aria-label="Download {{ $product->name }}">Download ↓</a></article>
|
||||
@endforeach</div></section>
|
||||
@endif
|
||||
@if($latest)
|
||||
<details class="sd3-details" id="release-notes"><summary>SonarDesk {{ $latest->version }} release notes <span>Show details +</span></summary><div class="sd3-details-body"><p>{!! nl2br(e($latest->release_notes ?: 'Latest SonarDesk improvements and maintenance updates.')) !!}</p>@if($latest->sha256)<div><strong>SHA-256</strong><code>{{ $latest->sha256 }}</code></div>@endif</div></details>
|
||||
@endif
|
||||
<section class="sd3-section sd3-archive"><div class="sd3-section-title"><div><span class="eyebrow">RELEASE HISTORY</span><h2>Previous SonarDesk versions</h2></div></div><div class="sd3-history">@forelse($releases as $release)<div class="sd3-history-row"><div><strong>SonarDesk {{ $release->version }}</strong><span>Build {{ $release->build_number }} · {{ ucfirst($release->channel) }} · {{ $release->published_at?->format('j M Y') }}</span></div><span>{{ $release->formatted_size }}</span><a href="{{ route('download.release', $release) }}">Download ↓</a></div>@empty<p class="sd3-empty">No previous releases available.</p>@endforelse</div>{{ $releases->links() }}</section>
|
||||
<aside class="sd3-help"><div><h2>Need help installing or activating?</h2><p>{{ $settings['support_text'] }}</p></div><a class="btn btn-secondary" href="{{ route('support') }}">Contact support →</a></aside>
|
||||
</div>
|
||||
</main>
|
||||
@endsection
|
||||
|
||||
@@ -224,6 +224,56 @@
|
||||
.download-page .release-history{padding:40px 0}
|
||||
.download-page .release-history .section-heading h2{font-size:28px}
|
||||
@media(max-width:640px){.download-page .distribution-catalogue{padding:28px 0 34px}.download-page .distribution-product-card{padding:16px}}
|
||||
|
||||
/* SonarDesk downloads v3 — intentionally compact, no empty two-column release panel */
|
||||
.sd-downloads-v3{background:#f5f7fb;color:#172033;padding:40px 0 64px}
|
||||
.sd-downloads-v3 .sd3-container{max-width:1060px;margin:0 auto}
|
||||
.sd-downloads-v3 .sd3-heading{margin:0 0 22px}
|
||||
.sd-downloads-v3 .sd3-heading h1{font-size:clamp(30px,4vw,42px);letter-spacing:-.04em;margin:5px 0 5px;color:#172033}
|
||||
.sd-downloads-v3 .sd3-heading p{color:#64748b;margin:0;font-size:14px}
|
||||
.sd-downloads-v3 .sd3-featured{display:flex;justify-content:space-between;align-items:center;gap:24px;padding:25px 30px;margin:0 0 28px;border-radius:16px;background:linear-gradient(115deg,#101c34,#203657);color:white}
|
||||
.sd-downloads-v3 .sd3-tag{font-size:10px;font-weight:800;letter-spacing:.13em;color:#e8bc66}
|
||||
.sd-downloads-v3 .sd3-featured h2{font-size:28px;color:white;letter-spacing:-.03em;margin:7px 0}
|
||||
.sd-downloads-v3 .sd3-featured h2 span{font-weight:500;color:#cbd5e1}
|
||||
.sd-downloads-v3 .sd3-featured p{font-size:13px;color:#d3dceb;max-width:540px;margin:0 0 10px;line-height:1.6}
|
||||
.sd-downloads-v3 .sd3-meta{font-size:11px;color:#b9c6d9}
|
||||
.sd-downloads-v3 .sd3-feature-actions{display:flex;flex-direction:column;align-items:center;gap:10px;flex-shrink:0}
|
||||
.sd-downloads-v3 .sd3-feature-actions .btn{background:#e8bc66;color:#172033;border:0;white-space:nowrap;padding:12px 18px}
|
||||
.sd-downloads-v3 .sd3-feature-actions>a:not(.btn){color:#e2e8f0;font-size:12px}
|
||||
.sd-downloads-v3 .sd3-section{margin:0 0 25px}
|
||||
.sd-downloads-v3 .sd3-section-title{display:flex;align-items:end;justify-content:space-between;gap:15px;margin:0 0 13px}
|
||||
.sd-downloads-v3 .sd3-section-title h2{font-size:22px;letter-spacing:-.03em;margin:4px 0 0;color:#172033}
|
||||
.sd-downloads-v3 .sd3-section-title>span{font-size:12px;color:#64748b}
|
||||
.sd-downloads-v3 .sd3-products{display:grid;grid-template-columns:1fr 1fr;gap:12px}
|
||||
.sd-downloads-v3 .sd3-product{display:flex;align-items:center;gap:14px;min-height:110px;padding:17px 18px;border:1px solid #e1e7ef;border-radius:12px;background:#fff;box-shadow:0 2px 7px rgba(15,23,42,.025)}
|
||||
.sd-downloads-v3 .sd3-product-mark{width:38px;height:38px;flex:0 0 38px;display:grid;place-items:center;background:#eaf0fa;color:#244a88;border-radius:9px;font-size:18px}
|
||||
.sd-downloads-v3 .sd3-product-copy{flex:1;min-width:0}
|
||||
.sd-downloads-v3 .sd3-product h3{font-size:16px;line-height:1.3;margin:0 0 4px;color:#172033}
|
||||
.sd-downloads-v3 .sd3-product p{font-size:12px;line-height:1.45;color:#64748b;margin:0 0 8px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
|
||||
.sd-downloads-v3 .sd3-product-meta{display:flex;flex-wrap:wrap;gap:6px 10px;color:#66758b;font-size:10px}
|
||||
.sd-downloads-v3 .sd3-download-link{white-space:nowrap;align-self:center;font-size:12px;font-weight:800;color:#1d4ed8;text-decoration:none}
|
||||
.sd-downloads-v3 .sd3-download-link:hover{text-decoration:underline}
|
||||
.sd-downloads-v3 .sd3-details{border:1px solid #e1e7ef;border-radius:12px;background:#fff;margin:20px 0;padding:0}
|
||||
.sd-downloads-v3 .sd3-details summary{cursor:pointer;display:flex;justify-content:space-between;gap:10px;padding:15px 18px;font-size:13px;font-weight:750;list-style:none}
|
||||
.sd-downloads-v3 .sd3-details summary::-webkit-details-marker{display:none}
|
||||
.sd-downloads-v3 .sd3-details summary span{color:#64748b;font-weight:500}
|
||||
.sd-downloads-v3 .sd3-details-body{border-top:1px solid #e1e7ef;padding:15px 18px;font-size:12px;line-height:1.6}
|
||||
.sd-downloads-v3 .sd3-details-body code{display:block;overflow-wrap:anywhere;font-size:11px;margin-top:5px}
|
||||
.sd-downloads-v3 .sd3-archive{margin-top:26px}
|
||||
.sd-downloads-v3 .sd3-history{border:1px solid #e1e7ef;border-radius:12px;background:#fff;overflow:hidden}
|
||||
.sd-downloads-v3 .sd3-history-row{display:flex;align-items:center;gap:20px;justify-content:space-between;padding:13px 18px;border-bottom:1px solid #edf0f5;font-size:12px}
|
||||
.sd-downloads-v3 .sd3-history-row:last-child{border-bottom:0}
|
||||
.sd-downloads-v3 .sd3-history-row>div{flex:1}
|
||||
.sd-downloads-v3 .sd3-history-row strong,.sd-downloads-v3 .sd3-history-row div span{display:block}
|
||||
.sd-downloads-v3 .sd3-history-row div span,.sd-downloads-v3 .sd3-history-row>span{color:#64748b;font-size:11px;margin-top:3px}
|
||||
.sd-downloads-v3 .sd3-history-row a{color:#1d4ed8;font-weight:750}
|
||||
.sd-downloads-v3 .sd3-empty{padding:15px 18px;font-size:12px;color:#64748b;margin:0}
|
||||
.sd-downloads-v3 .sd3-help{display:flex;align-items:center;justify-content:space-between;gap:20px;border-top:1px solid #dce4ee;margin-top:26px;padding-top:22px}
|
||||
.sd-downloads-v3 .sd3-help h2{font-size:17px;margin:0 0 5px;color:#172033}
|
||||
.sd-downloads-v3 .sd3-help p{font-size:12px;color:#64748b;margin:0}
|
||||
@media(max-width:800px){.sd-downloads-v3 .sd3-products{grid-template-columns:1fr}.sd-downloads-v3 .sd3-featured{align-items:flex-start;flex-direction:column}.sd-downloads-v3 .sd3-feature-actions{align-items:flex-start}}
|
||||
@media(max-width:550px){.sd-downloads-v3{padding:25px 0}.sd-downloads-v3 .sd3-product{flex-wrap:wrap}.sd-downloads-v3 .sd3-download-link{margin-left:52px}.sd-downloads-v3 .sd3-help{flex-direction:column;align-items:flex-start}.sd-downloads-v3 .sd3-history-row{gap:10px;flex-wrap:wrap}}
|
||||
|
||||
</style>
|
||||
@stack('head')
|
||||
</head>
|
||||
|
||||
Reference in New Issue
Block a user