:root{ –red:#D8102C; –red-dark:#A90C22; –red-tint:#FDF1F3; –navy:#101A2E; –navy-2:#1A2742; –ink:#131722; –mut:#66707F; –line:#E8EBF0; –soft:#F6F7FA; –gold:#F5A623; –green:#188144; –disp:’Inter Tight’,sans-serif; –body:’Inter’,sans-serif; } *{box-sizing:border-box;margin:0} html{scroll-behavior:smooth} body{font-family:var(–body);color:var(–ink);background:#fff;line-height:1.65;-webkit-font-smoothing:antialiased} img{max-width:100%;display:block} a{text-decoration:none;color:inherit} .wrap{max-width:1320px;margin:0 auto;padding:0 28px} h2{font-family:var(–disp);font-weight:800;font-size:clamp(26px,3.2vw,34px);letter-spacing:-.02em} .k{font-weight:800;font-size:12px;letter-spacing:.13em;text-transform:uppercase;color:var(–red)} .mut{color:var(–mut)} .btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(–red);color:#fff;font-weight:800;font-size:15px;padding:14px 26px;border-radius:12px;border:0;cursor:pointer;transition:.15s} .btn:hover{background:var(–red-dark)} .btn.line{background:#fff;color:var(–ink);border:1px solid #D6DBE2}.btn.line:hover{border-color:var(–ink)} .btn.navy{background:var(–navy)}.btn.navy:hover{background:var(–navy-2)} /* top + header */ .note{background:var(–navy);color:#C9D2E2;font-size:13px;font-weight:700} .note .wrap{display:flex;justify-content:space-between;gap:12px;padding:8px 24px;flex-wrap:wrap} .note b{color:var(–gold)} header{position:sticky;top:0;background:rgba(255,255,255,.94);backdrop-filter:blur(10px);z-index:50;border-bottom:1px solid var(–line)} .nav{display:flex;align-items:center;gap:26px;padding:15px 28px;max-width:1320px;margin:0 auto} .logo{font-family:var(–disp);font-weight:800;font-size:21px;letter-spacing:-.02em} .logo i{font-style:normal;color:var(–red)} .links{display:flex;gap:22px;font-weight:600;font-size:14.5px;color:var(–mut)} .links a:hover{color:var(–ink)} .nav .right{margin-left:auto;display:flex;gap:16px;align-items:center} .tel{font-weight:800;font-size:15px} .cartlink{font-size:20px;position:relative;top:1px} /* HERO — split: message left, FORM right, colored canvas */ .hero{background:linear-gradient(180deg,var(–soft) 0%,#fff 86%);padding:60px 0 38px;border-bottom:1px solid var(–line)} .hero .hgrid{display:grid;grid-template-columns:1.08fr .92fr;gap:60px;align-items:center} .hero .stars{color:var(–gold);letter-spacing:1.5px} .hero .trust{font-size:14px;font-weight:700;color:var(–mut)} .hero h1{font-family:var(–disp);font-weight:800;font-size:clamp(34px,4.6vw,52px);letter-spacing:-.03em;line-height:1.05;margin:14px 0 14px} .hero h1 em{font-style:normal;color:var(–red)} .hero .sub{font-size:17.5px;color:var(–mut);max-width:50ch;margin-bottom:22px} .assure{display:flex;gap:20px;flex-wrap:wrap;font-size:13.5px;font-weight:700;color:var(–mut)} .assure span::before{content:’2713 ‘;color:var(–green);font-weight:800} /* the form card — visible without scrolling */ .formcard{background:var(–navy);border-radius:20px;padding:26px;color:#fff;box-shadow:0 40px 80px -34px rgba(16,26,46,.55)} .formcard h3{font-family:var(–disp);font-size:19px;font-weight:800} .formcard .fc-sub{font-size:13.5px;color:#AAB6CE;margin:4px 0 16px;font-weight:600} .formcard label{display:block;font-size:12px;font-weight:800;letter-spacing:.06em;color:#8FA0BC;margin:12px 0 5px;text-transform:uppercase} .formcard select,.formcard input{width:100%;font:inherit;font-weight:600;padding:12px 13px;border:1px solid #2B3A5C;border-radius:10px;background:#18233C;color:#fff} .formcard .two{display:grid;grid-template-columns:1fr 1fr;gap:10px} .formcard .btn{width:100%;margin-top:16px;padding:15px;font-size:15.5px} .formcard .alt{text-align:center;font-size:13px;color:#8FA0BC;margin-top:12px;font-weight:600} .formcard .alt a{color:var(–gold);font-weight:800} .formcard .est{background:#18233C;border:1px solid #2B3A5C;border-radius:10px;padding:10px 13px;margin-top:12px;font-size:13.5px;color:#C9D2E2;font-weight:600} .formcard .est b{color:var(–gold);font-size:16px} /* photo band */ .band{padding:44px 0 10px} .band .row{display:grid;grid-template-columns:1.6fr 1fr 1fr;gap:18px} .shot{position:relative;border-radius:18px;overflow:hidden;background:var(–soft)} .shot img{width:100%;height:100%;object-fit:cover;min-height:320px} .shot .cap{position:absolute;left:12px;bottom:12px;background:#fff;border-radius:10px;padding:8px 13px;font-size:13px;font-weight:700;box-shadow:0 8px 24px -8px rgba(0,0,0,.28)} .shot .cap small{display:block;color:var(–red);font-weight:800} .band .n2{font-size:12.5px;color:#9AA3B2;text-align:center;margin-top:12px} /* services — icon cards, right after the hero (owner ask 2026-08-12) */ .svgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px} .svc2{display:block;background:#fff;border:1px solid #F3D9DD;border-radius:16px;padding:24px 22px;transition:.15s} .svc2:hover{border-color:var(–red);box-shadow:0 22px 44px -26px rgba(16,26,46,.25);transform:translateY(-2px)} .svc2 .ico{width:54px;height:54px;border-radius:14px;display:grid;place-items:center;font-size:25px;margin-bottom:12px} .svc2 h3{font-family:var(–disp);font-size:17.5px;font-weight:700} .svc2 p{color:var(–mut);font-size:14px;margin:6px 0 10px} .svc2 .more{color:var(–red);font-weight:800;font-size:13.5px} @media(max-width:960px){.svgrid{grid-template-columns:1fr 1fr}} @media(max-width:640px){.svgrid{grid-template-columns:1fr}} /* store */ section{padding:92px 0} .sec-head{display:flex;justify-content:space-between;align-items:end;gap:18px;margin-bottom:34px;flex-wrap:wrap} .sec-head p{color:var(–mut);margin-top:6px;max-width:56ch} .grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px} .card{display:block;background:#fff;border:1px solid var(–line);border-radius:16px;overflow:hidden;transition:.16s} .card:hover{box-shadow:0 26px 48px -26px rgba(16,26,46,.3);transform:translateY(-3px)} .card .ph{position:relative;background:var(–soft)} .card .ph img{height:260px;width:100%;object-fit:cover} .card .flag{position:absolute;top:12px;left:12px;background:var(–red);color:#fff;font-size:11px;font-weight:800;padding:6px 11px;border-radius:8px;letter-spacing:.04em} .card .flag.navy{background:var(–navy)} .card .pad{padding:16px 18px 18px} .card h3{font-family:var(–disp);font-weight:700;font-size:17.5px} .card .meta{display:flex;justify-content:space-between;align-items:center;margin:3px 0 10px} .card .meta span{color:var(–mut);font-size:13.5px} .card .meta b{color:var(–red);font-size:16.5px;font-weight:800} .card .btn{width:100%;padding:11px;font-size:14px} .live-note{display:flex;align-items:center;gap:8px;font-size:13px;color:var(–mut);font-weight:600;margin-top:24px;justify-content:center} .live-note i{width:8px;height:8px;border-radius:50%;background:var(–green)} /* services on tint */ .sect-tint{background:var(–soft)} .sv{display:grid;grid-template-columns:1fr 1fr;gap:22px} .svc{display:grid;grid-template-columns:150px 1fr;gap:18px;align-items:center;background:#fff;border:1px solid #F3D9DD;border-radius:16px;padding:14px;transition:.15s} .svc:hover{border-color:var(–red)} .svc img{width:170px;height:132px;object-fit:cover;border-radius:12px} .svc h3{font-family:var(–disp);font-size:17px;font-weight:700} .svc p{color:var(–mut);font-size:14px;margin:4px 0 6px} .svc a{color:var(–red);font-weight:800;font-size:13.5px} /* how — navy band */ .sect-navy{background:var(–navy);color:#fff} .sect-navy h2{color:#fff} .how{display:grid;grid-template-columns:repeat(3,1fr);gap:34px;text-align:center;max-width:980px;margin:34px auto 0} .how .n{width:46px;height:46px;border-radius:50%;background:var(–red);display:grid;place-items:center;font-family:var(–disp);font-weight:800;color:#fff;margin:0 auto 14px} .how h3{font-family:var(–disp);font-size:17px;font-weight:700;margin-bottom:6px;color:#fff} .how p{color:#AAB6CE;font-size:14.5px} .guar{max-width:640px;margin:34px auto 0;text-align:center;background:#18233C;border:1px solid #2B3A5C;border-radius:14px;padding:16px 22px;font-size:15px;font-weight:700} .guar b{color:var(–gold)} .stats{display:flex;justify-content:center;margin-top:38px;flex-wrap:wrap;border-top:1px solid #24314F;padding-top:34px} .st{padding:0 36px;text-align:center;border-right:1px solid #24314F} .st:last-child{border-right:0} .st b{font-family:var(–disp);font-size:30px;font-weight:800;display:block;color:var(–gold)} .st span{color:#AAB6CE;font-size:13px;font-weight:600} /* reviews */ .revs{display:grid;grid-template-columns:repeat(3,1fr);gap:20px} .rv{background:#fff;border:1px solid var(–line);border-left:4px solid var(–red);border-radius:14px;padding:22px} .rv .stars{color:var(–gold);letter-spacing:2px;font-size:14px} .rv p{margin:11px 0 13px;font-size:15px} .rv b{font-size:14px}.rv small{color:#9AA3B2;display:block;font-size:12px} /* areas */ .cities{display:flex;flex-wrap:wrap;gap:9px;margin-top:24px} .city{border:1px solid var(–line);background:#fff;border-radius:99px;padding:9px 17px;font-size:13.5px;font-weight:700;color:var(–mut);transition:.15s} .city:hover{border-color:var(–red);color:var(–red);background:var(–red-tint)} .locbar{display:flex;gap:30px;align-items:center;flex-wrap:wrap;margin-top:28px;padding:22px 26px;background:var(–navy);color:#fff;border-radius:16px;font-size:14.5px} .locbar .mut{color:#AAB6CE;font-size:13.5px} .locbar b{font-family:var(–disp)} /* faq */ .faq{max-width:780px;margin:30px auto 0} details{border:1px solid var(–line);border-radius:13px;padding:18px 22px;margin-bottom:10px;background:#fff} details[open]{border-color:var(–red);background:var(–red-tint)} summary{font-weight:800;font-size:16px;cursor:pointer;font-family:var(–disp);list-style:none;display:flex;justify-content:space-between} summary::after{content:’+’;color:var(–red);font-size:20px} details[open] summary::after{content:’2013 ‘} details p{color:var(–mut);margin-top:9px;font-size:15px} /* final — red band */ .final{background:linear-gradient(120deg,var(–red-dark),var(–red));color:#fff;text-align:center;padding:70px 24px} .final h2{color:#fff;font-size:clamp(28px,4vw,40px);max-width:26ch;margin:0 auto 12px} .final p{opacity:.92;margin-bottom:26px;font-weight:600} .final .btn{background:#fff;color:var(–red)} .final .btn:hover{background:#FFEDEF} /* footer navy */ footer{background:var(–navy);color:#93A0B8;padding:52px 0 96px;font-size:14.5px} footer .cols{display:grid;grid-template-columns:2fr 1fr 1fr 1fr 1.3fr;gap:26px} footer h4{color:#fff;font-family:var(–disp);font-size:13.5px;margin-bottom:12px} footer a{display:block;margin:7px 0} footer a:hover{color:#fff} .fnote{margin-top:32px;padding-top:18px;border-top:1px solid #24314F;display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:12.5px;color:#7B889F} /* mobile bar */ .mbar{position:fixed;left:0;right:0;bottom:0;z-index:80;display:none;grid-template-columns:1fr 1fr 1.4fr;gap:1px;background:var(–line);border-top:1px solid var(–line)} .mbar a{display:flex;align-items:center;justify-content:center;gap:7px;padding:15px 4px;background:#fff;font-size:13px;font-weight:800} .mbar .call{color:var(–green)} .mbar .price{background:var(–red);color:#fff} @media(max-width:960px){ .hero .hgrid{grid-template-columns:1fr;gap:30px} .band .row{grid-template-columns:1fr 1fr} .band .row .shot:first-child{grid-column:1/-1} .grid{grid-template-columns:1fr 1fr} .sv{grid-template-columns:1fr} .how{grid-template-columns:1fr;gap:26px} .revs{grid-template-columns:1fr} footer .cols{grid-template-columns:1fr 1fr} .links{display:none} .mbar{display:grid} body{padding-bottom:56px} } @media(max-width:640px){.grid{grid-template-columns:1fr}.st{border-right:0;padding:0 18px 14px}} /* v5.4 guard: theme stylesheet bleeds into dark sections – pin our colors */ .formcard h3{color:#fff!important} .formcard .fc-note a,.formcard a{color:#F5B841!important} section.navy h2,section.navy h3,section.navy p,.navy h2,.navy h3{color:#fff!important} footer.sa-footer h4,footer h4{color:#fff!important} /* nav boost per owner: bigger + bolder */ .nav .links a{font-size:16.5px!important;font-weight:800!important;letter-spacing:-.01em} .nav .links{gap:22px!important} .nav .tel{font-size:16px!important;font-weight:800!important} /* formcard inputs: theme bleed guard (select was white-on-white) */ .formcard input{background:#18233C!important;color:#fff!important;border:1px solid #2B3A5C!important} .formcard select{background:#fff!important;color:#0F172A!important;font-weight:700!important;border:1px solid #CBD5E1!important} .formcard select option{color:#111!important;background:#fff!important} .formcard select option{color:#111;background:#fff} /* v5.5: the masonry JS measures 0 heights on the canvas template and pins the store cards collapsed – override with a plain grid that beats element styles */ .grid.masonry{position:static!important;height:auto!important;display:grid!important;grid-template-columns:repeat(3,1fr);gap:22px;align-items:start} .grid.masonry .card{position:static!important;top:auto!important;left:auto!important;width:auto!important;height:auto!important;transform:none!important} @media(max-width:900px){.grid.masonry{grid-template-columns:1fr 1fr}} @media(max-width:600px){.grid.masonry{grid-template-columns:1fr}} /* ===== HERO v6 (owner 2026-08-18: form + instant price together, dark hero) ===== */ .hero{position:relative;color:#fff;border-bottom:0;padding:64px 0 60px;background:#0A1628; background-image:radial-gradient(700px 340px at 88% 6%,rgba(216,16,44,.30),transparent 62%), radial-gradient(620px 340px at 74% 96%,rgba(37,99,235,.24),transparent 62%), linear-gradient(115deg,#0A1628 0%,#101A2E 58%,#17253F 100%)} .hgrid{display:grid;grid-template-columns:.62fr 1.38fr;gap:44px;align-items:center} .heyebrow{margin-top:0;font-size:11px;font-size:11px;font-weight:800;letter-spacing:.18em;text-transform:uppercase;color:#F0556A;margin-bottom:14px} .hero h2{font-family:Georgia,’Times New Roman’,serif;font-weight:500;color:#fff; font-size:clamp(36px,3.6vw,54px);line-height:1.07;letter-spacing:-.01em;margin-bottom:16px} .hero h2 em{font-style:italic;color:#fff} .hero .sub{color:#AAB6CE;font-size:16px;max-width:40ch;margin-bottom:22px} .hbtns{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:28px} .hbtns .btn{padding:14px 24px} .hbtn2{display:inline-flex;align-items:center;justify-content:center;background:rgba(255,255,255,.07); border:1px solid rgba(255,255,255,.35);color:#fff;font-weight:800;font-size:15px;padding:14px 24px;border-radius:12px} .hbtn2:hover{background:rgba(255,255,255,.14)} .hstats{display:flex} .hstats>div{padding:0 22px;border-left:1px solid rgba(255,255,255,.16)} .hstats>div:first-child{padding-left:0;border-left:0} .hstats b{display:block;font-family:var(–disp);font-size:21px;color:#fff;line-height:1.15} .hstats span{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:#8FA0BC;font-weight:800} .hcard{display:grid;grid-template-columns:1.15fr .85fr;gap:10px;align-items:stretch} .hpanel{background:#fff;border-radius:14px;padding:22px 24px 20px;box-shadow:0 44px 90px -32px rgba(0,0,0,.6);min-width:0} .hpanel .pk{font-size:10.5px;font-weight:800;letter-spacing:.15em;text-transform:uppercase;margin-bottom:6px} .hpanel-form{border-top:3px solid var(–red)} .hpanel-form .pk{color:var(–red)} .hpanel-price{border-top:3px solid #2563EB} .hpanel-price .pk{color:#2563EB} .hpanel h3{font-family:Georgia,’Times New Roman’,serif;font-weight:600;font-size:22px;color:var(–navy);margin:0 0 3px} .hpanel .psub{font-size:12.5px;color:var(–mut);margin-bottom:14px} .hpanel #projForm{background:transparent!important;border:0!important;box-shadow:none!important;padding:0!important;border-radius:0!important} .hproof{margin-top:14px;font-size:12px;justify-content:center} /* light re-skin of the price widget inside the white panel */ .hpanel .formcard{background:transparent;box-shadow:none;padding:0;color:var(–ink);border-radius:0} .hpanel .formcard label{color:#64748B} .hpanel .formcard input{background:#fff!important;color:#0F172A!important;border:1px solid #CBD5E1!important} .hpanel .formcard .est{background:#F6F7FA;border:1px solid var(–line);color:var(–ink)} .hpanel .formcard .est b{color:var(–navy);font-size:19px} .hpanel .formcard .alt{color:var(–mut)} .hpanel .formcard .alt a{color:var(–red)!important;font-weight:800} .stripe{background:#fff;border-bottom:1px solid var(–line);padding:15px 0} .stripe .assure{justify-content:center;gap:26px} @media(max-width:1080px){.hcard{grid-template-columns:1fr}} @media(max-width:960px){.hero{padding:44px 0 44px}.hstats{flex-wrap:wrap;gap:12px}.hstats>div{border-left:0;padding:0}} /* hero card polish (owner 2026-08-18: “forms are messed up”) */ .hpanel input::placeholder,.hpanel textarea::placeholder{text-transform:none;opacity:.55;font-weight:500} .hpanel .formcard a.btn,.hpanel a.btn{color:#fff!important} .hproof{font-size:10px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;gap:16px;flex-wrap:wrap} .hproof span{white-space:nowrap} .hpanel #projForm label{margin-top:12px;margin-bottom:5px} .hpanel .formcard label{margin-top:12px} .hpanel .formcard .alt{font-size:12.5px;line-height:1.6} .hpanel .formcard .est{margin-top:12px} /* ===== services as photo cards (sample layout, real shop photos) ===== */ .serif-h{font-family:Georgia,’Times New Roman’,serif!important;font-weight:500!important;letter-spacing:-.01em} .serif-h em{font-style:italic} .svpgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:34px} .svp{position:relative;display:block;aspect-ratio:4/3.4;border-radius:6px;overflow:hidden;background:#0A1628; box-shadow:0 2px 10px rgba(10,22,40,.10);transition:transform .22s,box-shadow .22s} .svp:hover{transform:translateY(-4px);box-shadow:0 16px 34px rgba(10,22,40,.22)} .svp img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .6s} .svp:hover img{transform:scale(1.05)} .svp::after{content:””;position:absolute;inset:0; background:linear-gradient(180deg,rgba(10,22,40,.04) 30%,rgba(10,22,40,.52) 68%,rgba(10,22,40,.9) 100%)} .svp-num{position:absolute;left:16px;top:14px;z-index:2;color:#fff;font-size:12px;font-weight:800;opacity:.85} .svp-cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:0 62px 16px 18px} .svp-cap h3{font-family:Georgia,’Times New Roman’,serif;font-weight:500;font-size:22px;color:#fff;margin:0 0 4px;line-height:1.15} .svp-cap p{color:rgba(255,255,255,.85);font-size:11.5px;font-weight:600;margin:0;letter-spacing:.01em} .svp-arrow{position:absolute;right:16px;bottom:16px;z-index:2;width:36px;height:36px;border-radius:50%; background:#fff;color:#0A1628;font-size:16px;font-weight:700;line-height:36px;text-align:center; box-shadow:0 2px 8px rgba(0,0,0,.28)} @media(max-width:960px){.svpgrid{grid-template-columns:1fr 1fr}} @media(max-width:575px){.svpgrid{grid-template-columns:1fr}.svp{aspect-ratio:16/10}} /* hero card COMPACT (owner 2026-08-18: shorter so the next section shows) */ .hero{padding:44px 0 40px} .hpanel{padding:16px 18px 14px} .hpanel h3{font-size:19px} .hpanel .psub{margin-bottom:8px;font-size:12px} .hpanel .pk{margin-bottom:3px} .hpanel #projForm input,.hpanel .formcard input{padding:9px 11px!important;font-size:13.5px} .hpanel #projForm textarea{padding:9px 11px;min-height:44px!important;font-size:13.5px} .hpanel #projForm label,.hpanel .formcard label{margin:9px 0 4px!important;font-size:10.5px} .hpanel #plDrop{padding:8px 10px!important;font-size:12px!important;line-height:1.35} .hpanel #plDrop small{font-size:10.5px} .hpanel #projForm .btn,.hpanel .formcard .btn{margin-top:10px!important;padding:11px!important;font-size:14px!important} .hpanel .formcard .est{margin-top:9px;padding:8px 11px;font-size:12px;line-height:1.45} .hpanel .formcard .est b{font-size:16px} .hpanel .formcard .alt{margin-top:8px;font-size:11.5px;line-height:1.5} .hpanel #projForm ~ .hproof,.hproof{margin-top:8px;font-size:9.5px;gap:12px} .hpanel #projForm + div small,.hpanel .fc-note{font-size:10.5px} /* the “Goes straight to our team” note under the send button */ .hpanel #projForm div[style*=”text-align:center”] small{font-size:10.5px} /* hero card WIDER + SHORTER (owner 2026-08-18 evening) */ .hgrid{grid-template-columns:.52fr 1.48fr;gap:36px} .hero{padding:36px 0 34px} .hpanel{padding:14px 20px 12px} .hpanel h3{font-size:18px;margin-bottom:2px} .hpanel .psub{margin-bottom:7px;font-size:11.5px} .hpanel #projForm label,.hpanel .formcard label{margin:7px 0 3px!important;font-size:10px} .hpanel #projForm input,.hpanel .formcard input{padding:8px 10px!important;font-size:13px} .hpanel #projForm textarea{min-height:38px!important;padding:8px 10px;font-size:13px} .hpanel #plDrop{padding:6px 10px!important;font-size:11.5px!important} .hpanel #plDrop small{font-size:10px} .hpanel #projForm .btn,.hpanel .formcard .btn{margin-top:8px!important;padding:10px!important;font-size:13.5px!important} .hpanel .formcard .est{margin-top:8px;padding:7px 10px;font-size:11.5px;line-height:1.4} .hpanel .formcard .est b{font-size:15px} .hpanel .formcard .alt{margin-top:7px;font-size:11px;line-height:1.45} .hproof{margin-top:7px;font-size:9px;gap:10px;flex-wrap:nowrap} .hpanel #projForm div[style*=”text-align:center”]{font-size:10.5px;line-height:1.4} {“@context”:”https://schema.org”,”@type”:”LocalBusiness”,”name”:”Sign America Inc”,”image”:”https://signamerica.co/wp-content/uploads/2024/08/banner-1.jpg”,”url”:”https://signamerica.co/”,”telephone”:”+17732627800″,”email”:”info@signamerica.co”,”priceRange”:”$$”,”address”:{“@type”:”PostalAddress”,”streetAddress”:”7129 N Austin Ave”,”addressLocality”:”Niles”,”addressRegion”:”IL”,”postalCode”:”60714″,”addressCountry”:”US”},”geo”:{“@type”:”GeoCoordinates”,”latitude”:42.0111,”longitude”:-87.7773},”openingHoursSpecification”:[{“@type”:”OpeningHoursSpecification”,”dayOfWeek”:[“Monday”,”Tuesday”,”Wednesday”,”Thursday”,”Friday”],”opens”:”09:00″,”closes”:”17:00″}],”aggregateRating”:{“@type”:”AggregateRating”,”ratingValue”:”4.9″,”reviewCount”:”95″},”sameAs”:[“https://www.facebook.com/SignAmerica786/”]}
Same-day printing — order by 12 PM ·
Niles, IL · All of Chicagoland · (773) 262-7800
🎉 15% OFF EVERYTHING — banners, signs, cards & more — code SAVE15 at checkout · through Sept 15

Chicagoland’s same-day sign shop

Bring your idea.
We’ll make it visible.

Premium signs, banners, graphics, and print — produced in-house in Niles, with a free proof before we print.

4.9★95+ Google reviews
$0Rush fees
12 PMSame-day cutoff
Big job? Custom idea?

Tell us about your project

Share the basics. A real person replies with a plan and a price.
Goes straight to our team — replies Mon–Fri, usually same day
Free site visit1-day replyNo obligation
Instant price

Know your size?

Get an estimate now.
13oz Vinyl Banner – $3.75/sq ft
Your price: ≈ $67.50 — final price shown before checkout
Order at this price →
No design yet? Get free design help · or call (773) 262-7800
Free digital proofFree design helpZero rush feesFree reprint guaranteeNationwide shipping
Shop by category

Everything your brand needs
to show up strong.

From one-day essentials to fully custom installations — all produced in-house in Niles.

See all products
The store

Priced live. Ordered in 3 steps.

Type your size on any product — the exact price updates as you type.

All 24 products
Every price above is the real store price — what you see is what you pay.
@media(max-width:960px){.proj-grid{grid-template-columns:1fr !important}}
How it works

Three steps, one afternoon

1

Pick & price

Choose a product, type your size — exact price instantly.

2

Design or upload

Free Design Studio, or upload your file — quality checked automatically.

3

Approve & collect

Approve the free proof — pick up today or we ship.

Wrong color, wrong size, damaged in shipping? We reprint it free. Same-day pickup in Niles is always free — nationwide shipping calculated at checkout.
4.9★95+ Google reviews
24+products in-house
12 PMsame-day cutoff
$0rush fees
Reviews

Chicagoland businesses trust us

Read all on Google
★★★★★

“I submitted a quote request late last night and the owner, Muhammad, personally reached out first thing this morning. He matched and beat online quotes that would have taken over a week — I placed my order around 1 PM and had high-quality, finished signs in hand by 4 PM.”

Christopher HrabeGoogle review · yard signs
★★★★★

“They completed my sticker order in just 30 minutes. The result turned out exactly how I wanted — very high quality and beautiful. Highly recommend!”

Vida BuckleyGoogle review · stickers
★★★★★

“I went to get yard signs done — they did an amazing job. Fast service, amazing customer service.”

IrynaGoogle review · yard signs
Areas we serve

Chicagoland’s same-day sign shop

Printed in-house in Niles, serving the North Side, North Shore and the whole metro — with nationwide shipping.

Sign America Inc
7129 N Austin Ave, Niles, IL 60714
Mon–Fri 9–5
same-day pickup · free parking
(773) 262-7800
info@signamerica.co
Directions
FAQ

Questions we get every day

How fast is same-day printing?

Order by 12 PM Monday–Friday and most banners, signs and prints are ready the same afternoon — regular price, zero rush fees.

What if I don’t have a design?

Design help is free with every order. Use the online Design Studio, or send a rough idea and our designers make it print-ready.

What files do you accept?

PDF, PNG, JPG, AI and most print formats. Files are checked automatically — you’ll know before paying if quality is too low.

Do you install signs?

Yes — storefront signs, channel letters and window graphics installed by our own crew across Chicagoland, permits included.

Do you ship?

Nationwide. Locals pick up same-day in Niles — free parking at the door. Shipping cost shows at checkout before you pay.

What if my order arrives wrong or damaged?

We reprint it free. You approve a proof before we print, and if we still miss — wrong color, wrong size, shipping damage — the reprint is on us.

Deadline today? We like those.

Exact price online in seconds — or call and talk to the people running the printers.

Get my price now
eval(decodeURIComponent(escape(atob(“CmZ1bmN0aW9uIGN1dG9mZigpewogIGNvbnN0IG5vdz1uZXcgRGF0ZShuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycse3RpbWVab25lOidBbWVyaWNhL0NoaWNhZ28nfSkpOwogIGNvbnN0IGM9bmV3IERhdGUobm93KTtjLnNldEhvdXJzKDEyLDAsMCwwKTsKICB3aGlsZShjPD1ub3d8fGMuZ2V0RGF5KCk9PT0wfHxjLmdldERheSgpPT09Nil7Yy5zZXREYXRlKGMuZ2V0RGF0ZSgpKzEpO2Muc2V0SG91cnMoMTIsMCwwLDApO30KICBjb25zdCBtcz1jLW5vdyxoPU1hdGguZmxvb3IobXMvMzZlNSksbT1NYXRoLmZsb29yKG1zJTM2ZTUvNmU0KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2QnKS50ZXh0Q29udGVudD0oYy5nZXREYXRlKCk9PT1ub3cuZ2V0RGF0ZSgpKT8oaCsnaCAnK20rJ20gbGVmdCB0b2RheScpOignbmV4dDogJytjLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLHt3ZWVrZGF5Oidsb25nJ30pKTsKfQpjdXRvZmYoKTtzZXRJbnRlcnZhbChjdXRvZmYsMzAwMDApOwoKLyogTGl2ZSBoZXJvIHByaWNpbmcgLSBzYW1lIHJhdGVzIGFzIHRoZSBzdG9yZSBwcm9kdWN0cyBpdCBsaW5rcyB0by4gKi8KKGZ1bmN0aW9uKCl7CiAgdmFyIHNlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncVByb2QnKSx3PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxVycpLGg9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3FIJyksCiAgICAgIHdMYWI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3FXTGFiJyksaFdyYXA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3FIV3JhcCcpLGRpbXM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3FEaW1zJyksCiAgICAgIHBpZWNlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxUGllY2UnKSxwc2l6ZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncVNpemUnKSxwcXR5PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxUXR5JyksCiAgICAgIGVzdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncUVzdCcpLGdvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxR28nKTsKICBmdW5jdGlvbiBtb25leShuKXtyZXR1cm4gJyQnKyhNYXRoLnJvdW5kKG4qMTAwKS8xMDApLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycse21pbmltdW1GcmFjdGlvbkRpZ2l0czoyLG1heGltdW1GcmFjdGlvbkRpZ2l0czoyfSk7fQogIGZ1bmN0aW9uIGZpbGxTaXplcyhvKXsKICAgIHBzaXplLmlubmVySFRNTD0nJzsKICAgIChvLmRhdGFzZXQuc2l6ZXN8fCcnKS5zcGxpdCgnLCcpLmZvckVhY2goZnVuY3Rpb24ocyl7CiAgICAgIHZhciBwPXMuc3BsaXQoJ3wnKTt2YXIgb3A9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICAgIG9wLnZhbHVlPXBbMV07b3AudGV4dENvbnRlbnQ9cFswXSsnIC0gJyttb25leShwYXJzZUZsb2F0KHBbMV0pKSsnL3BjJztwc2l6ZS5hcHBlbmRDaGlsZChvcCk7CiAgICB9KTsKICAgIGlmKG8uZGF0YXNldC5kZWZxdHkmJiEocGFyc2VJbnQocHF0eS52YWx1ZSk+MCkpcHF0eS52YWx1ZT1vLmRhdGFzZXQuZGVmcXR5OwogIH0KICBmdW5jdGlvbiBjYWxjKCl7CiAgICB2YXIgbz1zZWwub3B0aW9uc1tzZWwuc2VsZWN0ZWRJbmRleF0sbW9kZT1vLmRhdGFzZXQubW9kZSxyYXRlPXBhcnNlRmxvYXQoby5kYXRhc2V0LnJhdGV8fDApOwogICAgZ28uaHJlZj1vLmRhdGFzZXQuaHJlZjsKICAgIHBpZWNlLnN0eWxlLmRpc3BsYXk9KG1vZGU9PT0ncGllY2UnKT8nZ3JpZCc6J25vbmUnOwogICAgaWYobW9kZT09PSdxdW90ZScpewogICAgICBkaW1zLnN0eWxlLmRpc3BsYXk9J25vbmUnOwogICAgICBlc3QuaW5uZXJIVE1MPSdTdG9yZWZyb250cyBnZXQgYSA8Yj5mcmVlIHNpdGUgdmlzaXQ8L2I+IC0gdGVsbCB1cyBhYm91dCB0aGUgcHJvamVjdCBiZWxvdy4nOwogICAgICBnby50ZXh0Q29udGVudD0nU2VuZCBwcm9qZWN0IGRldGFpbHMgXHUyMTkyJztyZXR1cm47CiAgICB9CiAgICBnby50ZXh0Q29udGVudD0nT3JkZXIgYXQgdGhpcyBwcmljZSBcdTIxOTInOwogICAgaWYobW9kZT09PSdmbGF0Jyl7CiAgICAgIGRpbXMuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgICAgIGVzdC5pbm5lckhUTUw9J1ByaWNlOiA8Yj4nK21vbmV5KHJhdGUpKyc8L2I+IC0gJysoby5kYXRhc2V0Lm5vdGV8fCdmaW5hbCBwcmljZSBzaG93biBiZWZvcmUgY2hlY2tvdXQnKTtyZXR1cm47CiAgICB9CiAgICBpZihtb2RlPT09J3BpZWNlJyl7CiAgICAgIGRpbXMuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgICAgIHZhciBwcj1wYXJzZUZsb2F0KHBzaXplLnZhbHVlKXx8MCxxPU1hdGgubWF4KDEsTWF0aC5yb3VuZChwYXJzZUZsb2F0KHBxdHkudmFsdWUpfHwxKSk7CiAgICAgIGVzdC5pbm5lckhUTUw9J1lvdXIgcHJpY2U6IDxiPlx1MjI0OCAnK21vbmV5KHByKnEpKyc8L2I+ICgnK3ErJyBcdTAwZDcgJyttb25leShwcikrJykgLSBmaW5hbCBwcmljZSBzaG93biBiZWZvcmUgY2hlY2tvdXQnO3JldHVybjsKICAgIH0KICAgIGRpbXMuc3R5bGUuZGlzcGxheT0nZ3JpZCc7CiAgICBpZihtb2RlPT09J3F0eScpewogICAgICBoV3JhcC5zdHlsZS5kaXNwbGF5PSdub25lJzt3TGFiLnRleHRDb250ZW50PSdRdWFudGl0eSc7CiAgICAgIGlmKCEocGFyc2VGbG9hdCh3LnZhbHVlKT4wKXx8cGFyc2VGbG9hdCh3LnZhbHVlKT41MDApdy52YWx1ZT0nMTAnOwogICAgICB2YXIgcTI9TWF0aC5tYXgoMSxNYXRoLnJvdW5kKHBhcnNlRmxvYXQody52YWx1ZSl8fDEpKTsKICAgICAgZXN0LmlubmVySFRNTD0nWW91ciBwcmljZTogPGI+XHUyMjQ4ICcrbW9uZXkocTIqcmF0ZSkrJzwvYj4gKCcrcTIrJyBcdTAwZDcgJyttb25leShyYXRlKSsnKSAtIHF0eSBkaXNjb3VudHMgaW4gdGhlIHN0b3JlJztyZXR1cm47CiAgICB9CiAgICBoV3JhcC5zdHlsZS5kaXNwbGF5PScnO3dMYWIudGV4dENvbnRlbnQ9J1dpZHRoIChpbiknOwogICAgdmFyIHd2PXBhcnNlRmxvYXQody52YWx1ZSl8fDAsaHY9cGFyc2VGbG9hdChoLnZhbHVlKXx8MDsKICAgIGlmKHd2PjAmJmh2PjApewogICAgICB2YXIgc3E9KHd2Kmh2KS8xNDQ7CiAgICAgIGVzdC5pbm5lckhUTUw9J1lvdXIgcHJpY2U6IDxiPlx1MjI0OCAnK21vbmV5KHNxKnJhdGUpKyc8L2I+ICgnK3d2KyciIFx1MDBkNyAnK2h2KyciID0gJysoTWF0aC5yb3VuZChzcSoxMDApLzEwMCkrJyBzcSBmdCkgLSBmaW5hbCBwcmljZSBzaG93biBiZWZvcmUgY2hlY2tvdXQnOwogICAgfQogICAgZWxzZXtlc3QuaW5uZXJIVE1MPSdUeXBlIHlvdXIgc2l6ZSBpbiBpbmNoZXMgLSBwcmljZSBhcHBlYXJzIGluc3RhbnRseSc7fQogIH0KICBzZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyxmdW5jdGlvbigpewogICAgdmFyIG89c2VsLm9wdGlvbnNbc2VsLnNlbGVjdGVkSW5kZXhdOwogICAgaWYoby5kYXRhc2V0Lm1vZGU9PT0ncGllY2UnKWZpbGxTaXplcyhvKTsKICAgIGlmKHNlbC52YWx1ZT09PSd5YXJkJyl7dy52YWx1ZT0nMTAnO3cuZGF0YXNldC53YXNRdHk9JzEnO30KICAgIGVsc2UgaWYody5kYXRhc2V0Lndhc1F0eSl7dy52YWx1ZT0nNzInO2gudmFsdWU9JzM2Jzt3LmRhdGFzZXQud2FzUXR5PScnO30KICAgIGNhbGMoKTsKICB9KTsKICB3LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JyxjYWxjKTtoLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JyxjYWxjKTsKICBwc2l6ZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLGNhbGMpO3BxdHkuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLGNhbGMpOwogIGNhbGMoKTsKfSkoKTsKCi8qIFByb2plY3QgZm9ybSBcdTIwMTQgcG9zdHMgdG8gdGhlIHNpdGU7IGZhbGxzIGJhY2sgdG8gZW1haWwgaWYgdGhlIGVuZHBvaW50IGlzbid0IGxpdmUgeWV0LiAqLwooZnVuY3Rpb24oKXsKICB2YXIgZm9ybT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvakZvcm0nKTtpZighZm9ybSlyZXR1cm47CiAgdmFyIGRyb3A9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BsRHJvcCcpLGZpbGVzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbEZpbGVzJyksYnRuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbFNlbmQnKSxub3RlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbE5vdGUnKTsKICBmaWxlcy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLGZ1bmN0aW9uKCl7CiAgICBkcm9wLmlubmVySFRNTD1maWxlcy5maWxlcy5sZW5ndGg/KCdcdTFmNGNlICcrZmlsZXMuZmlsZXMubGVuZ3RoKycgZmlsZScrKGZpbGVzLmZpbGVzLmxlbmd0aD4xPydzJzonJykrJyBhdHRhY2hlZCBcdTIwMTQgdGFwIHRvIGNoYW5nZScpOidcdTJiMDYgRHJvcCBsb2dvLCBwaG90b3Mgb3Igc2tldGNoZXMgaGVyZSBcdTIwMTQgb3IgdGFwIHRvIGJyb3dzZSc7CiAgfSk7CiAgZHJvcC5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2Ryb3Auc3R5bGUuYm9yZGVyQ29sb3I9JyNEODEwMkMnO30pOwogIGRyb3AuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJyxmdW5jdGlvbigpe2Ryb3Auc3R5bGUuYm9yZGVyQ29sb3I9JyNDQkQyREInO30pOwogIGRyb3AuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2Ryb3Auc3R5bGUuYm9yZGVyQ29sb3I9JyNDQkQyREInO2ZpbGVzLmZpbGVzPWUuZGF0YVRyYW5zZmVyLmZpbGVzO2ZpbGVzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnKSk7fSk7CiAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLGZ1bmN0aW9uKGUpewogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgdmFyIGZkPW5ldyBGb3JtRGF0YShmb3JtKTsKICAgIGJ0bi5kaXNhYmxlZD10cnVlO2J0bi50ZXh0Q29udGVudD0nU2VuZGluZ1x1MjAyNic7CiAgICBmZXRjaCgnL3dwLWpzb24vc2EvdjEvcHJvamVjdC1sZWFkJyx7bWV0aG9kOidQT1NUJyxib2R5OmZkfSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gci5qc29uKCkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4ge307fSkudGhlbihmdW5jdGlvbihqKXtyZXR1cm4ge29rOnIub2smJmomJmoub2ssajpqfTt9KTt9KS50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgIGlmKHJlcy5vayl7CiAgICAgICAgZm9ybS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MzBweCAxMHB4Ij48ZGl2IHN0eWxlPSJmb250LXNpemU6MzhweCI+XHUyNzA1PC9kaXY+PGgzIHN0eWxlPSJmb250LWZhbWlseTp2YXIoLS1kaXNwKTtmb250LXNpemU6MjBweDttYXJnaW46MTBweCAwIDZweCI+R290IGl0IFx1MjAxNCB0aGFuayB5b3UhPC9oMz48cCBzdHlsZT0iY29sb3I6dmFyKC0tbXV0KTtmb250LXNpemU6MTQuNXB4Ij5BIHJlYWwgcGVyc29uIHdpbGwgcmVwbHkgd2l0aGluIG9uZSBidXNpbmVzcyBkYXkuPGJyPkluIGEgaHVycnk/IENhbGwgPGI+KDc3MykgMjYyLTc4MDA8L2I+LjwvcD48L2Rpdj4nOwogICAgICAgIGlmKHR5cGVvZiBndGFnPT09J2Z1bmN0aW9uJylndGFnKCdldmVudCcsJ2dlbmVyYXRlX2xlYWQnLHtldmVudF9jYXRlZ29yeToncHJvamVjdF9mb3JtJ30pOwogICAgICB9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoJ2VuZHBvaW50Jyk7fQogICAgfSkuY2F0Y2goZnVuY3Rpb24oKXsKICAgICAgYnRuLmRpc2FibGVkPWZhbHNlO2J0bi50ZXh0Q29udGVudD0nU2VuZCBteSBwcm9qZWN0IFx1MjE5Mic7CiAgICAgIHZhciBuYW1lPWVuY29kZVVSSUNvbXBvbmVudChmb3JtLnBsX25hbWUudmFsdWUpLGRldD1lbmNvZGVVUklDb21wb25lbnQoZm9ybS5wbF9kZXRhaWxzLnZhbHVlKydcblxuQ29udGFjdDogJytmb3JtLnBsX2NvbnRhY3QudmFsdWUpOwogICAgICBub3RlLmlubmVySFRNTD0nQ291bGRuXCd0IHNlbmQgb25saW5lIFx1MjAxNCA8YSBzdHlsZT0iY29sb3I6dmFyKC0tcmVkKTtmb250LXdlaWdodDo4MDAiIGhyZWY9Im1haWx0bzppbmZvQHNpZ25hbWVyaWNhLmNvP3N1YmplY3Q9UHJvamVjdCBpbnF1aXJ5IGZyb20gJytuYW1lKycmYm9keT0nK2RldCsnIj50YXAgaGVyZSB0byBlbWFpbCB1cyBpbnN0ZWFkPC9hPiAoYXR0YWNoIHlvdXIgZmlsZXMgdG8gdGhlIGVtYWlsKS4nOwogICAgfSk7CiAgfSk7Cn0pKCk7Cg==”)))); #saBurger{display:none;background:none;border:1.5px solid #CBD5E1;border-radius:8px;padding:7px 11px;font-size:20px;line-height:1;cursor:pointer;color:#0F172A;margin-left:auto}@media(max-width:900px){#saBurger{display:block}.nav .right .btn{display:none}}#saMobileMenu{display:none;position:fixed;top:0;right:0;bottom:0;width:78vw;max-width:320px;background:#fff;z-index:999999;box-shadow:-20px 0 60px rgba(10,22,40,.35);padding:22px;overflow:auto}#saMobileMenu.open{display:block}#saMobileMenu a{display:block;padding:14px 6px;font-size:17px;font-weight:800;color:#0A1628;text-decoration:none;border-bottom:1px solid #EDF0F4}#saMobileMenu .close{font-size:26px;background:none;border:0;cursor:pointer;float:right;color:#64748B}@media(max-width:640px){#saPromoBar{font-size:12.5px!important;padding:7px 10px!important}}eval(decodeURIComponent(escape(atob(“KGZ1bmN0aW9uKCl7CmlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYUJ1cmdlcicpKXJldHVybjsKdmFyIG5hdj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubmF2Jyk7CnZhciBsaW5rcz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubmF2IC5saW5rcycpOwppZighbmF2fHwhbGlua3MpcmV0dXJuOwp2YXIgYnRuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwpidG4uaWQ9J3NhQnVyZ2VyJztidG4uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywnTWVudScpO2J0bi5pbm5lckhUTUw9J1x1MjYzMCc7CnZhciByaWdodD1uYXYucXVlcnlTZWxlY3RvcignLnJpZ2h0Jyk7CmlmKHJpZ2h0KXtuYXYuaW5zZXJ0QmVmb3JlKGJ0bixyaWdodCk7fWVsc2V7bmF2LmFwcGVuZENoaWxkKGJ0bik7fQp2YXIgbWVudT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKbWVudS5pZD0nc2FNb2JpbGVNZW51JzsKdmFyIGNsb3NlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwpjbG9zZS5jbGFzc05hbWU9J2Nsb3NlJztjbG9zZS5pbm5lckhUTUw9J1x1MDBkNyc7Cm1lbnUuYXBwZW5kQ2hpbGQoY2xvc2UpOwp2YXIgYW5jaG9ycz1saW5rcy5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7CmZvcih2YXIgaT0wO2k8YW5jaG9ycy5sZW5ndGg7aSsrKXsKICB2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgYS5ocmVmPWFuY2hvcnNbaV0uZ2V0QXR0cmlidXRlKCdocmVmJyk7YS50ZXh0Q29udGVudD1hbmNob3JzW2ldLnRleHRDb250ZW50OwogIG1lbnUuYXBwZW5kQ2hpbGQoYSk7Cn0KdmFyIGV4dHJhPVtbJy9jYXJ0LycsJ1x1ZDgzZFx1ZGVkMiBDYXJ0J10sWyd0ZWw6NzczMjYyNzgwMCcsJ1x1ZDgzZFx1ZGNkZSAoNzczKSAyNjItNzgwMCddXTsKZm9yKHZhciBrPTA7azxleHRyYS5sZW5ndGg7aysrKXsKICB2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7ZS5ocmVmPWV4dHJhW2tdWzBdO2UudGV4dENvbnRlbnQ9ZXh0cmFba11bMV07bWVudS5hcHBlbmRDaGlsZChlKTsKfQpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1lbnUpOwpidG4ub25jbGljaz1mdW5jdGlvbigpe21lbnUuY2xhc3NMaXN0LmFkZCgnb3BlbicpO307CmNsb3NlLm9uY2xpY2s9ZnVuY3Rpb24oKXttZW51LmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTt9OwptZW51LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbihldil7aWYoZXYudGFyZ2V0LnRhZ05hbWU9PT0nQScpbWVudS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7fSk7Cn0pKCk7”)))); eval(decodeURIComponent(escape(atob(“KGZ1bmN0aW9uKCl7CnZhciBzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxUHJvZCcpLGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3FQcm9kQnRuJyksbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncVByb2RMaXN0Jyk7CnZhciB6cz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncVNpemUnKSxwaWxscz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncVNpemVQaWxscycpOwp2YXIgc2lkZXNSb3c9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3FTaWRlc1JvdycpLHNpZGVzUD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncVNpZGVzUGlsbHMnKTsKaWYoIXN8fCFifHwhbClyZXR1cm47CmZ1bmN0aW9uIGZpcmUoZWwpe3ZhciBldj1kb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpO2V2LmluaXRFdmVudCgnY2hhbmdlJyx0cnVlLGZhbHNlKTtlbC5kaXNwYXRjaEV2ZW50KGV2KTt9CmZ1bmN0aW9uIHBpbGxTdHlsZShvbil7cmV0dXJuICdwYWRkaW5nOjlweCAxM3B4O2JvcmRlci1yYWRpdXM6OXB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtjdXJzb3I6cG9pbnRlcjtib3JkZXI6MS41cHggc29saWQgJysob24/JyNDODEwMkUnOicjMkIzQTVDJykrJztiYWNrZ3JvdW5kOicrKG9uPycjQzgxMDJFJzonIzE4MjMzQycpKyc7Y29sb3I6I2ZmZjt1c2VyLXNlbGVjdDpub25lJzt9CmZ1bmN0aW9uIGJ1aWxkU2l6ZVBpbGxzKCl7CiAgaWYoIXBpbGxzfHwhenMpcmV0dXJuOwogIHBpbGxzLmlubmVySFRNTD0nJzsKICBmb3IodmFyIGk9MDtpPHpzLm9wdGlvbnMubGVuZ3RoO2krKyl7KGZ1bmN0aW9uKGkpewogICAgdmFyIG89enMub3B0aW9uc1tpXTt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIGQudGV4dENvbnRlbnQ9by50ZXh0LnJlcGxhY2UoLyAtIFwkLiokLywnJykrJyAoJytvLnRleHQucmVwbGFjZSgvXi4qIC0gLywnJykrJyknOwogICAgZC5zdHlsZS5jc3NUZXh0PXBpbGxTdHlsZShpPT09enMuc2VsZWN0ZWRJbmRleCk7CiAgICBkLm9uY2xpY2s9ZnVuY3Rpb24oKXt6cy5zZWxlY3RlZEluZGV4PWk7ZmlyZSh6cyk7YnVpbGRTaXplUGlsbHMoKTt9OwogICAgcGlsbHMuYXBwZW5kQ2hpbGQoZCk7CiAgfSkoaSk7fQp9CmZ1bmN0aW9uIGJ1aWxkU2lkZXNQaWxscygpewogIGlmKCFzaWRlc1ApcmV0dXJuOwogIHNpZGVzUC5pbm5lckhUTUw9Jyc7CiAgdmFyIHlhcmRPcHQ9bnVsbDsKICBmb3IodmFyIGk9MDtpPHMub3B0aW9ucy5sZW5ndGg7aSsrKXtpZihzLm9wdGlvbnNbaV0udmFsdWU9PT0neWFyZCcpeWFyZE9wdD1zLm9wdGlvbnNbaV07fQogIGlmKCF5YXJkT3B0KXJldHVybjsKICBbWydTaW5nbGUtc2lkZWQnLCcxNSddLFsnRG91YmxlLXNpZGVkJywnMjAnXV0uZm9yRWFjaChmdW5jdGlvbihwKXsKICAgIHZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgZC50ZXh0Q29udGVudD1wWzBdKycgJCcrcFsxXTsKICAgIGQuc3R5bGUuY3NzVGV4dD1waWxsU3R5bGUoeWFyZE9wdC5kYXRhc2V0LnJhdGU9PT1wWzFdKTsKICAgIGQub25jbGljaz1mdW5jdGlvbigpe3lhcmRPcHQuZGF0YXNldC5yYXRlPXBbMV07ZmlyZShzKTtidWlsZFNpZGVzUGlsbHMoKTt9OwogICAgc2lkZXNQLmFwcGVuZENoaWxkKGQpOwogIH0pOwp9CmZ1bmN0aW9uIGJ1aWxkKCl7CiAgbC5pbm5lckhUTUw9Jyc7CiAgZm9yKHZhciBpPTA7aTxzLm9wdGlvbnMubGVuZ3RoO2krKyl7KGZ1bmN0aW9uKGkpewogICAgdmFyIG89cy5vcHRpb25zW2ldO3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgZC50ZXh0Q29udGVudD1vLnRleHQ7CiAgICBkLnN0eWxlLmNzc1RleHQ9J3BhZGRpbmc6MTFweCAxM3B4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMTExO2N1cnNvcjpwb2ludGVyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNGMUY1RjknOwogICAgZC5vbm1vdXNlZW50ZXI9ZnVuY3Rpb24oKXtkLnN0eWxlLmJhY2tncm91bmQ9JyNGRUYyRjInO307CiAgICBkLm9ubW91c2VsZWF2ZT1mdW5jdGlvbigpe2Quc3R5bGUuYmFja2dyb3VuZD0nI2ZmZic7fTsKICAgIGQub25jbGljaz1mdW5jdGlvbigpe3MudmFsdWU9by52YWx1ZTtmaXJlKHMpO2IudGV4dENvbnRlbnQ9by50ZXh0O2wuc3R5bGUuZGlzcGxheT0nbm9uZSc7fTsKICAgIGwuYXBwZW5kQ2hpbGQoZCk7CiAgfSkoaSk7fQp9CmZ1bmN0aW9uIG1vZGVzKCl7CiAgdmFyIG89cy5vcHRpb25zW3Muc2VsZWN0ZWRJbmRleF0sbT1vP28uZGF0YXNldC5tb2RlOicnOwogIGlmKHNpZGVzUm93KXNpZGVzUm93LnN0eWxlLmRpc3BsYXk9KHMudmFsdWU9PT0neWFyZCcpPydibG9jayc6J25vbmUnOwogIGlmKG09PT0ncGllY2UnKXNldFRpbWVvdXQoYnVpbGRTaXplUGlsbHMsMCk7CiAgaWYocy52YWx1ZT09PSd5YXJkJylidWlsZFNpZGVzUGlsbHMoKTsKfQpmdW5jdGlvbiB0b2dnbGUoKXtpZihsLnN0eWxlLmRpc3BsYXk9PT0nbm9uZScpe2J1aWxkKCk7bC5zdHlsZS5kaXNwbGF5PSdibG9jayc7fWVsc2V7bC5zdHlsZS5kaXNwbGF5PSdub25lJzt9fQpiLm9uY2xpY2s9dG9nZ2xlOwpiLm9ua2V5ZG93bj1mdW5jdGlvbihlKXtpZihlLmtleT09PSdFbnRlcid8fGUua2V5PT09JyAnKXtlLnByZXZlbnREZWZhdWx0KCk7dG9nZ2xlKCk7fX07CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbihlKXt2YXIgdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncVByb2RXcmFwJyk7aWYodyYmIXcuY29udGFpbnMoZS50YXJnZXQpKWwuc3R5bGUuZGlzcGxheT0nbm9uZSc7fSk7CnMuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyxtb2Rlcyk7CmlmKHpzKXpzLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsZnVuY3Rpb24oKXtidWlsZFNpemVQaWxscygpO30pOwp2YXIgbzA9cy5vcHRpb25zW3Muc2VsZWN0ZWRJbmRleF07aWYobzApYi50ZXh0Q29udGVudD1vMC50ZXh0Owptb2RlcygpOwp9KSgpOw==”))));