434 lines
75 KiB
PHP
434 lines
75 KiB
PHP
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
|
||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||
|
||
@php
|
||
$seoSiteName = \App\Models\SiteSetting::valueFor('seo_site_name', 'SonarDesk');
|
||
$seoDefaultTitle = \App\Models\SiteSetting::valueFor('seo_default_title', 'SonarDesk — Native SonarQube Monitoring for macOS');
|
||
$seoDefaultDescription = \App\Models\SiteSetting::valueFor('seo_default_description', 'Native SonarQube monitoring for macOS. Track projects, quality gates, bugs, vulnerabilities and code smells from one professional desktop app.');
|
||
$pageTitle = $title ?? $seoDefaultTitle;
|
||
$pageDescription = $description ?? $seoDefaultDescription;
|
||
$pageKeywords = $keywords ?? \App\Models\SiteSetting::valueFor('seo_default_keywords');
|
||
$canonicalBase = rtrim(\App\Models\SiteSetting::valueFor('seo_canonical_base_url', config('app.url')), '/');
|
||
$canonicalUrl = $canonical ?? ($canonicalBase . request()->getPathInfo());
|
||
$socialImage = $ogImage ?? \App\Models\SiteSetting::valueFor('seo_default_og_image', url('/icons/og-sonardesk.png'));
|
||
$ogTitle = $ogTitle ?? $pageTitle;
|
||
$ogDescription = $ogDescription ?? $pageDescription;
|
||
$robotsIndex = $robotsIndex ?? true;
|
||
$robotsFollow = $robotsFollow ?? true;
|
||
$productionIndexing = app()->environment('production') && \App\Models\SiteSetting::booleanFor('seo_robots_enabled', true);
|
||
$robots = $productionIndexing ? (($robotsIndex ? 'index' : 'noindex').','.($robotsFollow ? 'follow' : 'nofollow').',max-image-preview:large,max-snippet:-1,max-video-preview:-1') : 'noindex,nofollow';
|
||
$twitterSite = \App\Models\SiteSetting::valueFor('seo_twitter_site');
|
||
$googleVerification = \App\Models\SiteSetting::valueFor('seo_google_site_verification');
|
||
$organizationName = \App\Models\SiteSetting::valueFor('seo_organization_name', $seoSiteName);
|
||
$organizationLogo = \App\Models\SiteSetting::valueFor('seo_organization_logo', url('/icons/sonardesk-icon-512.png'));
|
||
$schema = [
|
||
'@context' => 'https://schema.org', '@type' => 'SoftwareApplication', 'name' => $seoSiteName,
|
||
'applicationCategory' => 'DeveloperApplication', 'operatingSystem' => 'macOS', 'url' => route('home'),
|
||
'description' => $seoDefaultDescription, 'publisher' => ['@type' => 'Organization', 'name' => $organizationName, 'logo' => ['@type' => 'ImageObject', 'url' => $organizationLogo]],
|
||
];
|
||
@endphp
|
||
|
||
<title>{{ $pageTitle }}</title>
|
||
<meta name="description" content="{{ $pageDescription }}">
|
||
@if($pageKeywords)<meta name="keywords" content="{{ $pageKeywords }}">@endif
|
||
<meta name="robots" content="{{ $robots }}">
|
||
<meta name="googlebot" content="{{ $robots }}">
|
||
@if($googleVerification)<meta name="google-site-verification" content="{{ $googleVerification }}">@endif
|
||
<meta name="theme-color" content="#0b1220">
|
||
<meta name="application-name" content="{{ $seoSiteName }}">
|
||
<meta name="apple-mobile-web-app-title" content="{{ $seoSiteName }}">
|
||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||
<meta name="msapplication-TileColor" content="#2563eb">
|
||
<meta name="msapplication-config" content="{{ asset('browserconfig.xml') }}">
|
||
|
||
<link rel="canonical" href="{{ $canonicalUrl }}">
|
||
<link rel="icon" href="{{ asset('favicon.ico') }}" sizes="any">
|
||
<link rel="icon" type="image/png" sizes="32x32" href="{{ asset('icons/favicon-32x32.png') }}">
|
||
<link rel="icon" type="image/png" sizes="16x16" href="{{ asset('icons/favicon-16x16.png') }}">
|
||
<link rel="apple-touch-icon" sizes="180x180" href="{{ asset('icons/apple-touch-icon.png') }}">
|
||
<link rel="mask-icon" href="{{ asset('icons/safari-pinned-tab.svg') }}" color="#2563eb">
|
||
<link rel="manifest" href="{{ asset('site.webmanifest') }}">
|
||
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:site_name" content="{{ $seoSiteName }}">
|
||
<meta property="og:title" content="{{ $ogTitle }}">
|
||
<meta property="og:description" content="{{ $ogDescription }}">
|
||
<meta property="og:url" content="{{ $canonicalUrl }}">
|
||
<meta property="og:image" content="{{ $socialImage }}">
|
||
<meta property="og:image:alt" content="{{ $ogTitle }}">
|
||
<meta name="twitter:card" content="summary_large_image">
|
||
@if($twitterSite)<meta name="twitter:site" content="{{ str_starts_with($twitterSite, '@') ? $twitterSite : '@'.$twitterSite }}">@endif
|
||
<meta name="twitter:title" content="{{ $ogTitle }}">
|
||
<meta name="twitter:description" content="{{ $ogDescription }}">
|
||
<meta name="twitter:image" content="{{ $socialImage }}">
|
||
<script type="application/ld+json">{!! json_encode($schema, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE) !!}</script>
|
||
|
||
<style>
|
||
:root{
|
||
color-scheme:light;
|
||
--bg:#f7f9fc;--surface:#fff;--surface-soft:#f8fafc;--text:#172033;--muted:#667085;
|
||
--line:#e4e7ec;--line-strong:#d0d5dd;--blue:#2563eb;--blue-dark:#1d4ed8;--blue-soft:#eff6ff;
|
||
--green:#067647;--green-soft:#ecfdf3;--red:#b42318;--red-soft:#fef3f2;--nav:#0b1220;
|
||
--shadow-sm:0 1px 3px rgba(16,24,40,.06);--shadow-md:0 14px 36px rgba(15,23,42,.08);
|
||
}
|
||
*{box-sizing:border-box}
|
||
html{scroll-behavior:smooth}
|
||
body{font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",sans-serif;margin:0;background:var(--bg);color:var(--text);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}
|
||
a{color:inherit}
|
||
img{max-width:100%;display:block}
|
||
button,input{font:inherit}
|
||
:focus-visible{outline:3px solid rgba(37,99,235,.28);outline-offset:3px}
|
||
|
||
.site-header{position:sticky;top:0;z-index:50;background:rgba(11,18,32,.94);backdrop-filter:saturate(180%) blur(18px);border-bottom:1px solid rgba(255,255,255,.08)}
|
||
.nav-shell{max-width:1220px;margin:0 auto;min-height:68px;padding:0 24px;display:flex;align-items:center;gap:28px}
|
||
.brand{display:inline-flex;align-items:center;gap:10px;color:#fff;text-decoration:none;font-weight:800;letter-spacing:-.01em;white-space:nowrap}
|
||
.brand img{width:34px;height:34px;border-radius:9px;box-shadow:0 5px 14px rgba(37,99,235,.25)}
|
||
.nav-links{display:flex;align-items:center;gap:22px}
|
||
.nav-links a{color:#cbd5e1;text-decoration:none;font-weight:650;font-size:14px;transition:color .16s ease}
|
||
.nav-links a:hover{color:#fff}.nav-alert-count{display:inline-flex;min-width:18px;height:18px;align-items:center;justify-content:center;margin-left:5px;padding:0 5px;border-radius:99px;background:#ef4444;color:#fff;font-size:10px;font-weight:900;vertical-align:1px}
|
||
.nav-account{margin-left:auto;display:flex;align-items:center;gap:12px;min-width:0}
|
||
.nav-email{color:#cbd5e1;font-size:13px;max-width:230px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||
.nav-auth-link{color:#e2e8f0;text-decoration:none;font-weight:650;font-size:14px}
|
||
.nav-cta{display:inline-flex;align-items:center;justify-content:center;padding:9px 13px;border-radius:9px;background:#fff;color:#0f172a!important;text-decoration:none!important;font-weight:800!important}
|
||
.nav-signout{background:transparent;border:1px solid rgba(255,255,255,.18);color:#e2e8f0;padding:8px 11px;border-radius:9px;font-weight:700;cursor:pointer}
|
||
.nav-signout:hover{background:rgba(255,255,255,.08)}
|
||
|
||
.wrap{max-width:1120px;margin:0 auto;padding:42px 24px 72px;min-height:calc(100vh - 220px)}
|
||
.wrap-wide{max-width:1220px}
|
||
.hero-card{padding:28px 0 18px}
|
||
.hero-card h1,.portal-header h1,.licence-detail-head h1{font-size:38px;line-height:1.08;margin:7px 0 10px;letter-spacing:-.035em}
|
||
.eyebrow{text-transform:uppercase;letter-spacing:.12em;font-size:11px;font-weight:850;color:var(--blue)}
|
||
.lead{font-size:17px;line-height:1.62;max-width:720px;color:#475467}.lead.compact{margin:0}
|
||
|
||
.btn,button{display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:10px;padding:10px 15px;background:var(--blue);color:#fff;text-decoration:none;cursor:pointer;font:inherit;font-weight:750;line-height:1.2;transition:transform .15s ease,background .15s ease,box-shadow .15s ease}
|
||
.btn:hover,button:hover{background:var(--blue-dark)}
|
||
.btn-primary{box-shadow:0 7px 18px rgba(37,99,235,.22)}
|
||
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 9px 22px rgba(37,99,235,.28)}
|
||
.btn-secondary,button.btn-secondary{background:#fff;color:#344054;border:1px solid #d0d5dd;box-shadow:none}
|
||
.btn-secondary:hover,button.btn-secondary:hover{background:#f9fafb}
|
||
.btn-dark{background:#111827}.btn-dark:hover{background:#030712}
|
||
.danger{background:var(--red)}.danger:hover{background:#912018}
|
||
.danger-outline{background:#fff;color:var(--red);border:1px solid #f3b7b2}.danger-outline:hover{background:var(--red-soft)}
|
||
.full-width{width:100%}
|
||
|
||
.marketing-hero{padding:72px 0 46px}.marketing-hero h1{max-width:900px;font-size:64px;line-height:1.01;margin:12px 0 20px}.marketing-hero .lead{font-size:20px;max-width:820px}.compact-hero{padding-bottom:36px}.compact-hero h1{font-size:52px}.marketing-actions{margin-top:28px}.microcopy{font-size:13px;color:var(--muted);margin-top:14px}.trust-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:14px;overflow:hidden;margin:0 0 68px}.trust-strip span{background:var(--surface);padding:18px;text-align:center;font-size:13px;font-weight:750;color:#475467}.section-block{padding:24px 0 64px}.section-heading{max-width:760px;margin-bottom:28px}.section-heading h2,.split-panel h2,.cta-panel h2{font-size:38px;line-height:1.12;letter-spacing:-.03em;margin:8px 0 12px}.section-heading p{font-size:17px;color:#667085}.feature-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.feature-card{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:24px;box-shadow:var(--shadow-sm)}.feature-card h3{font-size:19px;margin:18px 0 8px}.feature-card p{color:#667085;margin:0}.feature-icon{display:inline-flex;width:38px;height:38px;align-items:center;justify-content:center;border-radius:10px;background:var(--blue-soft);color:var(--blue-dark);font-size:12px;font-weight:900}.split-panel{display:grid;grid-template-columns:1.2fr .8fr;gap:44px;align-items:center;background:#0f172a;color:#fff;border-radius:22px;padding:42px;margin-bottom:64px}.split-panel .lead{color:#cbd5e1}.check-panel{display:grid;gap:10px}.check-panel div{padding:13px 14px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.05);border-radius:10px;font-weight:650}.check-panel div:before{content:'✓';margin-right:10px;color:#86efac}.pricing-preview-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.marketing-price{font-size:38px;font-weight:900;letter-spacing:-.035em;margin-top:14px}.marketing-price small{font-size:15px;font-weight:650;color:var(--muted);letter-spacing:0}.center-action{text-align:center;margin-top:24px}.cta-panel{display:flex;align-items:center;justify-content:space-between;gap:30px;background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:34px 38px;box-shadow:var(--shadow-md);margin:12px 0 20px}.cta-panel h2{margin-bottom:6px}.cta-panel p{margin:0;color:#667085}.feature-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin:10px 0 64px}.feature-detail{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:28px}.feature-detail>span{color:var(--blue);font-size:11px;font-weight:850;text-transform:uppercase;letter-spacing:.12em}.feature-detail h2{font-size:24px;margin:8px 0}.feature-detail p{color:#667085;margin:0}.release-body{display:grid;grid-template-columns:minmax(0,1fr) 310px;gap:42px;margin:10px 0 64px}.release-main{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:36px}.release-main h2{font-size:28px;margin:32px 0 10px}.release-main p,.release-list{color:#475467;font-size:16px;line-height:1.75}.release-list{padding-left:22px}.release-aside{align-self:start;position:sticky;top:92px}
|
||
.pricing-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin:20px 0 28px}
|
||
.price-card,.card,.panel{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:24px;box-shadow:var(--shadow-sm)}
|
||
.price-card{display:flex;flex-direction:column;justify-content:space-between;gap:24px}.price-card.featured{border-color:#9dbcf7}
|
||
.plan-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.plan-heading h2{margin:0 0 5px}.price{font-size:28px;font-weight:850;margin:20px 0}.features{padding-left:20px;line-height:1.9}
|
||
.pill,.sandbox-badge{display:inline-block;border-radius:999px;padding:5px 9px;font-size:12px;font-weight:750;background:var(--blue-soft);color:var(--blue-dark)}
|
||
.sandbox-badge{margin-top:8px;background:#fff7ed;color:#9a3412}.checkout-button{width:100%;font-size:15px;font-weight:750;padding:12px 16px}
|
||
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px}.muted{color:var(--muted)}.ok{color:var(--green)}.bad{color:var(--red)}
|
||
input{width:100%;padding:11px 12px;border:1px solid #cbd5e1;border-radius:9px;margin:6px 0 14px;background:#fff;color:var(--text)}
|
||
label{font-weight:650}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:10px;border-bottom:1px solid #e5e7eb}
|
||
.alert,.error{padding:13px 15px;border-radius:10px;margin:0 0 20px;font-weight:650}.alert{background:var(--green-soft);color:var(--green);border:1px solid #abefc6}.error{background:var(--red-soft);color:var(--red);border:1px solid #fecdca}
|
||
|
||
/* Product launch page */
|
||
.launch-main{overflow:hidden}
|
||
.launch-hero{position:relative;background:linear-gradient(180deg,#0b1220 0,#101b31 78%,#f7f9fc 78%);padding:82px 24px 106px;color:#fff}
|
||
.launch-hero:before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 75% 12%,rgba(59,130,246,.26),transparent 34%),radial-gradient(circle at 18% 32%,rgba(14,165,233,.13),transparent 28%);pointer-events:none}
|
||
.launch-shell{position:relative;max-width:1220px;margin:0 auto}
|
||
.hero-grid{display:grid;grid-template-columns:minmax(0,.95fr) minmax(500px,1.05fr);gap:72px;align-items:center}
|
||
.launch-kicker{display:inline-flex;align-items:center;gap:8px;background:rgba(59,130,246,.12);border:1px solid rgba(147,197,253,.22);color:#bfdbfe;padding:7px 11px;border-radius:999px;font-size:12px;font-weight:800;letter-spacing:.02em}
|
||
.launch-kicker:before{content:"";width:7px;height:7px;border-radius:50%;background:#60a5fa;box-shadow:0 0 0 4px rgba(96,165,250,.12)}
|
||
.launch-hero h1{font-size:clamp(46px,6vw,74px);line-height:.98;letter-spacing:-.055em;margin:20px 0 22px;max-width:760px}
|
||
.hero-copy{font-size:19px;line-height:1.65;color:#cbd5e1;max-width:650px;margin:0}
|
||
.hero-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:30px}.hero-actions .btn{padding:13px 18px;border-radius:11px}
|
||
.hero-actions .btn-secondary{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.18);color:#fff}.hero-actions .btn-secondary:hover{background:rgba(255,255,255,.12)}
|
||
.hero-note{margin:16px 0 0;color:#94a3b8;font-size:13px}
|
||
.trust-row{display:flex;gap:20px;flex-wrap:wrap;margin-top:34px;color:#cbd5e1;font-size:13px}.trust-item{display:flex;align-items:center;gap:7px}.trust-check{display:inline-grid;place-items:center;width:18px;height:18px;border-radius:50%;background:rgba(34,197,94,.12);color:#86efac;font-size:11px;font-weight:900}
|
||
|
||
.app-window{border:1px solid rgba(255,255,255,.15);border-radius:18px;background:#f8fafc;box-shadow:0 34px 70px rgba(0,0,0,.32);overflow:hidden;color:#111827;transform:perspective(1200px) rotateY(-2deg) rotateX(1deg);transform-origin:center}
|
||
.window-bar{height:46px;background:#eef2f7;border-bottom:1px solid #dde3ec;display:flex;align-items:center;padding:0 14px;gap:8px}.dot{width:11px;height:11px;border-radius:50%}.dot.red{background:#ff5f57}.dot.amber{background:#febc2e}.dot.green{background:#28c840}.window-title{margin-left:8px;font-size:12px;font-weight:750;color:#667085}
|
||
.app-body{display:grid;grid-template-columns:160px 1fr;min-height:390px}.app-sidebar{background:#111827;color:#cbd5e1;padding:18px 12px}.mini-brand{display:flex;align-items:center;gap:8px;color:#fff;font-weight:800;font-size:12px;margin:0 8px 18px}.mini-brand img{width:26px;height:26px;border-radius:7px}.side-item{padding:8px 10px;border-radius:8px;font-size:11px;margin:3px 0}.side-item.active{background:#263244;color:#fff}.app-content{padding:20px;background:#f8fafc}.app-toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.app-toolbar strong{font-size:15px}.sync-all{font-size:10px;background:#2563eb;color:#fff;padding:7px 9px;border-radius:7px;font-weight:800}.mock-job{background:#fff;border:1px solid #e2e8f0;border-radius:11px;padding:13px 14px;margin-bottom:10px;box-shadow:0 1px 2px rgba(15,23,42,.04)}.mock-job-top{display:flex;align-items:center;justify-content:space-between;gap:12px}.mock-job strong{font-size:12px}.job-state{font-size:9px;font-weight:850;padding:4px 7px;border-radius:999px}.state-ready{background:#ecfdf3;color:#047857}.state-scheduled{background:#eff6ff;color:#1d4ed8}.state-watching{background:#f5f3ff;color:#6d28d9}.mock-job p{font-size:9px;color:#64748b;margin:4px 0 9px}.mock-progress{height:5px;background:#eef2f7;border-radius:999px;overflow:hidden}.mock-progress span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#2563eb,#38bdf8)}.app-statusbar{display:flex;justify-content:space-between;color:#64748b;font-size:9px;margin-top:16px;padding-top:13px;border-top:1px solid #e2e8f0}
|
||
|
||
.launch-section{padding:92px 24px}.section-shell{max-width:1120px;margin:0 auto}.section-head{max-width:690px;margin-bottom:42px}.section-head.center{text-align:center;margin-left:auto;margin-right:auto}.section-head h2{font-size:clamp(32px,4vw,46px);line-height:1.08;letter-spacing:-.04em;margin:8px 0 14px}.section-head p{font-size:17px;color:#667085;margin:0;line-height:1.65}
|
||
.feature-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.feature-card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:26px;box-shadow:var(--shadow-sm)}.feature-icon{display:grid;place-items:center;width:42px;height:42px;border-radius:11px;background:var(--blue-soft);color:var(--blue);font-weight:900;font-size:18px;margin-bottom:18px}.feature-card h3{font-size:18px;margin:0 0 8px;letter-spacing:-.015em}.feature-card p{color:#667085;margin:0;line-height:1.6}
|
||
.workflow-section{background:#fff;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.workflow-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}.workflow-step{position:relative;padding:4px 10px 4px 0}.step-number{display:grid;place-items:center;width:36px;height:36px;border-radius:10px;background:#101828;color:#fff;font-weight:850;margin-bottom:16px}.workflow-step h3{font-size:17px;margin:0 0 7px}.workflow-step p{color:#667085;margin:0;font-size:14px;line-height:1.6}
|
||
.security-panel{background:#0f172a;color:#fff;border-radius:24px;padding:48px;display:grid;grid-template-columns:.9fr 1.1fr;gap:60px;align-items:center;box-shadow:var(--shadow-md)}.security-panel h2{font-size:38px;line-height:1.08;letter-spacing:-.04em;margin:8px 0 15px}.security-panel p{color:#cbd5e1;font-size:16px;line-height:1.65}.security-list{display:grid;gap:13px}.security-item{display:flex;gap:12px;align-items:flex-start;background:rgba(255,255,255,.055);border:1px solid rgba(255,255,255,.08);border-radius:13px;padding:14px}.security-icon{display:grid;place-items:center;width:30px;height:30px;flex:0 0 30px;border-radius:8px;background:rgba(59,130,246,.17);color:#93c5fd;font-weight:900}.security-item strong{display:block;font-size:14px;margin-bottom:2px}.security-item span{display:block;color:#94a3b8;font-size:12px;line-height:1.5}
|
||
.plan-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;max-width:860px;margin:0 auto}.launch-plan{background:#fff;border:1px solid var(--line);border-radius:20px;padding:30px;box-shadow:var(--shadow-sm);position:relative}.launch-plan.featured{border-color:#9dbcf7;box-shadow:0 18px 44px rgba(37,99,235,.09)}.launch-plan h3{font-size:23px;margin:0}.launch-plan p{color:#667085}.plan-macs{font-size:34px;font-weight:850;letter-spacing:-.04em;margin:24px 0 3px}.plan-sub{font-size:13px;color:#667085}.plan-list{list-style:none;padding:0;margin:24px 0;display:grid;gap:11px}.plan-list li{display:flex;gap:9px;color:#475467}.plan-list li:before{content:"✓";color:#16a34a;font-weight:900}.launch-plan .btn{width:100%;padding:12px}.best-badge{position:absolute;right:18px;top:18px;background:var(--blue-soft);color:var(--blue-dark);border-radius:999px;padding:5px 9px;font-size:11px;font-weight:850}
|
||
.launch-cta{padding:30px 24px 100px}.cta-box{max-width:1120px;margin:0 auto;background:linear-gradient(135deg,#2563eb,#1d4ed8 55%,#0f4fc9);color:#fff;border-radius:26px;padding:54px;display:flex;align-items:center;justify-content:space-between;gap:36px;box-shadow:0 24px 54px rgba(37,99,235,.2)}.cta-box h2{font-size:38px;line-height:1.08;letter-spacing:-.04em;margin:0 0 10px}.cta-box p{margin:0;color:#dbeafe;font-size:16px}.cta-box .btn{background:#fff;color:#1e3a8a;padding:13px 18px;white-space:nowrap}.cta-box .btn:hover{background:#eff6ff}
|
||
|
||
.portal-header{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:26px}.licence-list{display:grid;gap:16px}.licence-card{background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow-sm);overflow:hidden}.licence-card-featured{border-color:#c6d7fb}.licence-main{padding:24px 26px}.licence-title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:20px}.licence-title-row h2{font-size:22px;margin:10px 0 2px;letter-spacing:-.015em}.licence-key{margin:0}.badge-row{display:flex;gap:7px;flex-wrap:wrap}.status-badge,.plan-badge,.billing-badge{display:inline-flex;align-items:center;border-radius:999px;padding:4px 9px;font-size:12px;font-weight:800}.status-active{background:var(--green-soft);color:var(--green)}.status-inactive{background:var(--red-soft);color:var(--red)}.plan-badge{background:var(--blue-soft);color:var(--blue-dark)}.billing-badge{background:#f2f4f7;color:#475467}.licence-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:24px 0 12px;padding-top:20px;border-top:1px solid var(--line)}.licence-stats>div{display:flex;flex-direction:column;gap:3px}.stat-label{font-size:12px;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.04em}.licence-stats strong{font-size:15px}.activation-meter{height:7px;background:#eef2f6;border-radius:99px;overflow:hidden}.activation-meter span{display:block;height:100%;background:var(--blue);border-radius:99px}.upgrade-strip,.subscription-warning{margin-top:20px;border-radius:12px;padding:15px 16px;display:flex;align-items:center;justify-content:space-between;gap:16px}.upgrade-strip{background:#f5f8ff;border:1px solid #dbe7ff}.upgrade-strip div{display:flex;flex-direction:column;gap:2px}.upgrade-strip span{color:#475467;font-size:14px}.subscription-warning{background:#fff7ed;border:1px solid #fed7aa}.subscription-warning p{margin:3px 0 0;color:#9a3412;font-size:13px;max-width:720px}.empty-state{background:#fff;border:1px dashed #cbd5e1;border-radius:16px;padding:44px;text-align:center}.empty-state h2{margin-top:0}.history-panel{margin-top:26px;background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden}.history-panel summary{cursor:pointer;padding:16px 20px;font-weight:800}.history-panel summary span{display:inline-flex;margin-left:6px;min-width:22px;height:22px;align-items:center;justify-content:center;border-radius:99px;background:#f2f4f7;color:#475467;font-size:12px}.history-list{border-top:1px solid var(--line)}.history-row{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:18px;padding:14px 20px;border-bottom:1px solid var(--line)}.history-row:last-child{border-bottom:0}.history-row>div:first-child{display:flex;flex-direction:column}.history-row span{font-size:13px;color:var(--muted)}.history-status{font-size:13px;color:var(--muted)}.history-row a{font-weight:700;color:var(--blue);text-decoration:none}.back-link{display:inline-block;margin-bottom:20px;color:#475467;text-decoration:none;font-weight:700}.licence-detail-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:24px}.licence-detail-head h1{font-size:32px}.detail-grid{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(280px,.7fr);gap:18px}.panel{margin:0}.panel h2{margin:0;font-size:20px}.panel-heading{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;padding-bottom:18px;border-bottom:1px solid var(--line)}.panel-heading p{margin:4px 0 0;color:var(--muted)}.activation-count{font-weight:800;background:var(--blue-soft);color:var(--blue-dark);padding:6px 10px;border-radius:999px}.device-row{display:grid;grid-template-columns:42px 1fr auto;gap:14px;align-items:center;padding:17px 0;border-bottom:1px solid var(--line)}.device-row:last-child{border-bottom:0}.device-icon{width:42px;height:42px;display:flex;align-items:center;justify-content:center;background:#f2f4f7;border-radius:10px;font-size:20px}.device-copy{display:flex;flex-direction:column;min-width:0}.device-copy span,.device-copy small{color:var(--muted)}.device-copy small{margin-top:2px}.empty-inline{padding:26px 0 4px;color:var(--muted)}.subscription-panel form+form{margin-top:10px}.subscription-facts{margin:18px 0 22px}.subscription-facts>div{display:flex;justify-content:space-between;gap:16px;padding:11px 0;border-bottom:1px solid var(--line)}.subscription-facts dt{color:var(--muted)}.subscription-facts dd{margin:0;font-weight:700;text-align:right}
|
||
|
||
.site-footer{background:#0b1220;color:#94a3b8;border-top:1px solid rgba(255,255,255,.06)}.footer-shell{max-width:1220px;margin:0 auto;padding:34px 24px;display:flex;align-items:center;justify-content:space-between;gap:28px}.footer-brand{display:flex;align-items:center;gap:10px;color:#e2e8f0;font-weight:800}.footer-brand img{width:28px;height:28px;border-radius:7px}.footer-links{display:flex;gap:20px;flex-wrap:wrap}.footer-links a{color:#cbd5e1;text-decoration:none;font-size:13px;font-weight:650}.footer-links a:hover{color:#fff}.footer-cookie-link{background:none!important;border:0!important;padding:0!important;color:#cbd5e1!important;font-size:13px!important;font-weight:650!important;box-shadow:none!important}.footer-cookie-link:hover{color:#fff!important}.footer-copy{font-size:12px;margin-top:5px}
|
||
|
||
@media(max-width:980px){
|
||
.hero-grid{grid-template-columns:1fr;gap:48px}.app-window{max-width:720px;transform:none}.feature-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.workflow-grid{grid-template-columns:repeat(2,1fr)}.security-panel{grid-template-columns:1fr;gap:28px}.nav-email{display:none}
|
||
}
|
||
@media(max-width:900px){.feature-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.trust-strip{grid-template-columns:repeat(2,1fr)}.release-body{grid-template-columns:1fr}.release-aside{position:static}.marketing-hero h1{font-size:50px}}
|
||
@media(max-width:760px){
|
||
.site-header{position:relative}.nav-shell{padding:10px 16px;min-height:64px;gap:12px;flex-wrap:wrap}.brand{margin-right:auto}.nav-links{order:3;width:100%;gap:18px;overflow-x:auto;padding:2px 0 4px}.nav-links::-webkit-scrollbar{display:none}.nav-account{margin-left:0}.nav-account .nav-auth-link{display:none}.wrap{padding:28px 16px 48px}.pricing-grid,.plan-grid{grid-template-columns:1fr}.hero-card h1,.portal-header h1{font-size:32px}.portal-header,.licence-detail-head,.licence-title-row,.upgrade-strip,.subscription-warning{align-items:stretch;flex-direction:column}.portal-header .btn,.licence-title-row .btn{width:100%}.licence-stats{grid-template-columns:1fr}.detail-grid{grid-template-columns:1fr}.history-row{grid-template-columns:1fr auto}.history-row a{grid-column:1/-1}.device-row{grid-template-columns:38px 1fr}.device-row form{grid-column:1/-1}.device-row form button{width:100%}
|
||
.launch-hero{padding:58px 18px 88px;background:linear-gradient(180deg,#0b1220 0,#101b31 84%,#f7f9fc 84%)}.launch-hero h1{font-size:48px}.hero-copy{font-size:17px}.app-body{grid-template-columns:120px 1fr;min-height:330px}.app-sidebar{padding:12px 8px}.side-item{padding:7px 8px}.app-content{padding:14px}.launch-section{padding:68px 18px}.feature-grid,.workflow-grid{grid-template-columns:1fr}.security-panel{padding:30px 24px;border-radius:20px}.security-panel h2{font-size:32px}.cta-box{padding:36px 26px;align-items:flex-start;flex-direction:column}.cta-box h2{font-size:32px}.footer-shell{align-items:flex-start;flex-direction:column}.launch-cta{padding:16px 18px 72px}
|
||
}
|
||
@media(max-width:480px){.launch-hero h1{font-size:42px}.hero-actions{flex-direction:column}.hero-actions .btn{width:100%}.app-body{grid-template-columns:1fr}.app-sidebar{display:none}.window-title{display:none}.launch-kicker{font-size:11px}.feature-card{padding:22px}}
|
||
@media(max-width:760px){
|
||
.site-header{position:static}.nav-shell{min-height:auto;padding:12px 16px;flex-wrap:wrap;gap:10px}.brand{flex:1}.nav-links{order:3;width:100%;overflow-x:auto;display:flex;gap:6px;padding:4px 0 2px;scrollbar-width:none}.nav-links::-webkit-scrollbar{display:none}.nav-links a{white-space:nowrap;padding:8px 10px;border-radius:8px;background:var(--panel)}.nav-account{margin-left:auto}.nav-email{display:none}.wrap{padding-left:16px;padding-right:16px}.hero-card{padding:30px 22px}.marketing-hero h1{font-size:clamp(38px,11vw,52px);line-height:1.02}.marketing-actions{align-items:stretch}.marketing-actions .btn{width:100%;justify-content:center}.pricing-grid,.pricing-preview-grid,.feature-detail-grid,.feature-grid{grid-template-columns:1fr!important}.price-card{min-width:0}.checkout-button{width:100%}.cta-panel{display:grid;grid-template-columns:1fr;gap:20px}.cta-panel .btn{width:100%;justify-content:center}.footer-shell{grid-template-columns:1fr;gap:20px}.footer-links{justify-content:flex-start}.cookie-banner{left:12px;right:12px;bottom:12px}.cookie-actions{display:grid;grid-template-columns:1fr;width:100%}.cookie-actions .btn{width:100%}}
|
||
@media(max-width:420px){.nav-account .nav-auth-link{display:none}.nav-cta{padding:9px 11px}.hero-card{padding:26px 18px}.wrap{padding-left:12px;padding-right:12px}.price{font-size:34px}}
|
||
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}
|
||
|
||
|
||
/* Launch polish + GDPR/support UI */
|
||
.launch-hero{background:linear-gradient(135deg,#07111f 0%,#0b1d36 54%,#0c2b55 100%);padding:78px 24px 82px}
|
||
.launch-hero:after{content:"";position:absolute;right:-10%;bottom:-36%;width:58%;height:80%;background:radial-gradient(ellipse at center,rgba(37,99,235,.45),rgba(14,165,233,.14) 42%,transparent 68%);filter:blur(18px);pointer-events:none}
|
||
.app-window{background:#1c1c1e;border-color:rgba(255,255,255,.14);box-shadow:0 34px 70px rgba(0,0,0,.42)}
|
||
.window-bar{background:#252527;border-bottom-color:#353539;color:#d4d4d8}.app-body{background:#1c1c1e}.app-sidebar{background:#252526;border-right:1px solid #39393d}.mini-brand{color:#f4f4f5}.side-item{color:#b7b7bd}.side-item.active{background:#1677ea;color:white}.app-content{background:#1c1c1e;color:#f4f4f5}.mock-job{background:#242426;border-color:#37373b;box-shadow:none}.mock-job p,.app-statusbar{color:#9f9fa6}.app-toolbar{color:#f4f4f5}.mock-progress{background:#34343a}
|
||
.launch-section{position:relative}.feature-card{border:1px solid rgba(148,163,184,.18);box-shadow:0 14px 34px rgba(15,23,42,.06);transition:transform .18s ease,box-shadow .18s ease}.feature-card:hover{transform:translateY(-3px);box-shadow:0 20px 42px rgba(15,23,42,.10)}
|
||
.feature-card:nth-child(1){background:linear-gradient(135deg,#eef7ff,#dceeff)}.feature-card:nth-child(2){background:linear-gradient(135deg,#effdf5,#d9f8e7)}.feature-card:nth-child(3){background:linear-gradient(135deg,#fff9ed,#ffedc9)}.feature-card:nth-child(4){background:linear-gradient(135deg,#f8f1ff,#eadcff)}.feature-card:nth-child(5){background:linear-gradient(135deg,#fff1f4,#ffdce4)}.feature-card:nth-child(6){background:linear-gradient(135deg,#eafffb,#ccf7ef)}
|
||
.feature-card:nth-child(1) .feature-icon{background:#d7ebff;color:#1474e5}.feature-card:nth-child(2) .feature-icon{background:#c9f3dc;color:#079455}.feature-card:nth-child(3) .feature-icon{background:#ffe2aa;color:#e87500}.feature-card:nth-child(4) .feature-icon{background:#dfc9ff;color:#7c3aed}.feature-card:nth-child(5) .feature-icon{background:#ffc8d4;color:#e11d48}.feature-card:nth-child(6) .feature-icon{background:#bff2e9;color:#0891b2}
|
||
input,select,textarea{width:100%;padding:11px 12px;border:1px solid #cbd5e1;border-radius:9px;margin:6px 0 14px;background:#fff;color:var(--text);font:inherit}textarea{resize:vertical;min-height:150px}select{appearance:auto}.field-error{color:var(--red);font-size:13px;margin:-8px 0 12px}.form-help{font-size:12px;color:var(--muted);margin:-8px 0 14px}.honeypot{position:absolute!important;left:-10000px!important;width:1px!important;height:1px!important;overflow:hidden!important}
|
||
.support-hero{padding:8px 0 28px}.support-hero h1{font-size:44px;line-height:1.05;letter-spacing:-.04em;margin:8px 0 12px}.support-layout{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(280px,.7fr);gap:22px;align-items:start}.support-form-card{background:#fff;border:1px solid var(--line);border-radius:20px;padding:28px;box-shadow:var(--shadow-md)}.panel-heading-simple{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding-bottom:20px;border-bottom:1px solid var(--line);margin-bottom:22px}.panel-heading-simple h2{margin:0 0 4px;font-size:23px}.panel-heading-simple p{margin:0;color:var(--muted)}.response-badge{background:var(--blue-soft);color:var(--blue-dark);padding:6px 10px;border-radius:999px;font-size:12px;font-weight:800}.form-grid.two{display:grid;grid-template-columns:1fr 1fr;gap:16px}.consent-check{display:flex;align-items:flex-start;gap:10px;font-weight:500;color:#475467;margin:2px 0 20px}.consent-check input{width:18px;height:18px;margin:2px 0 0;flex:0 0 auto}.consent-check a{color:var(--blue);font-weight:700}.support-actions{display:flex;gap:12px;flex-wrap:wrap}.support-side{display:grid;gap:14px}.support-info-card{padding:22px;border-radius:18px;border:1px solid rgba(15,23,42,.08);box-shadow:var(--shadow-sm)}.support-info-card.blue{background:linear-gradient(135deg,#eff6ff,#dbeafe)}.support-info-card.green{background:linear-gradient(135deg,#ecfdf3,#d1fadf)}.support-info-card.violet{background:linear-gradient(135deg,#f5f3ff,#ede9fe)}.support-info-card h3{margin:12px 0 6px}.support-info-card p{margin:0;color:#475467}.support-info-icon{width:40px;height:40px;border-radius:11px;background:rgba(255,255,255,.75);display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:900;color:var(--blue)}
|
||
.legal-page{max-width:840px;margin:0 auto;background:#fff;border:1px solid var(--line);border-radius:20px;padding:42px 46px;box-shadow:var(--shadow-sm)}.legal-head{padding-bottom:24px;border-bottom:1px solid var(--line);margin-bottom:26px}.legal-head h1{font-size:42px;line-height:1.05;letter-spacing:-.04em;margin:8px 0}.legal-head p{margin:0;color:var(--muted)}.legal-intro{font-size:18px;line-height:1.65;color:#344054;background:linear-gradient(135deg,#eff6ff,#f8fafc);border:1px solid #dbeafe;border-radius:14px;padding:18px 20px;margin-bottom:30px}.legal-page section{padding:4px 0 16px}.legal-page h2{font-size:21px;margin:16px 0 8px}.legal-page p{color:#475467;line-height:1.72}.legal-page a,.link-button{color:var(--blue);font-weight:700}.link-button{padding:0;background:none;border:0;box-shadow:none;text-decoration:underline;display:inline}.link-button:hover{background:none;color:var(--blue-dark)}.legal-table,.cookie-table{display:grid;gap:10px}.legal-table>div,.cookie-table>div{display:grid;grid-template-columns:150px 1fr;gap:18px;padding:14px 0;border-bottom:1px solid var(--line)}.legal-table span,.cookie-table span{color:#475467}
|
||
.cookie-banner{position:fixed;z-index:1000;left:20px;right:20px;bottom:20px;max-width:980px;margin:auto;background:rgba(12,20,36,.98);color:#fff;border:1px solid rgba(255,255,255,.14);border-radius:18px;padding:20px 22px;box-shadow:0 24px 80px rgba(0,0,0,.38);backdrop-filter:blur(18px);display:none}.cookie-banner.is-open{display:block}.cookie-banner-grid{display:grid;grid-template-columns:1fr auto;gap:24px;align-items:center}.cookie-banner h2{margin:0 0 5px;font-size:18px}.cookie-banner p{margin:0;color:#cbd5e1;font-size:13px;line-height:1.55}.cookie-banner a{color:#bfdbfe}.cookie-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}.cookie-actions button{padding:9px 12px}.cookie-actions .btn-secondary{background:transparent;color:#fff;border-color:rgba(255,255,255,.25)}
|
||
.cookie-modal-backdrop{position:fixed;z-index:1100;inset:0;background:rgba(2,6,23,.64);display:none;align-items:center;justify-content:center;padding:20px}.cookie-modal-backdrop.is-open{display:flex}.cookie-modal{width:min(620px,100%);max-height:90vh;overflow:auto;background:#fff;border-radius:20px;box-shadow:0 34px 90px rgba(0,0,0,.35)}.cookie-modal-head{padding:24px 26px 18px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;gap:18px}.cookie-modal-head h2{margin:0;font-size:24px}.cookie-close{background:#f2f4f7;color:#344054;width:36px;height:36px;padding:0;border-radius:50%}.cookie-close:hover{background:#e4e7ec}.cookie-modal-body{padding:8px 26px 4px}.cookie-option{display:grid;grid-template-columns:1fr auto;gap:18px;padding:17px 0;border-bottom:1px solid var(--line)}.cookie-option h3{margin:0 0 4px;font-size:16px}.cookie-option p{margin:0;color:var(--muted);font-size:13px}.cookie-switch{width:46px!important;height:24px!important;margin:2px 0!important;accent-color:var(--blue)}.cookie-modal-actions{padding:20px 26px 24px;display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap}.cookie-required{font-size:12px;font-weight:800;color:var(--green);padding-top:4px}
|
||
.admin-ticket-list{display:grid;gap:10px}.admin-ticket-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto auto;gap:18px;align-items:center;padding:16px 18px;background:#fff;border:1px solid var(--line);border-radius:14px;text-decoration:none;box-shadow:var(--shadow-sm)}.admin-ticket-row:hover{border-color:#b8cdf6}.admin-ticket-row>div:first-child{display:flex;flex-direction:column;min-width:0}.admin-ticket-row small{color:var(--muted)}.ticket-ref{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--blue);font-weight:850}.ticket-category,.ticket-status{padding:5px 8px;border-radius:999px;font-size:12px;font-weight:800;background:#f2f4f7;color:#475467}.status-new{background:#eff6ff;color:#1d4ed8}.status-open{background:#ecfdf3;color:#067647}.status-waiting{background:#fff7ed;color:#9a3412}.status-resolved,.status-closed{background:#f2f4f7;color:#475467}.admin-ticket-row time{color:var(--muted);font-size:12px}.filter-bar{display:flex;align-items:center;gap:10px;margin-bottom:18px}.filter-bar select{width:auto;margin:0}.ticket-detail-head{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:22px}.ticket-detail-head h1{font-size:34px;line-height:1.12;letter-spacing:-.03em;margin:6px 0}.ticket-detail-head p{margin:0;color:var(--muted)}.ticket-message .ticket-meta{display:flex;gap:12px;color:var(--muted);font-size:13px;margin:8px 0 20px}.message-body{white-space:normal;background:#f8fafc;border:1px solid var(--line);border-radius:12px;padding:18px;line-height:1.7;margin-bottom:18px}
|
||
@media(max-width:800px){.support-layout{grid-template-columns:1fr}.form-grid.two{grid-template-columns:1fr}.legal-page{padding:28px 22px}.legal-table>div,.cookie-table>div{grid-template-columns:1fr;gap:4px}.cookie-banner-grid{grid-template-columns:1fr}.cookie-actions{justify-content:flex-start}.admin-ticket-row{grid-template-columns:1fr auto}.admin-ticket-row .ticket-category,.admin-ticket-row time{display:none}.ticket-detail-head{flex-direction:column}}
|
||
|
||
|
||
/* SonarDesk distribution centre */
|
||
.download-page{background:#f6f8fc;min-height:80vh}.download-shell{max-width:1220px;margin:0 auto;padding-left:24px;padding-right:24px}.download-hero{position:relative;overflow:hidden;background:radial-gradient(circle at 78% 22%,rgba(37,99,235,.22),transparent 32%),linear-gradient(135deg,#07111f 0%,#0b1730 55%,#101c35 100%);color:#fff;padding:92px 0 78px}.download-hero:after{content:'';position:absolute;inset:auto -10% -220px 35%;height:420px;background:rgba(59,130,246,.08);filter:blur(60px);border-radius:50%}.download-hero .download-shell{display:grid;grid-template-columns:1.02fr .98fr;gap:70px;align-items:center;position:relative;z-index:1}.download-copy h1{font-size:68px;line-height:.98;letter-spacing:-.055em;margin:12px 0 22px}.download-copy>p{font-size:20px;line-height:1.65;color:#cbd5e1;max-width:660px}.download-actions{display:flex;gap:12px;align-items:stretch;margin:32px 0 20px;flex-wrap:wrap}.download-primary{background:#fff!important;color:#0f172a!important;padding:13px 18px!important;gap:12px;text-align:left;box-shadow:0 16px 40px rgba(0,0,0,.22)}.download-primary:hover{transform:translateY(-1px)}.download-primary small{display:block;color:#64748b;font-size:11px;margin-top:3px}.download-icon{width:32px;height:32px;display:grid;place-items:center;border-radius:8px;background:#2563eb;color:#fff;font-size:20px}.download-secondary{background:rgba(255,255,255,.07)!important;border:1px solid rgba(255,255,255,.18)!important;color:#fff!important}.release-verification{display:flex;gap:18px;flex-wrap:wrap;color:#94a3b8;font-size:12px}.release-verification span:First-letter{color:#86efac}.product-visual{position:relative;perspective:1000px}.mac-window{border:1px solid rgba(255,255,255,.15);background:#111827;border-radius:18px;box-shadow:0 36px 90px rgba(0,0,0,.45);overflow:hidden;transform:rotateY(-5deg) rotateX(2deg)}.mac-titlebar{height:42px;background:#1b2434;display:flex;align-items:center;gap:7px;padding:0 14px;border-bottom:1px solid rgba(255,255,255,.06)}.mac-titlebar i{width:10px;height:10px;border-radius:50%;background:#fb7185}.mac-titlebar i:nth-child(2){background:#fbbf24}.mac-titlebar i:nth-child(3){background:#4ade80}.mac-titlebar span{margin-left:auto;margin-right:auto;color:#94a3b8;font-size:11px}.mac-content{display:grid;grid-template-columns:110px 1fr;height:310px}.mini-sidebar{background:#0b1220;padding:18px 12px;display:flex;flex-direction:column;gap:12px}.mini-sidebar img{width:30px;border-radius:8px}.mini-sidebar b{font-size:10px}.mini-sidebar span{height:9px;border-radius:4px;background:#26344c;width:78%}.mini-sidebar span.active{background:#2563eb;width:90%}.mini-dashboard{padding:24px}.mini-head{display:flex;justify-content:space-between;align-items:center}.mini-head b{font-size:14px}.mini-head em{font-size:8px;color:#4ade80;font-style:normal}.mini-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;margin:20px 0}.mini-stats i{height:58px;border:1px solid #273449;border-radius:8px;background:linear-gradient(145deg,#162033,#101827)}.mini-chart{height:130px;border:1px solid #273449;border-radius:9px;display:flex;align-items:flex-end;gap:9px;padding:16px}.mini-chart span{flex:1;background:linear-gradient(#3b82f6,#1d4ed8);border-radius:4px 4px 2px 2px}.mini-chart span:nth-child(1){height:35%}.mini-chart span:nth-child(2){height:58%}.mini-chart span:nth-child(3){height:45%}.mini-chart span:nth-child(4){height:78%}.mini-chart span:nth-child(5){height:66%}.mini-chart span:nth-child(6){height:90%}.visual-badge{position:absolute;right:-20px;bottom:-22px;background:#fff;color:#0f172a;border-radius:12px;padding:12px 18px;box-shadow:0 14px 34px rgba(0,0,0,.3)}.visual-badge span{display:block;font-size:9px;color:#2563eb;text-transform:uppercase;font-weight:900;letter-spacing:.12em}.visual-badge strong{font-size:13px}.download-confidence{background:#fff;border-bottom:1px solid #e5e7eb}.confidence-grid{display:grid;grid-template-columns:repeat(4,1fr);padding-top:25px;padding-bottom:25px}.confidence-grid div{padding:0 24px;border-right:1px solid #e5e7eb}.confidence-grid div:first-child{padding-left:0}.confidence-grid div:last-child{border:0}.confidence-grid span{display:block;text-transform:uppercase;letter-spacing:.1em;font-size:9px;font-weight:900;color:#2563eb;margin-bottom:4px}.confidence-grid strong{font-size:12px;color:#344054}.download-content{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(280px,.6fr);gap:28px;padding-top:72px;padding-bottom:72px}.release-notes-panel,.requirements-panel{background:#fff;border:1px solid #e4e7ec;border-radius:20px;padding:34px;box-shadow:0 12px 35px rgba(15,23,42,.05)}.release-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;border-bottom:1px solid #eaecf0;padding-bottom:24px}.release-heading h2,.requirements-panel h2{font-size:30px;letter-spacing:-.03em;margin:7px 0 5px}.release-heading p{margin:0;color:#667085}.release-note-copy{padding:28px 0;color:#475467;font-size:16px;line-height:1.8}.checksum-box{background:#f8fafc;border:1px solid #e5e7eb;border-radius:10px;padding:14px}.checksum-box span{display:block;font-size:9px;font-weight:900;letter-spacing:.12em;color:#64748b;margin-bottom:5px}.checksum-box code{font-size:11px;overflow-wrap:anywhere;color:#334155}.requirements-panel p{color:#667085}.requirements-panel ol{list-style:none;padding:15px 0;margin:0}.requirements-panel li{display:flex;gap:12px;padding:13px 0;border-top:1px solid #eef2f6}.requirements-panel li>span{display:grid;place-items:center;width:28px;height:28px;background:#eff6ff;color:#2563eb;border-radius:8px;font-weight:900;font-size:11px}.requirements-panel li strong,.requirements-panel li small{display:block}.requirements-panel li small{color:#667085;margin-top:2px}.requirements-panel>a{color:#2563eb;font-weight:800;text-decoration:none;font-size:13px}.release-history{background:#fff;border-top:1px solid #e5e7eb;padding:70px 0}.release-history-list{border:1px solid #e5e7eb;border-radius:16px;overflow:hidden}.release-history-list article{display:flex;justify-content:space-between;align-items:center;padding:18px 22px;border-bottom:1px solid #e5e7eb}.release-history-list article:last-child{border:0}.release-history-list strong,.release-history-list span{display:block}.release-history-list span{font-size:12px;color:#667085;margin-top:3px}.release-history-list article>div:last-child{display:flex;align-items:center;gap:20px}.release-history-list a{color:#2563eb;font-weight:800;text-decoration:none}.download-support{background:#0b1220;color:#fff;padding:55px 0}.download-support .download-shell{display:flex;align-items:center;justify-content:space-between;gap:30px}.download-support h2{font-size:32px;margin:7px 0}.download-support p{color:#94a3b8;margin:0}.no-release{margin-top:28px;padding:18px;border:1px solid rgba(255,255,255,.15);border-radius:12px;background:rgba(255,255,255,.06)}.no-release span{display:block;color:#94a3b8;margin-top:3px}
|
||
.admin-release-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px}.admin-metrics{margin-bottom:24px}.admin-table-card,.editor-card{background:#fff;border:1px solid #e4e7ec;border-radius:16px;box-shadow:var(--shadow-sm)}.admin-table-title{display:flex;justify-content:space-between;align-items:center;padding:22px 24px;border-bottom:1px solid #e4e7ec}.admin-table-title h2{margin:0;font-size:19px}.admin-table-title p{margin:3px 0 0;color:#667085;font-size:13px}.table-scroll{overflow-x:auto}.pro-table{width:100%;border-collapse:collapse}.pro-table th{background:#f8fafc;text-align:left;padding:11px 16px;color:#667085;font-size:10px;text-transform:uppercase;letter-spacing:.08em}.pro-table td{padding:15px 16px;border-top:1px solid #eef2f6;vertical-align:middle}.pro-table td strong,.pro-table td small{display:block}.pro-table td small{color:#667085;margin-top:3px}.table-actions{display:flex;gap:7px;justify-content:flex-end}.table-actions form{margin:0}.status-chip{display:inline-flex;padding:4px 8px;border-radius:99px;background:#eff6ff;color:#1d4ed8;font-size:10px;font-weight:850}.status-chip.success{background:#ecfdf3;color:#067647}.status-chip.muted{background:#f2f4f7;color:#667085}.empty-cell{text-align:center!important;color:#667085;padding:40px!important}.release-editor{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:22px;align-items:start}.editor-main{display:grid;gap:18px}.editor-card{padding:24px}.editor-card-head{display:flex;gap:13px;margin-bottom:22px}.editor-card-head>span{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;background:#eff6ff;color:#2563eb;font-size:10px;font-weight:900}.editor-card h2{margin:0;font-size:19px}.editor-card p{margin:3px 0 0;color:#667085;font-size:13px}.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}.editor-card label,.settings-editor label{display:grid;gap:7px;font-size:12px;font-weight:800;color:#344054}.editor-card input,.editor-card select,.editor-card textarea,.settings-editor input,.settings-editor textarea{width:100%;border:1px solid #d0d5dd;border-radius:9px;padding:10px 12px;background:#fff;color:#101828;font:inherit}.upload-zone{padding:22px!important;border:1px dashed #98a2b3;border-radius:12px;background:#f9fafb;margin-bottom:18px}.upload-zone span{color:#667085;font-weight:500}.upload-zone input{border:0!important;padding:10px 0 0!important;background:transparent!important}.package-current{padding:13px 15px;border-radius:10px;background:#ecfdf3;margin-bottom:14px}.package-current strong,.package-current span{display:block}.package-current span{font-size:10px;color:#067647;overflow-wrap:anywhere;margin-top:4px}.sticky-card{position:sticky;top:92px}.toggle-row{display:flex!important;align-items:flex-start;gap:10px!important;padding:14px 0;border-top:1px solid #eef2f6}.toggle-row input{width:auto!important;margin-top:3px}.toggle-row strong,.toggle-row small{display:block}.toggle-row small{color:#667085;margin-top:2px;font-weight:500}.sticky-card .btn{margin-top:10px}.settings-editor{max-width:820px;display:grid;gap:18px}
|
||
@media(max-width:900px){.download-hero .download-shell{grid-template-columns:1fr}.product-visual{display:none}.download-copy h1{font-size:52px}.confidence-grid{grid-template-columns:repeat(2,1fr);gap:20px}.confidence-grid div{border:0;padding:0}.download-content,.release-editor{grid-template-columns:1fr}.sticky-card{position:static}.download-support .download-shell,.admin-release-head{align-items:flex-start;flex-direction:column}}@media(max-width:600px){.download-hero{padding:64px 0}.download-copy h1{font-size:42px}.download-actions,.release-heading{flex-direction:column}.download-primary,.download-secondary{width:100%}.confidence-grid{grid-template-columns:1fr}.release-history-list article{align-items:flex-start;gap:12px;flex-direction:column}.download-content{padding-top:40px;padding-bottom:40px}.release-notes-panel,.requirements-panel{padding:22px}.form-grid{grid-template-columns:1fr}.download-support .download-shell{align-items:stretch}}
|
||
.portal-download-banner{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:18px 20px;margin-bottom:22px;background:linear-gradient(135deg,#0f172a,#172554);color:#fff;border-radius:14px;box-shadow:var(--shadow-md)}.portal-download-banner strong,.portal-download-banner small{display:block}.portal-download-banner strong{font-size:18px;margin:3px 0}.portal-download-banner small{color:#cbd5e1}.portal-download-banner .eyebrow{color:#93c5fd}@media(max-width:650px){.portal-download-banner{align-items:stretch;flex-direction:column}}
|
||
.home-download-showcase{display:grid;grid-template-columns:1.25fr .75fr;gap:36px;align-items:center;margin:0 0 64px;padding:38px;background:linear-gradient(135deg,#f8fafc,#eff6ff);border:1px solid #dbeafe;border-radius:22px}.home-download-copy h2{font-size:38px;letter-spacing:-.035em;margin:7px 0 10px}.home-download-copy p{color:#667085;font-size:16px;max-width:680px}.home-download-meta{background:#0b1220;color:#fff;border-radius:16px;padding:24px;box-shadow:0 18px 40px rgba(15,23,42,.16)}.home-download-meta>span{display:block;color:#93c5fd;text-transform:uppercase;font-size:9px;font-weight:900;letter-spacing:.12em}.home-download-meta>strong{display:block;font-size:24px;margin:7px 0 3px}.home-download-meta>small{color:#94a3b8}.home-download-meta>div{margin-top:20px;padding-top:16px;border-top:1px solid rgba(255,255,255,.1)}.home-download-meta b,.home-download-meta code{display:block}.home-download-meta b{font-size:9px;color:#64748b;letter-spacing:.1em}.home-download-meta code{font-size:10px;color:#cbd5e1;margin-top:5px}@media(max-width:760px){.home-download-showcase{grid-template-columns:1fr;padding:24px}}
|
||
|
||
.seo-admin-form{display:grid;gap:18px}.seo-section{padding:28px}.seo-section h2{margin:4px 0 4px;font-size:22px;letter-spacing:-.02em}.seo-section-head{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;padding-bottom:20px;margin-bottom:22px;border-bottom:1px solid var(--line)}.seo-section-head p{margin:0;color:var(--muted);max-width:680px}.seo-badge{display:inline-flex;align-items:center;padding:6px 10px;border-radius:999px;background:var(--blue-soft);color:var(--blue-dark);font-size:11px;font-weight:850;text-transform:uppercase;letter-spacing:.08em;white-space:nowrap}.seo-badge.success{background:var(--green-soft);color:var(--green)}.seo-dns-callout{display:grid;gap:5px;margin-bottom:22px;padding:16px 18px;border:1px solid #bfdbfe;border-radius:12px;background:#eff6ff;color:#1e3a8a}.seo-dns-callout span{color:#475569}.seo-dns-callout code{font-weight:800}.seo-savebar{position:sticky;bottom:18px;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:15px 18px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.96);backdrop-filter:blur(14px);box-shadow:0 14px 38px rgba(15,23,42,.14)}.seo-savebar strong,.seo-savebar span{display:block}.seo-savebar span{font-size:12px;color:var(--muted);margin-top:2px}.seo-preview{border:1px solid var(--line);border-radius:12px;padding:18px;background:#fff}.seo-preview-label{font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);margin-bottom:10px}.seo-preview-title{color:#1a0dab;font-size:19px;line-height:1.3}.seo-preview-url{color:#188038;font-size:12px;margin:4px 0}.seo-preview-description{color:#4d5156;font-size:13px;line-height:1.45}@media(max-width:700px){.seo-section-head,.seo-savebar{align-items:stretch;flex-direction:column}.seo-savebar .btn{width:100%}}
|
||
|
||
/* Download catalogue and distribution admin */
|
||
.distribution-admin{max-width:1200px;margin:auto;padding-bottom:55px}.distribution-header{display:flex;justify-content:space-between;align-items:end;gap:24px}.distribution-header-actions{display:flex;gap:10px;flex-wrap:wrap}.distribution-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:25px 0}.distribution-summary>div{background:#fff;border:1px solid #e4e7ec;border-radius:14px;padding:18px 20px}.distribution-summary span,.distribution-summary strong{display:block}.distribution-summary span{font-size:12px;color:#667085}.distribution-summary strong{font-size:28px;color:#101828;margin-top:5px}.distribution-notice,.distribution-errors{padding:14px 18px;border-radius:10px;margin:16px 0;background:#ecfdf3;border:1px solid #a6f4c5;color:#067647}.distribution-errors{background:#fef3f2;border-color:#fecdca;color:#b42318}.distribution-table{margin-bottom:22px}.distribution-row-actions{display:flex;gap:14px;justify-content:flex-end;align-items:center;white-space:nowrap}.distribution-row-actions form{margin:0}.dist-action{background:none;border:0;padding:4px 0;color:#245bc6;font-weight:750;font-size:13px;cursor:pointer;text-decoration:none}.dist-unpublish{color:#b54708}.dist-publish{color:#067647}.distribution-panel{background:#fff;border:1px solid #e4e7ec;border-radius:14px;margin:12px 0;overflow:hidden}.distribution-panel>summary{list-style:none;display:flex;justify-content:space-between;align-items:center;gap:12px;cursor:pointer;padding:19px 24px}.distribution-panel>summary::-webkit-details-marker{display:none}.distribution-panel>summary strong,.distribution-panel>summary small{display:block}.distribution-panel>summary strong{font-size:16px;color:#101828}.distribution-panel>summary small{font-size:12px;color:#667085;margin-top:4px}.dist-chevron{font-size:22px;color:#667085}.distribution-panel[open] .dist-chevron{transform:rotate(45deg)}.distribution-form{padding:24px;border-top:1px solid #eef2f6;display:grid;gap:16px}.distribution-form label{display:grid;gap:6px;font-size:13px;font-weight:750;color:#344054}.distribution-form input:not([type=checkbox]),.distribution-form textarea{width:100%;border:1px solid #d0d5dd;border-radius:9px;padding:11px 12px;background:#fff;color:#101828;font:inherit}.distribution-form .form-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.distribution-file{border:1px dashed #cbd5e1;border-radius:12px;padding:16px;background:#f8fafc}.distribution-file small{color:#667085;font-weight:400}.distribution-file input{background:transparent!important;border:0!important;padding-left:0!important}.distribution-check{display:flex!important;align-items:center;gap:12px!important;padding:12px 0}.distribution-check input{width:18px;height:18px;flex:none}.distribution-check strong,.distribution-check small{display:block}.distribution-check small{font-weight:400;color:#667085;margin-top:3px}.distribution-form>.btn{justify-self:start}.distribution-delete{padding:0 24px 22px}.distribution-catalogue{background:#f6f8fc;padding:76px 0;border-top:1px solid #e4e7ec}.distribution-product-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin-top:28px}.distribution-product-card{background:#fff;border:1px solid #e4e7ec;border-radius:18px;padding:26px;display:flex;flex-direction:column;box-shadow:0 8px 30px rgba(16,24,40,.04)}.distribution-product-top,.distribution-product-footer{display:flex;justify-content:space-between;align-items:center;gap:12px}.distribution-platform{background:#eff6ff;color:#175cd3;border-radius:20px;padding:5px 10px;font-size:11px;font-weight:800}.distribution-version{font-size:12px;color:#667085}.distribution-product-icon{display:grid;place-items:center;width:48px;height:48px;background:#0b1730;color:#e8bc66;border-radius:12px;font-size:23px;margin:26px 0 12px}.distribution-product-card h3{font-size:22px;letter-spacing:-.03em;margin:0 0 8px;color:#101828}.distribution-product-card p{font-size:14px;line-height:1.6;color:#667085;flex:1;margin:0 0 28px}.distribution-product-footer{border-top:1px solid #eef2f6;padding-top:20px}.distribution-product-footer>span{font-size:12px;color:#667085}.checksum-box summary{cursor:pointer;font-size:12px;font-weight:750;color:#475467}.checksum-box code{display:block;margin-top:12px}.download-primary{background:#e8bc66!important;color:#101828!important}.download-icon{background:#101828!important;color:#e8bc66!important}
|
||
@media(max-width:900px){.distribution-product-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.distribution-header{align-items:start;flex-direction:column}}@media(max-width:640px){.distribution-product-grid,.distribution-summary{grid-template-columns:1fr}.distribution-form .form-grid{grid-template-columns:1fr}.distribution-row-actions{flex-wrap:wrap}.distribution-header-actions{width:100%}.distribution-table .pro-table{min-width:730px}}
|
||
|
||
/* Downloads compact layout: override legacy oversized catalogue and empty release panel */
|
||
.download-page .download-content{padding-top:32px;padding-bottom:32px;gap:20px}
|
||
.download-page .release-notes-panel,.download-page .requirements-panel{padding:26px;border-radius:14px}
|
||
.download-page .distribution-catalogue{padding:38px 0 48px;background:#f6f8fc}
|
||
.download-page .distribution-catalogue .section-heading h2{font-size:clamp(24px,3vw,32px);margin:6px 0}
|
||
.download-page .distribution-catalogue .section-heading p{margin:4px 0 0}
|
||
.download-page .distribution-product-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:14px;margin-top:20px}
|
||
.download-page .distribution-product-card{min-height:0;padding:20px;border-radius:14px;box-shadow:0 3px 12px rgba(16,24,40,.035);gap:16px}
|
||
.download-page .distribution-product-main{display:flex;gap:14px;align-items:flex-start;min-width:0}
|
||
.download-page .distribution-product-icon{width:42px;height:42px;flex:0 0 42px;margin:0;border-radius:10px;font-size:20px}
|
||
.download-page .distribution-product-info{min-width:0;flex:1}
|
||
.download-page .distribution-product-top{justify-content:flex-start;gap:10px;flex-wrap:wrap;margin-bottom:9px}
|
||
.download-page .distribution-platform{font-size:10px;padding:4px 8px}
|
||
.download-page .distribution-version{font-size:11px}
|
||
.download-page .distribution-product-card h3{font-size:18px;margin:0 0 5px;line-height:1.3}
|
||
.download-page .distribution-product-card p{font-size:13px;line-height:1.5;margin:0;color:#667085;overflow-wrap:anywhere}
|
||
.download-page .distribution-product-footer{padding-top:13px;margin-top:auto}
|
||
.download-page .distribution-product-footer .btn{padding:9px 14px;font-size:12px;min-height:0}
|
||
.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>
|
||
<body>
|
||
<header class="site-header">
|
||
<nav class="nav-shell" aria-label="Primary navigation">
|
||
<a class="brand" href="{{ route('home') }}">
|
||
<img src="{{ asset('icons/sonardesk-icon-64.png') }}" alt="" width="34" height="34">
|
||
<span>SonarDesk</span>
|
||
</a>
|
||
<div class="nav-links">
|
||
<a href="{{ route('home') }}">Product</a>
|
||
<a href="{{ route('features') }}">Features</a>
|
||
<a href="{{ route('buy') }}">Pricing</a>
|
||
<a href="{{ route('release') }}">Download</a>
|
||
<a href="{{ route('support') }}">Support</a>
|
||
<a href="{{ route('privacy') }}">Privacy</a>
|
||
@auth
|
||
@if (auth()->user()->hasVerifiedEmail())
|
||
<a href="{{ route('portal.index') }}">My licences</a>
|
||
@endif
|
||
|
||
@if (auth()->user()->is_admin)
|
||
@php
|
||
$supportUnread = auth()->user()
|
||
->unreadNotifications()
|
||
->where('type', \App\Notifications\NewSupportTicket::class)
|
||
->count();
|
||
@endphp
|
||
|
||
<a href="{{ route('admin.index') }}">Admin</a>
|
||
<a href="{{ route('admin.users.index') }}">Users</a>
|
||
<a href="{{ route('admin.releases.index') }}">Releases</a>
|
||
<a href="{{ route('admin.download-products.index') }}">Download products</a>
|
||
<a href="{{ route('admin.support.index') }}">
|
||
Support
|
||
@if ($supportUnread > 0)
|
||
<span class="nav-alert-count">{{ $supportUnread }}</span>
|
||
@endif
|
||
</a>
|
||
@endif
|
||
@endauth
|
||
</div>
|
||
<div class="nav-account">
|
||
@auth
|
||
<span class="nav-email">{{ auth()->user()->email }}</span>
|
||
<form method="post" action="{{ route('logout') }}">@csrf<button type="submit" class="nav-signout">Sign out</button></form>
|
||
@else
|
||
<a class="nav-auth-link" href="{{ route('login') }}">Sign in</a>
|
||
<a class="nav-cta" href="{{ route('buy') }}">Start free trial</a>
|
||
@endauth
|
||
</div>
|
||
</nav>
|
||
</header>
|
||
|
||
@hasSection('fullbleed')
|
||
@yield('fullbleed')
|
||
@else
|
||
<main class="wrap">
|
||
@if(session('status'))<div class="alert">{{ session('status') }}</div>@endif
|
||
@if($errors->any())<div class="error">{{ $errors->first() }}</div>@endif
|
||
@yield('content')
|
||
</main>
|
||
@endif
|
||
|
||
<footer class="site-footer">
|
||
<div class="footer-shell">
|
||
<div>
|
||
<div class="footer-brand"><img src="{{ asset('icons/sonardesk-icon-64.png') }}" alt="" width="28" height="28"><span>SonarDesk</span></div>
|
||
<div class="footer-copy">Native SonarQube monitoring for macOS.</div>
|
||
</div>
|
||
<div class="footer-links">
|
||
<a href="{{ route('home') }}">Product</a>
|
||
<a href="{{ route('features') }}">Features</a>
|
||
<a href="{{ route('buy') }}">Pricing</a>
|
||
<a href="{{ route('release') }}">Download</a>
|
||
<a href="{{ route('support') }}">Support</a>
|
||
<a href="{{ route('privacy') }}">Privacy</a>
|
||
<a href="{{ route('terms') }}">Terms</a>
|
||
<a href="{{ route('refund') }}">Refunds</a>
|
||
<a href="{{ route('cookies') }}">Cookies</a>
|
||
<button type="button" class="footer-cookie-link" data-cookie-settings>Cookie settings</button>
|
||
@auth @if(auth()->user()->hasVerifiedEmail())<a href="{{ route('portal.index') }}">Licence portal</a>@endif @else<a href="{{ route('login') }}">Sign in</a>@endauth
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
|
||
<div class="cookie-banner" id="cookieBanner" role="region" aria-label="Cookie consent">
|
||
<div class="cookie-banner-grid">
|
||
<div>
|
||
<h2>Your privacy choices</h2>
|
||
<p>We use necessary cookies for security, sign-in and licence services. Optional cookies stay off unless you choose them. Read our <a href="{{ route('cookies') }}">Cookie Policy</a>.</p>
|
||
</div>
|
||
<div class="cookie-actions">
|
||
<button type="button" class="btn btn-secondary" id="cookieReject">Reject non-essential</button>
|
||
<button type="button" class="btn btn-secondary" data-cookie-settings>Cookie settings</button>
|
||
<button type="button" class="btn btn-primary" id="cookieAccept">Accept all</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="cookie-modal-backdrop" id="cookieModal" role="presentation">
|
||
<section class="cookie-modal" role="dialog" aria-modal="true" aria-labelledby="cookieModalTitle">
|
||
<div class="cookie-modal-head"><div><span class="eyebrow">Privacy controls</span><h2 id="cookieModalTitle">Cookie settings</h2></div><button type="button" class="cookie-close" id="cookieClose" aria-label="Close cookie settings">×</button></div>
|
||
<div class="cookie-modal-body">
|
||
<div class="cookie-option"><div><h3>Necessary</h3><p>Required for security, authentication, sessions and remembering this choice.</p></div><span class="cookie-required">Always on</span></div>
|
||
<label class="cookie-option"><div><h3>Preferences</h3><p>Allows non-essential interface preferences to be remembered.</p></div><input class="cookie-switch" type="checkbox" id="cookiePreferences"></label>
|
||
<label class="cookie-option"><div><h3>Analytics</h3><p>Helps understand site usage. No analytics is loaded unless this is enabled.</p></div><input class="cookie-switch" type="checkbox" id="cookieAnalytics"></label>
|
||
<label class="cookie-option"><div><h3>Marketing</h3><p>Allows optional marketing technologies. None is loaded unless this is enabled.</p></div><input class="cookie-switch" type="checkbox" id="cookieMarketing"></label>
|
||
</div>
|
||
<div class="cookie-modal-actions"><button type="button" class="btn btn-secondary" id="cookieRejectModal">Reject non-essential</button><button type="button" class="btn btn-primary" id="cookieSave">Save choices</button></div>
|
||
</section>
|
||
</div>
|
||
|
||
<script>
|
||
(() => {
|
||
const COOKIE_NAME = 'sonardesk_cookie_consent_v{{ config('sonardesk.privacy.cookie_version', '1') }}';
|
||
const banner = document.getElementById('cookieBanner');
|
||
const modal = document.getElementById('cookieModal');
|
||
const prefs = document.getElementById('cookiePreferences');
|
||
const analytics = document.getElementById('cookieAnalytics');
|
||
const marketing = document.getElementById('cookieMarketing');
|
||
|
||
const read = () => {
|
||
const match = document.cookie.split('; ').find(row => row.startsWith(COOKIE_NAME + '='));
|
||
if (!match) return null;
|
||
try { return JSON.parse(decodeURIComponent(match.substring(COOKIE_NAME.length + 1))); } catch (_) { return null; }
|
||
};
|
||
const write = (value) => {
|
||
const secure = location.protocol === 'https:' ? '; Secure' : '';
|
||
document.cookie = COOKIE_NAME + '=' + encodeURIComponent(JSON.stringify(value)) + '; Max-Age=31536000; Path=/; SameSite=Lax' + secure;
|
||
window.sonardeskCookieConsent = value;
|
||
window.dispatchEvent(new CustomEvent('sonardesk:cookie-consent', {detail:value}));
|
||
banner.classList.remove('is-open'); modal.classList.remove('is-open'); document.body.style.overflow = '';
|
||
};
|
||
const reject = () => write({necessary:true,preferences:false,analytics:false,marketing:false,updatedAt:new Date().toISOString()});
|
||
const open = () => { const current = read() || {}; prefs.checked=!!current.preferences; analytics.checked=!!current.analytics; marketing.checked=!!current.marketing; modal.classList.add('is-open'); document.body.style.overflow='hidden'; };
|
||
const close = () => { modal.classList.remove('is-open'); document.body.style.overflow=''; };
|
||
|
||
document.querySelectorAll('[data-cookie-settings]').forEach(el => el.addEventListener('click', open));
|
||
document.getElementById('cookieAccept').addEventListener('click', () => write({necessary:true,preferences:true,analytics:true,marketing:true,updatedAt:new Date().toISOString()}));
|
||
document.getElementById('cookieReject').addEventListener('click', reject);
|
||
document.getElementById('cookieRejectModal').addEventListener('click', reject);
|
||
document.getElementById('cookieSave').addEventListener('click', () => write({necessary:true,preferences:prefs.checked,analytics:analytics.checked,marketing:marketing.checked,updatedAt:new Date().toISOString()}));
|
||
document.getElementById('cookieClose').addEventListener('click', close);
|
||
modal.addEventListener('click', e => { if (e.target === modal) close(); });
|
||
document.addEventListener('keydown', e => { if (e.key === 'Escape' && modal.classList.contains('is-open')) close(); });
|
||
|
||
const current = read();
|
||
window.sonardeskCookieConsent = current || {necessary:true,preferences:false,analytics:false,marketing:false};
|
||
if (!current) banner.classList.add('is-open');
|
||
})();
|
||
</script>
|
||
|
||
</body>
|
||
</html>
|