PageSourceSearch

https://cirrusled.com/products/outdoor-led-signs

html cirrusled.com collected 2026-10-05 08:57:47 UTC 37,861 bytes, 546 lines download raw bytes

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 &amp; 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 &amp; 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&trade;</h3>
290          <p>The right choice for most businesses. Cirrus Outdoor&trade; 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&trade;</h3>
304          <p>The right choice for demanding applications. Cirrus Outdoor Live&trade; 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&trade;</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&trade; difference</div>
325      <h2>10x the speed. Built for demanding video applications.</h2>
326      <p>Cirrus Outdoor Live&trade; moves 125&nbsp;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&times; 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&trade;</div>
336            <div class="bw-copy-value">12.5 MB per second</div>
337            <div class="bw-copy-live">Standard frame rate &middot; <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&trade;</div>
355            <div class="bw-copy-value">125 MB per second</div>
356            <div class="bw-copy-live">Higher frame rate &middot; <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&trade;</div>
366            <div class="bw-copy-value">12.5 MB per second</div>
367            <div class="bw-copy-live">Standard frame rate &middot; <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&trade;</div>
374            <div class="bw-copy-value">125 MB per second</div>
375            <div class="bw-copy-live">Higher frame rate &middot; <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 &amp; 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 &amp; 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.