Files
2026-10-12 10:24:08 +01:00

434 lines
75 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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>