1<!DOCTYPE html> 2<html lang="en"> 3<head> 4<meta charset="utf-8"> 5<meta name="viewport" content="width=device-width, initial-scale=1"> 6<link rel="icon" href="../favicon.ico" sizes="any"> 7<link rel="icon" type="image/png" sizes="32x32" href="../favicon.png"> 8<link rel="icon" type="image/png" sizes="256x256" href="../apple-touch-icon.png"> 9<link rel="apple-touch-icon" href="../apple-touch-icon.png"> 10<title>Outdoor LED Signs | Cirrus LED</title> 11<meta name="description" content="Cirrus Outdoor LED Signs offer the perfect balance of quality and affordability, fully customizable, IP67-rated, and backed by a 7-year warranty."> 12<link rel="canonical" href="https://www.cirrusled.com/products/outdoor-led-signs"> 13<meta property="og:type" content="website"> 14<meta property="og:site_name" content="Cirrus LED"> 15<meta property="og:title" content="Outdoor LED Signs"> 16<meta property="og:description" content="Cirrus Outdoor LED Signs offer the perfect balance of quality and affordability, fully customizable, IP67-rated, and backed by a 7-year warranty."> 17<meta property="og:url" content="https://www.cirrusled.com/products/outdoor-led-signs"> 18<meta property="og:image" content="https://www.cirrusled.com/images/hero-1.png"> 19<meta name="twitter:card" content="summary_large_image"> 20<meta name="twitter:title" content="Outdoor LED Signs"> 21<meta name="twitter:description" content="Cirrus Outdoor LED Signs offer the perfect balance of quality and affordability, fully customizable, IP67-rated, and backed by a 7-year warranty."> 22<meta name="twitter:image" content="https://www.cirrusled.com/images/hero-1.png"> 23<link rel="preconnect" href="https://fonts.googleapis.com"> 24<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 25<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Mulish:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500&display=swap"> 26<link rel="stylesheet" href="../assets/css/site.css">
27<script src="https://unpkg.com/lucide@latest/dist/umd/lucide.min.js" defer></script>
27 28<style> 29 /* Split video hero */ 30 .ols-hero .hero-inner { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(36px, 5vw, 64px); align-items: center; } 31 .ols-hero h1 { font-size: clamp(34px, 3.6vw, 52px); } 32 .ols-hero .hero-lead { font-size: 18px; } 33 .ols-hero-video { position: relative; border-radius: 18px; overflow: hidden; border: 1px solid rgba(255,255,255,.12); box-shadow: 0 28px 72px rgba(0,0,0,.5); } 34 .ols-hero-video::before { content: ''; position: absolute; left: 0; right: 0; top: 0; height: 4px; background: var(--gradient-spectrum); z-index: 2; } 35 .ols-hero-video video { width: 100%; display: block; } 36 @media (max-width: 1024px) { .ols-hero .hero-inner { grid-template-columns: 1fr; gap: 40px; } } 37 38 /* Product line cards */ 39 .product-line-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; } 40 .product-line-card { background: #fff; border: 1px solid var(--color-border); border-radius: 18px; overflow: hidden; display: flex; flex-direction: column; } 41 .product-line-card .pl-img { width: 100%; aspect-ratio: 16/9; background: var(--ink-100); display: flex; align-items: center; justify-content: center; position: relative; overflow: hidden; } 42 .product-line-card .pl-img video { width: 100%; height: 100%; object-fit: cover; display: block; } 43 .product-line-card .pl-img-placeholder { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--ink-100) 0%, var(--ink-200) 100%); } 44 .product-line-card .pl-img-placeholder span { font-size: 13px; font-weight: 600; color: var(--ink-400); letter-spacing: .06em; text-transform: uppercase; } 45 .product-line-card.pl-max .pl-img-placeholder { background: linear-gradient(135deg, var(--cobalt-50) 0%, var(--cobalt-100) 100%); } 46 .product-line-card.pl-max .pl-img-placeholder span { color: var(--cobalt-400); } 47 .product-line-card .pl-body { padding: 30px 30px 28px; flex: 1; display: flex; flex-direction: column; } 48 .product-line-card .pl-label { font-family: var(--font-mono); font-size: 11px; font-weight: 600; color: var(--cobalt-500); letter-spacing: .1em; text-transform: uppercase; margin-bottom: 10px; } 49 .product-line-card.pl-max .pl-label { color: var(--cobalt-600); } 50 .product-line-card .pl-body h3 { font-size: 24px; font-weight: 800; letter-spacing: -.02em; margin: 0 0 12px; } 51 .product-line-card .pl-body > p { font-size: 15.5px; line-height: 1.6; color: var(--ink-500); margin: 0 0 22px; } 52 .pl-features { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 10px; } 53 .pl-features li { display: flex; align-items: flex-start; gap: 10px; font-size: 14.5px; color: var(--ink-700); line-height: 1.5; } 54 .pl-features li svg { flex-shrink: 0; margin-top: 2px; color: var(--cobalt-500); width: 16px; height: 16px; } 55 .pl-badge { display: inline-flex; align-items: center; gap: 6px; margin-top: 20px; padding: 7px 14px; border-radius: 999px; background: var(--cobalt-50); border: 1px solid var(--cobalt-100); font-size: 13px; font-weight: 700; color: var(--cobalt-700); } 56 .pl-badge svg { width: 14px; height: 14px; } 57 .pl-stats { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 18px; } 58 .pl-stats span { font-family: var(--font-mono); font-size: 12px; font-weight: 500; color: var(--ink-700); background: var(--ink-50); border: 1px solid var(--color-border); border-radius: 999px; padding: 5px 11px; } 59 @media (max-width: 860px) { .product-line-grid { grid-template-columns: 1fr; } } 60 61 .pitch-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; } 62 .pitch-card { background: #fff; border: 1px solid var(--color-border); border-radius: 14px; padding: 26px; text-align: center; } 63 .pitch-card .pp { font-family: var(--font-mono); font-size: 30px; font-weight: 600; color: var(--cobalt-600); } 64 .pitch-card h4 { font-size: 16px; margin: 10px 0 6px; } 65 .pitch-card p { font-size: 13.5px; color: var(--ink-500); margin: 0; line-height: 1.5; } 66 .pitch-card img { width: 100%; aspect-ratio: 4/3; object-fit: cover; border-radius: 10px; margin-bottom: 16px; background: var(--ink-100); } 67 @media (max-width: 900px) { .pitch-grid { grid-template-columns: repeat(2,1fr); } } 68 @media (max-width: 540px) { .pitch-grid { grid-template-columns: 1fr; } } 69 70 /* What it's made of, studio mosaic */ 71 .build-section { position: relative; background: #fff; } 72 .build-grid { 73 display: grid; 74 grid-template-columns: repeat(4, 1fr); 75 grid-template-rows: repeat(3, 1fr); 76 grid-template-areas: 77 "a a b c" 78 "a a d e" 79 "f f g g"; 80 gap: 1px; 81 height: clamp(520px, 58vw, 720px); 82 } 83 .build-tile { background: #fff; overflow: hidden; } 84 .build-tile img { width: 100%; height: 100%; object-fit: cover; display: block; } 85 .b-a { grid-area: a; } .b-b { grid-area: b; } .b-c { grid-area: c; } .b-d { grid-area: d; } .b-e { grid-area: f; } .b-f { grid-area: e; } .b-g { grid-area: g; } 86 .build-overlay { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; pointer-events: none; padding: 24px; } 87 .build-caption { text-align: center; max-width: 640px; padding: 48px 56px; 88 background: radial-gradient(ellipse 78% 82% at 50% 50%, rgba(255,255,255,.96) 0%, rgba(255,255,255,.9) 48%, rgba(255,255,255,0) 86%); } 89 .build-caption .eyebrow { margin-bottom: 14px; } 90 .build-caption h2 { font-size: clamp(28px, 3.4vw, 46px); font-weight: 800; letter-spacing: -.025em; line-height: 1.05; margin: 0 0 16px; color: var(--ink-900); } 91 .build-caption p { font-size: clamp(15px, 1.3vw, 18px); line-height: 1.6; color: var(--ink-600); margin: 0; } 92 @media (max-width: 900px) { 93 .build-grid { grid-template-columns: repeat(2, 1fr);
93 grid-template-rows: none; grid-auto-rows: none; grid-template-areas: none; height: auto; } 94 .b-a, .b-b, .b-c, .b-d, .b-e, .b-f, .b-g { grid-area: auto; aspect-ratio: 1500 / 844; } 95 .b-a, .b-f, .b-g { grid-column: 1 / -1; } 96 .build-tile img { object-fit: contain; } 97 .build-caption { background: rgba(255,255,255,.93); border-radius: 16px; -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px); padding: 30px 26px; box-shadow: var(--shadow-md); } 98 } 99 100 /* Made in the USA */ 101 .usa-section { position: relative; overflow: hidden; background: var(--ink-1000); color: #fff; padding: clamp(64px, 8vw, 104px) 0; } 102 .usa-pixels { position: absolute; inset: 0; background-image: radial-gradient(rgba(255,255,255,.06) 1px, transparent 1.3px); background-size: 14px 14px; pointer-events: none; } 103 .usa-glow { position: absolute; left: 50%; top: -180px; transform: translateX(-50%); width: 760px; height: 460px; border-radius: 50%; background: radial-gradient(closest-side, rgba(31,95,224,.42), transparent); filter: blur(20px); pointer-events: none; } 104 .usa-section .container { position: relative; z-index: 1; } 105 .usa-head { max-width: 820px; margin: 0 auto; text-align: center; } 106 .usa-head h2 { font-size: clamp(30px, 4.4vw, 56px); font-weight: 800; letter-spacing: -.028em; line-height: 1.04; margin: 16px 0 18px; color: #fff; } 107 .usa-head h2 em { font-style: normal; background: var(--gradient-spectrum); -webkit-background-clip: text; background-clip: text; color: transparent; } 108 .usa-head p { font-size: clamp(16px, 1.4vw, 19px); line-height: 1.6; color: rgba(255,255,255,.72); margin: 0 auto; max-width: 710px; } 109 .usa-video { margin: clamp(40px, 5vw, 60px) auto 0; max-width: 1000px; } 110 .usa-video-frame { position: relative; border-radius: 18px; overflow: hidden; border: 1px solid rgba(255,255,255,.12); box-shadow: 0 40px 100px rgba(0,0,0,.6); aspect-ratio: 16 / 9; background: #000; } 111 .usa-video-frame::before { content: ''; position: absolute; left: 0; right: 0; top: 0; height: 4px; background: var(--gradient-spectrum); z-index: 2; } 112 .usa-video-frame video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; } 113 .usa-points { display: flex; flex-wrap: wrap; justify-content: center; gap: clamp(18px, 3vw, 48px); margin: clamp(34px, 4vw, 48px) auto 0; max-width: 940px; } 114 .usa-point { display: flex; align-items: center; gap: 10px; font-size: 14.5px; font-weight: 600; color: rgba(255,255,255,.82); } 115 .usa-point i { width: 19px; height: 19px; color: var(--cobalt-300); flex: none; } 116 .usa-note { text-align: center; font-size: 13px; line-height: 1.5; color: rgba(255,255,255,.48); margin: clamp(26px, 3vw, 34px) auto 0; max-width: 660px; } 117 118 /* Max bandwidth comparison */ 119 .bw-section { position: relative; overflow: hidden; } 120 .bw-pixels { position: absolute; inset: 0; background-image: radial-gradient(rgba(255,255,255,.05) 1px, transparent 1.3px); background-size: 14px 14px; pointer-events: none; } 121 .bw-header { max-width: 720px; } 122 .bw-viz { --bw-stage-size: min(440px, 78vw); --bw-max-r: calc(var(--bw-stage-size) / 2); --bw-max-dy: 150px; --bw-max-inset: 59.07px; position: relative; display: flex; flex-direction: column; align-items: center; margin-top: clamp(48px, 6vw, 72px); } 123 .bw-flag { font-family: var(--font-mono); font-size: 13px; color: var(--cobalt-200); background: rgba(31,95,224,.14); border: 1px solid rgba(31,95,224,.4); border-radius: 999px; padding: 6px 14px; white-space: nowrap; margin-bottom: clamp(32px, 5vw, 48px); } 124 .bw-stage { position: relative; width: var(--bw-stage-size); aspect-ratio: 1 / 1; margin-bottom: clamp(32px, 5vw, 48px); } 125 .bw-ring { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border-radius: 50%; } 126 .bw-ring::before, .bw-ring::after { content: ''; position: absolute; inset: 0; border-radius: 50%; } 127 .bw-ring::after { animation: bwSpin var(--bw-dur, 4s) linear infinite; } 128 .bw-ring-max { width: 100%; height: 100%; } 129 .bw-ring-max::before { border: 1px solid rgba(31,95,224,.5); background: radial-gradient(closest-side, rgba(31,95,224,.22), rgba(31,95,224,.04) 74%, transparent); box-shadow: 0 0 60px rgba(31,95,224,.35); } 130 .bw-ring-max::after { background: conic-gradient(from 0deg, transparent 0deg, transparent 250deg, rgba(31,95,224,0) 250deg, rgba(31,95,224,.85) 345deg, var(--cobalt-200) 360deg); -webkit-mask: radial-gradient(closest-side, transparent calc(100% - 28px), #000 calc(100% - 26px)); mask: radial-gradient(closest-side, transparent calc(100% - 28px), #000 calc(100% - 26px)); } 131 .bw-ring-std { width: 46%; height: 46%; z-index: 1; } 132 .bw-ring-std::before { border: 1px solid rgba(255,255,255,.28); background: radial-gradient(closest-side, rgba(255,255,255,.10), rgba(255,255,255,.02) 74%, transparent); } 133 .bw-ring-std::after { background: conic-gradient(from 0deg, transparent 0deg, transparent 250deg, rgba(255,255,255,0) 250deg, rgba(255,255,255,.6) 345deg, #fff 360deg); -webkit-mask: radial-gradient(closest-side, transparent calc(100% - 20px), #000 calc(100% - 18px)); mask: radial-gradient(closest-side, transparent calc(100% - 20px), #000 calc(100% - 18px)); } 134 .bw-hub { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-family: var(--font-mono); font-size: 13px; color: var(--ink-300); } 135 @keyframes bwSpin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } 136 137 /* Desktop: circle with flanking callouts + connector lines (>860px) */ 138 .bw-diagram { display: flex; align-items: center; justify-content: center; } 139 .bw-callout { position: relative; width: 230px; flex: none; } 140 .bw-callout-max { text-align: right; transform: translateY(150px); } 141 .bw-callout-std { text-align: left; transform: translateY(-8px); } 142 .bw-callout-line { position: absolute; top: 50%; height: 1px; z-index: 2; background: linear-gradient(90deg, rgba(255,255,255,.55), rgba(255,255,255,.15)); } 143 .bw-callout-std .bw-callout-line { left: calc(100% - 30px); transform: translateY(-50%); width: calc(30px + var(--bw-stage-size) * 0.27); } 144 .bw-callout-max .bw-callout-line { left: calc(-1 * var(--bw-max-inset)); transform: translateY(-50%); width: calc(30px + var(--bw-max-inset)); background: linear-gradient(90deg, rgba(156,192,255,.15), rgba(156,192,255,.65)); } 145 .bw-callout-dot { position: absolute; top: 50%; width: 6px; height: 6px; border-radius: 50%; z-index: 2; transform: translateY(-50%); background: rgba(255,255,255,.75); }
146 .bw-callout-std .bw-callout-dot { left: calc(100% + var(--bw-stage-size) * 0.27); } 147 .bw-callout-max .bw-callout-dot { left: calc(-1 * var(--bw-max-inset)); background: var(--cobalt-300); } 148 .bw-callout-text { padding: 0 12px; } 149 150 /* Mobile fallback: stacked legend, no lines (<=860px) */ 151 .bw-legend { display: none; flex-wrap: wrap; justify-content: center; gap: clamp(28px, 5vw, 64px); margin-top: clamp(32px, 5vw, 48px); } 152 .bw-legend-item { display: flex; align-items: flex-start; gap: 12px; max-width: 240px; text-align: left; } 153 .bw-dot { width: 10px; height: 10px; border-radius: 50%; margin-top: 6px; flex: none; background: #fff; } 154 .bw-legend-max .bw-dot { background: var(--cobalt-300); box-shadow: 0 0 8px rgba(31,95,224,.6); } 155 156 .bw-copy-eyebrow { font-size: 11px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--ink-400); } 157 .bw-callout-max .bw-copy-eyebrow, .bw-legend-max .bw-copy-eyebrow { color: var(--cobalt-300); } 158 .bw-copy-value { font-size: 18px; font-weight: 700; color: #fff; margin-top: 4px; } 159 .bw-copy-live { font-family: var(--font-mono); font-size: 13px; color: var(--ink-300); margin-top: 6px; } 160 .bw-callout-max .bw-copy-live, .bw-legend-max .bw-copy-live { color: var(--cobalt-200); } 161 .bw-footnote { text-align: center; font-size: 13px; color: var(--ink-400); margin: 32px auto 0; } 162 163 @media (max-width: 860px) { 164 .bw-callout { display: none; } 165 .bw-legend { display: flex; } 166 } 167 @media (prefers-reduced-motion: reduce) { .bw-ring::after { animation: none; } } 168</style> 169 <!-- Tracking ported from cirrusled.com (Webflow) --> 170
170<script type="text/javascript">!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.agent='plwebflow';n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,document,'script','https://connect.facebook.net/en_US/fbevents.js');fbq('init', '1910226229259262');fbq('track', 'PageView');</script>
170<!-- CSS animation code --> 171 <meta name="google-site-verification" content="MOOrklGxaQJEXXWsi2G7oO-Q4SJHg2ucpcwd64OIdhs"> 172 <!-- TikTok Pixel Code Start --> 173
173<script> 174!function (w, d, t) { 175w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie","holdConsent","revokeConsent","grantConsent"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);ttq.instance=function(t){for( 176var e=ttq._i[t]||[],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e},ttq.load=function(e,n){var r="https://analytics.tiktok.com/i18n/pixel/events.js",o=n&&n.partner;ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=r,ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},ttq._o[e]=n||{};n=document.createElement("script") 177;n.type="text/javascript",n.async=!0,n.src=r+"?sdkid="+e+"&lib="+t;e=document.getElementsByTagName("script")[0];e.parentNode.insertBefore(n,e)}; 178ttq.load('CUKV4AJC77U0037LQ3LG'); 179ttq.page(); 180}(window, document, 'ttq'); 181</script>
181 182 <!-- TikTok Pixel Code End --> 183
183<script>var _hsp = window._hsp = window._hsp || [];window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);} 184var useGoogleConsentModeV2 = true;var waitForUpdateMillis = 1000; 185var hsLoadGtm = function loadGtm() { if(window._hsGtmLoadOnce) { return; } 186 if (useGoogleConsentModeV2) { 187 gtag('set','developer_id.dZTQ1Zm',true); 188 gtag('consent', 'default', { 'ad_storage': 'denied', 'analytics_storage': 'denied', 'ad_user_data': 'denied', 'ad_personalization': 'denied', 'wait_for_update': waitForUpdateMillis }); 189 _hsp.push(['useGoogleConsentModeV2']) }
vendor: 344 bytes, lines 189-190
189 190 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','
190GTM-TN3NVW6
vendor: 8 bytes, lines 190-191
190'); 191
191window._hsGtmLoadOnce = true;}; 192_hsp.push(['addPrivacyConsentListener', function(consent){ if(consent.allowed || (consent.categories && consent.categories.analytics)){ hsLoadGtm(); }}]); 193</script>
vendor: 70 bytes, lines 193-194
193 194 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
194GTM-TN3NVW6
vendor: 85 bytes, lines 194-195
194" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 195
195<!-- Start of HubSpot Embed Code --> 196
196<script type="text/javascript" id="hs-script-loader" async="" defer="" src="https://js.hs-scripts.com/20857872.js"></script>
196 197 <!-- End of HubSpot Embed Code --> 198 <!-- End tracking --> 199</head> 200<body> 201<div id="site-nav"></div> 202 203<header class="hero-dark ols-hero"> 204 <div class="hero-bg-pixels"></div> 205 <div class="hero-bg-glow"></div> 206 <div class="hero-bg-cobalt"></div> 207 <div class="container hero-inner"> 208 <div> 209 <h1>A masterpiece of innovation, built for one reason: <em>growing your business</em>.</h1> 210 <p class="hero-lead">Fully customizable to meet your needs, Cirrus outdoor LED signs deliver high-performance features at a price that fits your budget.</p> 211 <div class="hero-ctas"> 212 <a class="btn btn-primary btn-lg" href="../get-a-quote">Get quote</a> 213 <a class="btn btn-ghost-dark btn-lg" href="../roi-calculator">Calculate your ROI</a> 214 </div> 215 </div> 216 <div class="ols-hero-video" data-reveal> 217 <video src="../assets/video/outdoor-display-hero.mp4" autoplay muted loop playsinline preload="metadata" aria-label="Cirrus outdoor LED display in action"></video> 218 </div> 219 </div> 220</header> 221 222<section class="section"> 223 <div class="container"> 224 <div class="section-header align-left" style="margin-bottom:48px;max-width:680px"> 225 <div class="eyebrow">Engineered to outperform</div> 226 <h2>High-performance features, no compromise.</h2> 227 </div> 228 <div class="features cols-3"> 229 <div class="feature" data-reveal><div class="feature-icon"><i data-lucide="grid-2x2"></i></div><h3>3-5Ã more pixels</h3><p>More pixels than traditional displays, with an edge-to-edge viewing area for crisp, vivid content.</p></div> 230 <div class="feature" data-reveal><div class="feature-icon"><i data-lucide="sun-medium"></i></div><h3>Auto-brightness</h3><p>Built-in sensors automatically adjust brightness for optimal visibility in any environment, day or night.</p></div> 231 <div class="feature" data-reveal><div class="feature-icon"><i data-lucide="feather"></i></div><h3>40% lighter</h3><p>Lighter than the competition, making installation simpler, faster, and more affordable.</p></div> 232 <div class="feature" data-reveal><div class="feature-icon"><i data-lucide="shield-check"></i></div><h3>IP67-rated</h3><p>100% dustproof and waterproof performance, built to withstand the harshest conditions.</p></div> 233 <div class="feature" data-reveal><div class="feature-icon"><i data-lucide="zap"></i></div><h3>Gold wire-bonded LEDs</h3><p>Reduce energy use, extend lifespan, and maintain exceptional quality year after year.</p></div> 234 <div class="feature" data-reveal><div class="feature-icon"><i data-lucide="ruler"></i></div><h3>Built to fit</h3><p>Modular 1' Ã 2' panels let you design a display that perfectly fits your space and brand.</p></div> 235 </div> 236 </div> 237</section> 238 239<section class="build-section"> 240 <div class="build-grid"> 241 <figure class="build-tile b-a"><img src="../assets/products/outdoor/build-wall-assembled.jpg" alt="Cirrus 3x6 LED frame wall assembled"></figure> 242 <figure class="build-tile b-b"><img src="../assets/products/outdoor/build-frame-front.jpg" alt="Cirrus display frame, front view"></figure> 243 <figure class="build-tile b-c"><img src="../assets/products/outdoor/build-frame-mod.jpg" alt="Frame with module, front view"></figure> 244 <figure class="build-tile b-d"><img src="../assets/products/outdoor/build-mods-frames.jpg" alt="Modules and frames"></figure> 245 <figure class="build-tile b-e"><img src="../assets/products/outdoor/build-panels-pitches.jpg" alt="LED panels in 12, 9, 6 and 4mm pixel pitches"></figure> 246 <figure class="build-tile b-f"><img src="../assets/products/outdoor/build-panel-backside.jpg" alt="LED panel rear, showing weatherized housing"></figure> 247 <figure class="build-tile b-g"><img src="../assets/products/outdoor/build-controller.jpg" alt="Cirrus outdoor controller"></figure> 248 </div> 249 <div class="build-overlay"> 250 <div class="build-caption"> 251 <div class="eyebrow">Anatomy of a display</div> 252 <h2>The screen is the backbone of the system.</h2> 253 <p>ScreenHub software, scheduling, AI, and 24/7 monitoring all run on top of this hardware, so every layer is engineered to carry them: gold wire-bonded LED modules, a sealed aluminum frame, and a weatherized controller built for years of nonstop performance.</p> 254 </div> 255 </div> 256</section> 257 258<section class="section"> 259 <div class="container"> 260 <div class="media-row"> 261 <div class="media-row-text"> 262 <div class="eyebrow">Low Monthly Payments</div> 263 <h2>No large upfront cost. One simple monthly payment.</h2> 264 <p>A complete, turn-key digital signage solution, covering everything from installation to 24/7 support, with a new next-generation display every 7 years.</p> 265 <ul class="check-list"> 266 <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
266Comprehensive 5 or 7-year warranty & lifetime customer support</li> 267 <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>24/7 hardware monitoring built in</li> 268 <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>Optional AI bundle for analytics & dynamic content</li> 269 </ul> 270 <a class="btn btn-dark" href="../get-a-quote">Get quote</a> 271 </div> 272 <div class="media-figure"><video src="../assets/video/subscribe-to-own.mp4" poster="../assets/ext/fdcdaaef4c.avif" autoplay muted loop playsinline preload="metadata" aria-label="Cirrus outdoor LED sign installed and running content"></video></div> 273 </div> 274 </div> 275</section> 276 277<!-- ===== PRODUCT LINES ===== --> 278<section class="section section-alt"> 279 <div class="container"> 280 <div class="section-header"> 281 <div class="eyebrow">Display Lines</div> 282 <h2>Built for every budget and every venue.</h2> 283 <p>Every Cirrus outdoor display is built on the same proven hardware platform. Choose the line that fits your use case.</p> 284 </div> 285 <div class="product-line-grid"> 286 287 <div class="product-line-card" data-reveal> 288 <div class="pl-body"> 289 <h3>Cirrus Outdoor™</h3> 290 <p>The right choice for most businesses. Cirrus Outdoor™ delivers vivid, reliable LED display performance for roadside signage, storefronts, and everyday advertising, at a price point that makes sense for most businesses.</p> 291 <ul class="pl-features"> 292 <li><i data-lucide="check"></i>Available in 6mm, 9mm, and 12mm pixel pitches</li> 293 <li><i data-lucide="check"></i>Smooth, high-quality playback for graphics, animations, and promotional content</li> 294 <li><i data-lucide="check"></i>Ideal for small to mid-size displays</li> 295 <li><i data-lucide="check"></i>Industry-leading reliability, backed by a lifetime warranty</li> 296 </ul> 297 <div class="pl-stats"><span>6mm</span><span>9mm</span><span>12mm</span><span>roadside</span><span>storefronts</span><span>small to mid-size</span></div> 298 </div> 299 </div> 300 301 <div class="product-line-card pl-max" data-reveal> 302 <div class="pl-body"> 303 <h3>Cirrus Outdoor Live™</h3> 304 <p>The right choice for demanding applications. Cirrus Outdoor Live™ uses next-generation technology to deliver dramatically higher frame rates. The difference becomes more noticeable the larger the display gets.</p> 305 <ul class="pl-features"> 306 <li><i data-lucide="check"></i>10x faster data transmission for significantly higher frame rates</li> 307 <li><i data-lucide="check"></i>Cleaner, smoother video playback with no compression artifacts</li> 308 <li><i data-lucide="check"></i>Recommended for larger displays, video-heavy content, and entertainment venues</li> 309 <li><i data-lucide="check"></i>Same pixel pitches and physical footprint as Cirrus Outdoor™</li> 310 </ul> 311 <div class="pl-stats"><span>10x faster</span><span>high frame rate</span><span>video ready</span><span>large displays</span><span>entertainment venues</span></div> 312 </div> 313 </div> 314 315 </div> 316 </div> 317</section> 318 319<!-- ===== MAX BANDWIDTH ===== --> 320<section class="section section-dark bw-section"> 321 <div class="bw-pixels"></div> 322 <div class="container"> 323 <div class="section-header on-dark bw-header"> 324 <div class="eyebrow on-dark">The Outdoor Live™ difference</div> 325 <h2>10x the speed. Built for demanding video applications.</h2> 326 <p>Cirrus Outdoor Live™ moves 125 MB every second â ten times the data rate of standard Ethernet. More data per second means more frames per second: smoother, cleaner motion on every square foot of display.</p> 327 </div> 328 329 <div class="bw-viz"> 330 <span class="bw-flag">10× the data rate</span> 331 332 <div class="bw-diagram"> 333 <div class="bw-callout bw-callout-std"> 334 <div class="bw-callout-text"> 335 <div class="bw-copy-eyebrow">Cirrus Outdoor™</div> 336 <div class="bw-copy-value">12.5 MB per second</div> 337 <div class="bw-copy-live">Standard frame rate · <span data-bw-amount="std">0 MB</span> moved</div> 338 </div>
339 <span class="bw-callout-line"></span> 340 <span class="bw-callout-dot"></span> 341 </div> 342 343 <div class="bw-stage"> 344 <div class="bw-ring bw-ring-max" style="--bw-dur:1s"></div> 345 <div class="bw-ring bw-ring-std" style="--bw-dur:10s"> 346 <div class="bw-hub">100 Mbps</div> 347 </div> 348 </div> 349 350 <div class="bw-callout bw-callout-max"> 351 <span class="bw-callout-dot"></span> 352 <span class="bw-callout-line"></span> 353 <div class="bw-callout-text"> 354 <div class="bw-copy-eyebrow">Cirrus Outdoor Live™</div> 355 <div class="bw-copy-value">125 MB per second</div> 356 <div class="bw-copy-live">Higher frame rate · <span data-bw-amount="max">0 MB</span> moved</div> 357 </div> 358 </div> 359 </div> 360 361 <div class="bw-legend"> 362 <div class="bw-legend-item bw-legend-std"> 363 <span class="bw-dot"></span> 364 <div> 365 <div class="bw-copy-eyebrow">Cirrus Outdoor™</div> 366 <div class="bw-copy-value">12.5 MB per second</div> 367 <div class="bw-copy-live">Standard frame rate · <span data-bw-amount="std">0 MB</span> moved</div> 368 </div> 369 </div> 370 <div class="bw-legend-item bw-legend-max"> 371 <span class="bw-dot"></span> 372 <div> 373 <div class="bw-copy-eyebrow">Cirrus Outdoor Live™</div> 374 <div class="bw-copy-value">125 MB per second</div> 375 <div class="bw-copy-live">Higher frame rate · <span data-bw-amount="max">0 MB</span> moved</div> 376 </div> 377 </div> 378 </div> 379 </div> 380 381 <p class="bw-footnote">Circle areas and refresh sweeps drawn to scale â 1,000 vs 100 Mbps.</p> 382 </div> 383</section> 384 385<section class="section"> 386 <div class="container"> 387 <div class="section-header"> 388 <div class="eyebrow">Pixel Pitch</div> 389 <h2>The right resolution for every viewing distance.</h2> 390 <p>Choose the pitch that matches how, and how far away, your audience sees your sign.</p> 391 </div> 392 <div class="pitch-grid"> 393 <div class="pitch-card" data-reveal><img src="../assets/ext/6c3bea4f94.webp" alt="4mm pixel pitch"><div class="pp">4mm</div><h4>Close-range</h4><p>Ultra-sharp visuals for storefronts & high foot traffic. Clear from 5 ft, optimal at 15 ft.</p></div> 394 <div class="pitch-card" data-reveal><img src="../assets/ext/50783d5122.webp" alt="6mm pixel pitch"><div class="pp">6mm</div><h4>Roadside</h4><p>For viewers standing or driving by at moderate distances. Viewable from 8-20 ft.</p></div> 395 <div class="pitch-card" data-reveal><img src="../assets/ext/b29ef1f09e.webp" alt="9mm pixel pitch"><div class="pp">9mm</div><h4>Parking lots</h4><p>Longer viewing distances across lots or wide roads. Best from 12-30 ft.</p></div> 396 <div class="pitch-card" data-reveal><img src="../assets/ext/cbcdb3eb43.webp" alt="12mm pixel pitch"><div class="pp">12mm</div><h4>Highway</h4><p>High-impact visibility from afar. Perfect near highways, viewable from 20-40 ft.</p></div> 397 </div> 398 </div> 399</section> 400 401<section class="section section-dark"> 402 <div class="container"> 403 <div class="media-row"> 404 <div class="media-figure" style="box-shadow:none"><img src="../assets/ext/fd250d6f73.webp" alt="ScreenHub content editor"></div> 405 <div class="media-row-text"> 406 <div class="eyebrow on-dark">Powered by ScreenHub</div> 407 <h2 style="color:#fff">Design, preview, and publish in minutes.</h2> 408 <p style="color:rgba(255,255,255,.72)">Refreshingly simple sign management software, developed with direct customer feedback. Create captivating content with an intuitive drag-and-drop editor, all from any web browser.</p> 409 <a class="btn btn-primary" href="../screenhub">Explore ScreenHub</a> 410 </div> 411 </div> 412 </div> 413</section> 414 415<section class="usa-section"> 416 <div class="usa-pixels"></div> 417 <div class="usa-glow"></div> 418 <div class="container"> 419 <div class="usa-head"> 420 <div class="eyebrow on-dark">American made</div> 421 <h2>Made in the <em>USA</em>, at our factory in New Hampshire.</h2> 422 <p>Every Cirrus display is built and quality-tested at our factory in Portsmouth, New Hampshire, from domestic and globally sourced components.</p> 423 </div> 424 <div class="usa-video"> 425 <div class="usa-video-frame"> 426 <video src="../assets/video/factory-tour.mp4" autoplay muted loop playsinline preload="metadata" aria-label="Inside the Cirrus factory in Portsmouth, New Hampshire"></video> 427 </div> 428 </div> 429 <div class="usa-points"> 430 <div class="usa-point"><i data-lucide="map-pin"></i>Built & tested in Portsmouth, NH</div> 431 <div class="usa-point"><i data-lucide="headset"></i>US-based support, for the life of the sign</div> 432 <div class="usa-point"><i data-lucide="globe"></i>Domestic and globally sourced components</div> 433 </div> 434 </div> 435</section> 436 437<section class="section"> 438 <div class="container"> 439 <div class="cta-band"> 440 <div class="cta-band-glow"></div> 441 <div class="cta-band-inner"> 442 <div><h2>Build the sign your business deserves.</h2><p>Tell us about your location and goals. We'll reply within one business day with options tailored to your space.</p></div> 443 <div class="cta-band-ctas"><a class="btn btn-primary btn-lg" href="../get-a-quote">Get quote</a></div> 444 </div> 445 </div> 446 </div> 447</section> 448 449<div id="site-footer"></div>
450<script>window.SITE_BASE="../";</script>
vendor: 1 bytes, line 450
450
451<script src="../assets/js/site.js"></script>
vendor: 1 bytes, line 451
451
452<script> 453 // Play looping videos only while on screen 454 (function () { 455 var vids = document.querySelectorAll('video[loop]'); 456 if (!('IntersectionObserver' in window)) return; 457 var io = new IntersectionObserver(function (entries) { 458 entries.forEach(function (e) { 459 if (e.isIntersecting) { e.target.play().catch(function () {}); } 460 else { e.target.pause(); } 461 }); 462 }, { threshold: 0.2 }); 463 vids.forEach(function (v) { io.observe(v); }); 464 })(); 465</script>
vendor: 1 bytes, line 465
465
466<script> 467 // Max bandwidth comparison â live "data moved" counters 468 (function () { 469 var maxAmts = document.querySelectorAll('[data-bw-amount="max"]'); 470 var stdAmts = document.querySelectorAll('[data-bw-amount="std"]'); 471 if (!maxAmts.length || !stdAmts.length) return; 472 var start = performance.now(); 473 function fmt(mb) { 474 if (mb >= 1000) return (mb / 1000).toFixed(2) + ' GB'; 475 return (mb % 1 === 0 ? mb.toFixed(0) : mb.toFixed(1)) + ' MB'; 476 } 477 function tick() { 478 var elapsed = (performance.now() - start) / 1000; 479 var lapsMax = Math.floor(elapsed); 480 var lapsStd = Math.floor(elapsed / 10); 481 var maxText = fmt(lapsMax * 125); 482 var stdText = fmt(lapsStd * 125); 483 maxAmts.forEach(function (el) { el.textContent = maxText; }); 484 stdAmts.forEach(function (el) { el.textContent = stdText; }); 485 } 486 tick(); 487 setInterval(tick, 100); 488 })(); 489</script>
vendor: 1 bytes, line 489
489
490<script> 491 // Max bandwidth comparison â position each callout's dot exactly on its 492 // ring's rendered edge (measured directly, not estimated from CSS vars) 493 // so the gray and blue dots sit the same distance from their circles. 494 (function () { 495 function positionCallout(ringSel, calloutSel, side) { 496 var ring = document.querySelector(ringSel); 497 var callout = document.querySelector(calloutSel); 498 var dot = callout && callout.querySelector('.bw-callout-dot'); 499 var line = callout && callout.querySelector('.bw-callout-line'); 500 if (!ring || !callout || !dot || !line) return; 501 502 var ringRect = ring.getBoundingClientRect(); 503 var calloutRect = callout.getBoundingClientRect(); 504 var dotRect = dot.getBoundingClientRect(); 505 if (!ringRect.width || !calloutRect.width) return; 506 507 var cx = ringRect.left + ringRect.width / 2; 508 var cy = ringRect.top + ringRect.height / 2; 509 var r = ringRect.width / 2; 510 511 var dotCenterY = dotRect.top + dotRect.height / 2; 512 var dy = dotCenterY - cy; 513 var dxAbs = Math.sqrt(Math.max(r * r - dy * dy, 0)); 514 var targetX = side === 'right' ? cx + dxAbs : cx - dxAbs; 515 516 var dotW = dotRect.width, dotH = dotRect.height; 517 var localX = targetX - calloutRect.left - dotW / 2; 518 var localY = dotCenterY - calloutRect.top - dotH / 2; 519 520 dot.style.transform = 'none'; 521 dot.style.top = localY + 'px'; 522 dot.style.left = localX + 'px'; 523 524 var textInset = 30; // px from the callout's stage-facing edge toward the text 525 var lineNearX = side === 'right' ? textInset : calloutRect.width - textInset; 526 var dotLocalCenterX = localX + dotW / 2; 527 var lineH = line.getBoundingClientRect().height || 1; 528 529 line.style.transform = 'none'; 530 line.style.top = (localY + dotH / 2 - lineH / 2) + 'px'; 531 line.style.left = Math.min(dotLocalCenterX, lineNearX) + 'px'; 532 line.style.width = Math.abs(lineNearX - dotLocalCenterX) + 'px'; 533 } 534 535 function update() { 536 positionCallout('.bw-ring-std', '.bw-callout-std', 'left'); 537 positionCallout('.bw-ring-max', '.bw-callout-max', 'right'); 538 } 539 540 window.addEventListener('load', update); 541 window.addEventListener('resize', update); 542 update(); 543 })(); 544</script>
544 545</body> 546</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.