/* self-hosted Inter (VARIABLE, 400-800) - one file replaces four static weights. */
@font-face{font-family:'Inter Fallback';src:local('Arial');ascent-override:90.49%;descent-override:22.56%;line-gap-override:0%;size-adjust:107.64%}@font-face{font-family:'Inter';font-style:normal;font-weight:400 800;font-display:swap;src:url('../fonts/inter-var-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
:root{--color-primary:#1B2A4A;--color-accent:#2A6FDB;--color-accent-hover:#1A5BC5;--color-success:#1A7A4A;--color-text:#2D2D2D;--color-text-muted:#666666;--color-bg:#FFFFFF;--color-bg-light:#F5F7FA;--color-bg-dark:#1B2A4A;--color-border:#D0D8E8;--color-error:#DC3545;--color-warning:#F0AD4E;--color-info:#5BC0DE;--size-h1-hero:3.5rem;--size-h1:3rem;--size-h2:2.25rem;--size-h3:1.75rem;--size-h4:1.375rem;--size-body:1.0625rem;--size-small:0.9375rem;--size-caption:0.8125rem;--weight-regular:400;--weight-semibold:600;--weight-bold:700;--weight-extrabold:800;--lh-hero:1.1;--lh-heading:1.2;--lh-subheading:1.3;--lh-h4:1.4;--lh-body:1.7;--lh-small:1.6;--lh-caption:1.5;--space-section:7.5rem;--space-section-sm:5rem;--container-max:75rem;--container-padding:1.5rem;--gap-lg:3rem;--gap-md:2rem;--gap-sm:1rem;--radius-sm:4px;--radius-md:8px;--radius-lg:16px;--radius-full:9999px;--shadow-sm:0 1px 3px rgba(0,0,0,0.08);--shadow-md:0 4px 12px rgba(0,0,0,0.1);--shadow-hover:0 6px 20px rgba(0,0,0,0.15);--font-family:'Inter','Inter Fallback',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;--transition-fast:150ms ease;--transition-base:300ms ease;--transition-slow:400ms ease}*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{font-family:var(--font-family);font-size:var(--size-body);line-height:var(--lh-body);color:var(--color-text);background-color:var(--color-bg);overflow-x:hidden;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img,picture,video,canvas,svg{display:block;max-width:100%;height:auto}input,button,textarea,select{font:inherit;color:inherit}a{color:var(--color-accent);text-decoration:none;transition:color var(--transition-fast)}a:hover{color:var(--color-accent-hover)}ul,ol{list-style:none}h1,h2,h3,h4{color:var(--color-primary);font-weight:var(--weight-bold)}h1{font-size:var(--size-h1);line-height:var(--lh-heading)}h2{font-size:var(--size-h2);line-height:var(--lh-heading)}h3{font-size:var(--size-h3);line-height:var(--lh-subheading);font-weight:var(--weight-semibold)}h4{font-size:var(--size-h4);line-height:var(--lh-h4);font-weight:var(--weight-semibold)}p{margin-bottom:1em}p:last-child{margin-bottom:0}small{font-size:var(--size-small);line-height:var(--lh-small)}.text-muted{color:var(--color-text-muted)}.text-white{color:#FFFFFF}:focus-visible{outline:3px solid var(--color-accent);outline-offset:2px;border-radius:var(--radius-sm)}::selection{background-color:var(--color-accent);color:#FFFFFF}@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important;scroll-behavior:auto !important}}@media (max-width:991px){h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.5rem}h4{font-size:1.25rem}}@media (max-width:767px){h1{font-size:2rem}h2{font-size:1.75rem}h3{font-size:1.375rem}h4{font-size:1.125rem}}@media (max-width:477px){h1{font-size:1.75rem}h2{font-size:1.5rem}h3{font-size:1.25rem}h4{font-size:1.0625rem}body{font-size:1rem}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.container{width:100%;max-width:var(--container-max);margin-left:auto;margin-right:auto;padding-left:var(--container-padding);padding-right:var(--container-padding)}.section{padding-top:var(--space-section);padding-bottom:var(--space-section)}.section--light{background-color:var(--color-bg-light)}.section--dark{background-color:var(--color-bg-dark);color:#FFFFFF}.section--dark h2,.section--dark h3,.section--dark h4{color:#FFFFFF}.section--dark p{color:rgba(255,255,255,0.85)}.section--dark a{color:#FFFFFF}.section__header{text-align:center;max-width:720px;margin:0 auto var(--gap-lg)}.section__header p{color:var(--color-text-muted);font-size:var(--size-body);margin-top:0.75rem}.section--dark .section__header p{color:rgba(255,255,255,0.75)}.grid-2{display:grid;grid-template-columns:1fr;gap:var(--gap-md)}.grid-3{display:grid;grid-template-columns:1fr;gap:var(--gap-md)}.grid-4{display:grid;grid-template-columns:1fr;gap:var(--gap-md)}.flex-row{display:flex;flex-wrap:wrap;gap:var(--gap-md)}.flex-col{display:flex;flex-direction:column;gap:var(--gap-md)}.flex-center{display:flex;align-items:center;justify-content:center}.text-center{text-align:center}@media (min-width:478px){.section{padding-top:var(--space-section-sm);padding-bottom:var(--space-section-sm)}}@media (min-width:768px){.grid-2{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:repeat(2,1fr)}.grid-4{grid-template-columns:repeat(2,1fr)}.section{padding-top:6.25rem;padding-bottom:6.25rem}}@media (min-width:992px){.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{grid-template-columns:repeat(4,1fr)}.section{padding-top:var(--space-section);padding-bottom:var(--space-section)}}@media (max-width:477px){.section{padding-top:3.75rem;padding-bottom:3.75rem}.container{padding-left:1rem;padding-right:1rem}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;font-weight:var(--weight-semibold);font-size:var(--size-body);line-height:1;padding:0.875rem 2rem;border-radius:var(--radius-md);border:2px solid transparent;cursor:pointer;text-decoration:none;transition:color var(--transition-fast),background-color var(--transition-fast),border-color var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast);min-height:44px;min-width:44px;white-space:nowrap}.btn-primary{background-color:var(--color-accent);color:#FFFFFF;border-color:var(--color-accent)}.btn-primary:hover{background-color:var(--color-accent-hover);border-color:var(--color-accent-hover);color:#FFFFFF;transform:scale(1.03);box-shadow:var(--shadow-hover)}.btn-secondary{background-color:transparent;color:var(--color-accent-hover);border-color:var(--color-accent)}.btn-secondary:hover{background-color:var(--color-accent);color:#FFFFFF;transform:scale(1.03);box-shadow:var(--shadow-hover)}.btn-ghost{background-color:transparent;color:#FFFFFF;border-color:rgba(255,255,255,0.4)}.btn-ghost:hover{background-color:rgba(255,255,255,0.1);border-color:#FFFFFF;color:#FFFFFF}.btn-phone{background:transparent;color:#FFFFFF;border-color:rgba(255,255,255,0.3);font-weight:var(--weight-bold);font-size:var(--size-body)}.btn-phone:hover{background:rgba(255,255,255,0.1);color:#FFFFFF}.btn-phone svg{width:18px;height:18px}.navbar{position:sticky;top:0;z-index:1000;background-color:var(--color-primary);transition:background var(--transition-fast),box-shadow var(--transition-fast);padding:0}.navbar.scrolled{background:rgba(27,42,74,0.97);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 2px 20px rgba(0,0,0,0.2)}.navbar.scrolled .navbar__inner{padding-top:0.5rem;padding-bottom:0.5rem}.navbar.scrolled .navbar__logo img{height:36px}.navbar__inner{display:flex;align-items:center;justify-content:space-between;padding:0.75rem var(--container-padding);max-width:var(--container-max);margin:0 auto;gap:1rem;transition:padding var(--transition-fast)}.navbar__logo img{height:42px;width:auto;transition:height var(--transition-fast)}.navbar__links{display:none;align-items:center;gap:0.125rem}.navbar__links > a{color:rgba(255,255,255,0.75);font-size:var(--size-small);font-weight:var(--weight-semibold);padding:0.5rem 0.75rem;border-radius:var(--radius-sm);transition:color 0.15s ease,background 0.15s ease;text-decoration:none;white-space:nowrap}.navbar__links > a:hover{color:#FFFFFF;background:rgba(255,255,255,0.1)}.navbar__links > a.active{color:#FFFFFF;background:rgba(255,255,255,0.1);position:relative}.navbar__links > a.active::after{content:'';position:absolute;bottom:2px;left:50%;transform:translateX(-50%);width:60%;height:2px;background:var(--color-accent);border-radius:1px}.nav-dropdown{position:relative}.nav-dropdown__trigger{display:inline-flex;align-items:center;gap:0.25rem;cursor:pointer;color:rgba(255,255,255,0.75);font-size:var(--size-small);font-weight:var(--weight-semibold);padding:0.5rem 0.75rem;border-radius:var(--radius-sm);transition:color 0.15s ease,background 0.15s ease;text-decoration:none;white-space:nowrap}.nav-dropdown__trigger:hover,.nav-dropdown:hover > .nav-dropdown__trigger,.nav-dropdown.open > .nav-dropdown__trigger{color:#FFFFFF;background:rgba(255,255,255,0.1)}.nav-dropdown__trigger svg{width:14px;height:14px;transition:transform 0.15s ease}.nav-dropdown:hover > .nav-dropdown__trigger svg,.nav-dropdown.open > .nav-dropdown__trigger svg{transform:rotate(180deg)}.nav-dropdown__menu{position:absolute;top:100%;left:0;background:#FFFFFF;border-radius:var(--radius-md);box-shadow:0 8px 30px rgba(0,0,0,0.15),0 2px 8px rgba(0,0,0,0.08);min-width:280px;padding:0.5rem;padding-top:calc(0.5rem + 12px);opacity:0;visibility:hidden;transform:translateY(4px);transition:opacity 0.2s ease,transform 0.2s ease,visibility 0s 0.2s;z-index:100;pointer-events:none}.nav-dropdown__menu::before{content:"";position:absolute;top:-4px;left:-12px;right:-12px;height:16px}.nav-dropdown:hover > .nav-dropdown__menu,.nav-dropdown:focus-within > .nav-dropdown__menu,.nav-dropdown.open > .nav-dropdown__menu{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto;transition:opacity 0.15s ease,transform 0.15s ease,visibility 0s}.nav-dropdown__menu a{display:block;padding:0.625rem 0.875rem;color:var(--color-text) !important;background:transparent !important;font-size:var(--size-small);font-weight:var(--weight-semibold);border-radius:var(--radius-sm);text-decoration:none;transition:background 0.15s ease,color 0.15s ease}.nav-dropdown__menu a:hover{background:var(--color-bg-light) !important;color:var(--color-accent) !important}.nav-dropdown__menu a span{display:block;font-size:var(--size-caption);color:var(--color-text-muted);font-weight:var(--weight-regular);margin-top:2px}.nav-dropdown__menu a:hover span{color:var(--color-accent)}.navbar__actions{display:flex;align-items:center;gap:0.75rem}.navbar__phone{display:none;align-items:center;gap:0.375rem;color:#FFFFFF;font-weight:var(--weight-bold);font-size:var(--size-small);text-decoration:none}.navbar__phone svg{width:16px;height:16px}.navbar__phone:hover{color:rgba(255,255,255,0.8)}.navbar__cta{display:none}.navbar__hamburger{display:flex;flex-direction:column;justify-content:center;align-items:center;width:44px;height:44px;gap:5px;background:none;border:none;cursor:pointer;padding:0;z-index:1002}.navbar__hamburger span{display:block;width:24px;height:2px;background:#FFFFFF;border-radius:2px;transition:color var(--transition-base),background-color var(--transition-base),border-color var(--transition-base),transform var(--transition-base),box-shadow var(--transition-base)}.navbar__hamburger.active span:nth-child(1){transform:translateY(7px) rotate(45deg)}.navbar__hamburger.active span:nth-child(2){opacity:0}.navbar__hamburger.active span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.mobile-nav{position:fixed;inset:0;background:var(--color-primary);z-index:1001;display:flex;flex-direction:column;padding:5rem 2rem 2rem;transform:translateX(100%);transition:transform var(--transition-base);overflow-y:auto}.mobile-nav.open{transform:translateX(0)}.mobile-nav a{color:#FFFFFF;font-size:1.25rem;padding:0.875rem 0;border-bottom:1px solid rgba(255,255,255,0.08);display:block;text-decoration:none;font-weight:var(--weight-semibold)}.mobile-nav a:hover{color:var(--color-accent)}.mobile-nav__sub{padding-left:1.25rem;max-height:0;overflow:hidden;transition:max-height var(--transition-base)}.mobile-nav__sub.open{max-height:500px}.mobile-nav__toggle{cursor:pointer;-webkit-tap-highlight-color:rgba(42,111,219,0.2);user-select:none;position:relative}.mobile-nav__sub a{font-size:1.0625rem;font-weight:var(--weight-regular);color:rgba(255,255,255,0.75)}.mobile-nav__actions{margin-top:auto;padding-top:2rem;display:flex;flex-direction:column;gap:0.75rem}.mobile-nav__actions .btn{width:100%;justify-content:center;display:flex;align-items:center;gap:0.5rem;text-align:center;white-space:nowrap;padding:0.875rem 1.25rem;font-size:1rem}.mobile-nav__actions .btn svg{flex-shrink:0}.mobile-nav__actions .btn-primary{border:2px solid var(--color-accent)}.mobile-nav__actions .btn-ghost{border:2px solid rgba(255,255,255,0.4)}@media (min-width:768px){.navbar__phone{display:flex}}@media (min-width:992px){.navbar__links{display:flex}.navbar__phone{display:flex}.navbar__cta{display:inline-flex}.navbar__hamburger{display:none}}@keyframes navSlideDown{from{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}@media (prefers-reduced-motion:no-preference){.navbar{animation:navSlideDown 0.5s ease forwards}}.footer{background-color:var(--color-bg-dark);color:rgba(255,255,255,0.8);padding-top:var(--gap-lg);padding-bottom:0}.footer a{color:rgba(255,255,255,0.7);text-decoration:none;transition:color var(--transition-fast)}.footer a:hover{color:#FFFFFF}.footer__grid{display:grid;grid-template-columns:1fr;gap:var(--gap-lg);padding-bottom:var(--gap-lg);border-bottom:1px solid rgba(255,255,255,0.1)}.footer__brand{max-width:300px}.footer__brand img{height:40px;margin-bottom:1rem}.footer__brand p{font-size:var(--size-small);color:rgba(255,255,255,0.75);margin-bottom:1.25rem}.footer__socials{display:flex;gap:0.75rem}.footer__socials a{display:flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:var(--radius-full);background:rgba(255,255,255,0.08);transition:background var(--transition-fast)}.footer__socials a:hover{background:var(--color-accent)}.footer__socials svg{width:18px;height:18px;fill:#FFFFFF}.footer__col h4{color:#FFFFFF;font-size:var(--size-small);text-transform:uppercase;letter-spacing:0.08em;margin-bottom:1rem;font-weight:var(--weight-bold)}.footer__col ul{display:flex;flex-direction:column;gap:0.5rem}.footer__col a{font-size:var(--size-small)}.footer__contact-item{display:flex;align-items:flex-start;gap:0.5rem;font-size:var(--size-small);margin-bottom:0.75rem}.footer__contact-item svg{width:16px;height:16px;fill:var(--color-accent);flex-shrink:0;margin-top:2px}.footer__trust{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem;padding:var(--gap-md) 0;border-bottom:1px solid rgba(255,255,255,0.1)}.footer__trust-item{display:flex;align-items:center;gap:0.625rem;font-size:var(--size-small);font-weight:var(--weight-semibold);color:rgba(255,255,255,0.9)}.footer__trust-item svg{width:20px;height:20px;fill:var(--color-success);flex-shrink:0}.footer__bottom{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:0.75rem;padding:1.25rem 0;font-size:var(--size-caption);color:rgba(255,255,255,0.7)}.footer__legal{display:flex;flex-wrap:wrap;gap:1rem}.footer__legal a{font-size:var(--size-caption);color:rgba(255,255,255,0.7)}.footer__legal a:hover{color:rgba(255,255,255,0.7)}@media (min-width:478px){.footer__trust{grid-template-columns:repeat(2,1fr)}}@media (min-width:768px){.footer__grid{grid-template-columns:1.4fr 1fr 1fr 1fr}.footer__trust{grid-template-columns:repeat(4,1fr)}}.hero{position:relative;min-height:85vh;display:flex;align-items:center;overflow:hidden;background-color:var(--color-primary)}.hero__bg{position:absolute;inset:0;background-size:cover;background-position:center;background-repeat:no-repeat}.hero__bg::after{content:'';position:absolute;inset:0;background:linear-gradient(135deg,rgba(27,42,74,0.92) 0%,rgba(27,42,74,0.7) 50%,rgba(27,42,74,0.55) 100%)}.hero__content{position:relative;z-index:2;max-width:680px;padding:var(--space-section) 0}.hero__badge{display:inline-flex;align-items:center;gap:0.5rem;background:rgba(255,255,255,0.1);backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,0.15);border-radius:var(--radius-full);padding:0.5rem 1.25rem;font-size:var(--size-small);color:rgba(255,255,255,0.9);font-weight:var(--weight-semibold);margin-bottom:1.5rem}.hero__badge svg{width:16px;height:16px}.hero h1{color:#FFFFFF;font-size:var(--size-h1-hero);font-weight:var(--weight-extrabold);line-height:var(--lh-hero);margin-bottom:1.25rem}.hero h1 span{color:#5BA3F5}.hero__sub{color:rgba(255,255,255,0.8);font-size:1.1875rem;line-height:1.6;margin-bottom:2rem;max-width:540px}.hero__ctas{display:flex;flex-wrap:wrap;gap:0.75rem;margin-bottom:2.5rem}.hero__trust{display:flex;flex-wrap:wrap;gap:1.5rem;padding-top:1.5rem;border-top:1px solid rgba(255,255,255,0.12)}.hero__trust-item{display:flex;align-items:center;gap:0.5rem;color:rgba(255,255,255,0.85);font-size:var(--size-small);font-weight:var(--weight-semibold)}.hero__trust-item svg{width:18px;height:18px}@media (max-width:991px){.hero{min-height:70vh}.hero h1{font-size:2.75rem}.hero__sub{font-size:1.0625rem}}@media (max-width:767px){.hero{min-height:auto}.hero h1{font-size:2.25rem}.hero__ctas{flex-direction:column}.hero__ctas .btn{width:100%}}@media (max-width:477px){.hero h1{font-size:2rem}.hero__trust{gap:1rem}}.card{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:2rem;transition:transform var(--transition-fast),box-shadow var(--transition-fast)}.card:hover{transform:translateY(-4px);box-shadow:var(--shadow-hover)}.service-card{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:2rem;text-align:center;transition:color var(--transition-fast),background-color var(--transition-fast),border-color var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast);text-decoration:none;display:block}.service-card:hover{border-color:var(--color-accent);transform:translateY(-4px);box-shadow:var(--shadow-hover)}.service-card__icon{width:56px;height:56px;background:var(--color-bg-light);border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;margin:0 auto 1.25rem;font-size:1.75rem}.service-card h3{font-size:var(--size-h4);margin-bottom:0.75rem}.service-card p{color:var(--color-text-muted);font-size:var(--size-small)}.service-card__link{display:inline-flex;align-items:center;gap:0.375rem;color:var(--color-accent);font-weight:var(--weight-semibold);font-size:var(--size-small);margin-top:1rem}.service-card__link svg{width:16px;height:16px;transition:transform var(--transition-fast)}.service-card:hover .service-card__link svg{transform:translateX(4px)}.testimonial-card{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:2rem;position:relative}.testimonial-card__stars{display:flex;gap:2px;margin-bottom:1rem}.testimonial-card__stars svg{width:18px;height:18px;fill:#F59E0B}.testimonial-card blockquote{font-size:var(--size-body);line-height:var(--lh-body);color:var(--color-text);margin-bottom:1.25rem;font-style:italic}.testimonial-card__author{display:flex;align-items:center;gap:0.75rem}.testimonial-card__name{font-weight:var(--weight-semibold);font-size:var(--size-small)}.testimonial-card__location{font-size:var(--size-caption);color:var(--color-text-muted)}.testimonial-card__badge{display:inline-block;background:var(--color-bg-light);color:var(--color-accent);font-size:var(--size-caption);font-weight:var(--weight-semibold);padding:0.25rem 0.625rem;border-radius:var(--radius-full);margin-top:0.5rem}.blog-card{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden;transition:color var(--transition-fast),background-color var(--transition-fast),border-color var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast);text-decoration:none;display:block}.blog-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-hover)}.blog-card__image{width:100%;height:200px;object-fit:cover;background:var(--color-bg-light)}.blog-card__body{padding:1.5rem}.blog-card__category{display:inline-block;background:rgba(42,111,219,0.1);color:var(--color-accent);font-size:var(--size-caption);font-weight:var(--weight-semibold);padding:0.25rem 0.625rem;border-radius:var(--radius-full);margin-bottom:0.75rem}.blog-card h3{font-size:var(--size-h4);margin-bottom:0.5rem;color:var(--color-primary)}.blog-card p{color:var(--color-text-muted);font-size:var(--size-small)}.blog-card__date{font-size:var(--size-caption);color:var(--color-text-muted);margin-top:0.75rem}.gallery-card{position:relative;border-radius:var(--radius-md);overflow:hidden;cursor:pointer;aspect-ratio:4/3}.gallery-card img{width:100%;height:100%;object-fit:cover;transition:transform var(--transition-slow)}.gallery-card:hover img{transform:scale(1.05)}.gallery-card__overlay{position:absolute;inset:0;background:linear-gradient(to top,rgba(27,42,74,0.85) 0%,transparent 60%);display:flex;flex-direction:column;justify-content:flex-end;padding:1.25rem;opacity:0;transition:opacity var(--transition-base)}.gallery-card:hover .gallery-card__overlay{opacity:1}.gallery-card__overlay h4{color:#FFFFFF;font-size:var(--size-small);margin-bottom:0.25rem}.gallery-card__overlay span{font-size:var(--size-caption);color:rgba(255,255,255,0.7)}.stat-bar{display:grid;grid-template-columns:repeat(2,1fr);gap:1.5rem;text-align:center}.stat-bar__item{padding:1.5rem 1rem}.stat-bar__number{font-size:2rem;font-weight:var(--weight-extrabold);color:#FFFFFF;line-height:1;margin-bottom:0.5rem}.stat-bar__label{font-size:var(--size-small);color:var(--color-text-muted);font-weight:var(--weight-semibold)}.section--dark .stat-bar__label{color:rgba(255,255,255,0.65)}@media (min-width:768px){.stat-bar{grid-template-columns:repeat(4,1fr)}.stat-bar__number{font-size:2.5rem}}@media (min-width:992px){.stat-bar__number{font-size:3.25rem}}.value-card{text-align:center;padding:1.5rem}.value-card__icon{width:64px;height:64px;background:rgba(42,111,219,0.08);border-radius:var(--radius-lg);display:flex;align-items:center;justify-content:center;margin:0 auto 1rem;font-size:1.75rem}.value-card h3{font-size:var(--size-h4);margin-bottom:0.5rem}.value-card p{font-size:var(--size-small);color:var(--color-text-muted)}.cta-banner{text-align:center;padding:var(--space-section) 0}.cta-banner h2{color:#FFFFFF;margin-bottom:1rem}.cta-banner p{color:rgba(255,255,255,0.75);font-size:1.125rem;margin-bottom:2rem;max-width:600px;margin-left:auto;margin-right:auto}.cta-banner__phone{display:block;color:#FFFFFF;font-size:1.5rem;font-weight:var(--weight-bold);margin-bottom:1.5rem;text-decoration:none}.cta-banner__phone:hover{color:rgba(255,255,255,0.85)}.cta-banner__actions{display:flex;flex-wrap:wrap;justify-content:center;gap:0.75rem}.inline-form{display:flex;flex-wrap:wrap;gap:0.5rem;max-width:640px;margin:1.5rem auto 0;justify-content:center}.inline-form input,.inline-form select{padding:0.75rem 1rem;border:1px solid rgba(255,255,255,0.25);border-radius:var(--radius-md);background:rgba(255,255,255,0.1);color:#FFFFFF;font-size:var(--size-small);min-width:160px;flex:1}.inline-form input::placeholder{color:rgba(255,255,255,0.5)}.inline-form select{color:rgba(255,255,255,0.7)}.inline-form select option{color:var(--color-text);background:var(--color-bg)}.inline-form .btn{flex-shrink:0}.faq-item{border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden;margin-bottom:0.75rem;transition:border-color var(--transition-fast)}.faq-item.active{border-color:var(--color-accent)}.faq-item__question{display:flex;align-items:center;justify-content:space-between;width:100%;padding:1.25rem 1.5rem;background:none;border:none;cursor:pointer;text-align:left;font-size:var(--size-body);font-weight:var(--weight-semibold);color:var(--color-primary);min-height:44px;gap:1rem}.faq-item__question:hover{color:var(--color-accent)}.faq-item__icon{width:24px;height:24px;flex-shrink:0;transition:transform var(--transition-base)}.faq-item.active .faq-item__icon{transform:rotate(180deg)}.faq-item__answer{max-height:0;overflow:hidden;transition:max-height var(--transition-base)}.faq-item__answer-inner{padding:0 1.5rem 1.25rem;color:var(--color-text);font-size:var(--size-small);line-height:var(--lh-body)}.faq-item__answer-inner p{margin-bottom:0.75rem}.faq-item__answer-inner ul{list-style:disc;padding-left:1.25rem;margin-bottom:0.75rem}.faq-item__answer-inner li{margin-bottom:0.375rem}.breadcrumb{padding:1rem 0;font-size:var(--size-caption)}.breadcrumb a{color:var(--color-text-muted)}.breadcrumb a:hover{color:var(--color-accent)}.breadcrumb span{color:var(--color-text-muted);margin:0 0.375rem}.breadcrumb .current{color:var(--color-text);font-weight:var(--weight-semibold)}.trust-bar{display:flex;flex-wrap:wrap;justify-content:center;gap:2rem;padding:1.5rem 0}.trust-bar__item{display:flex;align-items:center;gap:0.5rem;font-size:var(--size-small);font-weight:var(--weight-semibold);color:var(--color-text)}.trust-bar__item svg{width:20px;height:20px;fill:var(--color-success)}.badge{display:inline-flex;align-items:center;gap:0.25rem;font-size:var(--size-caption);font-weight:var(--weight-semibold);padding:0.25rem 0.625rem;border-radius:var(--radius-full);background:rgba(42,111,219,0.1);color:var(--color-accent)}.mobile-call-btn{display:none;position:fixed;bottom:20px;right:20px;width:56px;height:56px;background:var(--color-accent);color:#FFFFFF;border-radius:var(--radius-full);align-items:center;justify-content:center;box-shadow:var(--shadow-hover);z-index:998;text-decoration:none;transition:transform var(--transition-fast),background var(--transition-fast)}.mobile-call-btn:hover{background:var(--color-accent-hover);transform:scale(1.08);color:#FFFFFF}.mobile-call-btn svg{width:24px;height:24px;fill:#FFFFFF}@media (max-width:767px){.mobile-call-btn{display:flex}}.process-steps{display:grid;grid-template-columns:1fr;gap:2rem;counter-reset:step}.process-step{position:relative;padding-left:4rem;counter-increment:step}.process-step::before{content:counter(step);position:absolute;left:0;top:0;width:48px;height:48px;background:var(--color-accent);color:#FFFFFF;border-radius:var(--radius-full);display:flex;align-items:center;justify-content:center;font-weight:var(--weight-bold);font-size:1.125rem}.process-step h3{font-size:var(--size-h4);margin-bottom:0.5rem}.process-step p{color:var(--color-text-muted);font-size:var(--size-small)}@media (min-width:768px){.process-steps{grid-template-columns:repeat(2,1fr)}}@media (min-width:992px){.process-steps{grid-template-columns:repeat(4,1fr)}.process-step{padding-left:0;padding-top:4rem;text-align:center}.process-step::before{left:50%;top:0;transform:translateX(-50%)}}.form-group{margin-bottom:1.25rem}.form-group label{display:block;font-size:var(--size-small);font-weight:var(--weight-semibold);color:var(--color-primary);margin-bottom:0.375rem}.form-group input,.form-group select,.form-group textarea{width:100%;padding:0.75rem 1rem;border:1px solid var(--color-border);border-radius:var(--radius-sm);font-size:var(--size-body);color:var(--color-text);background:var(--color-bg);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px rgba(42,111,219,0.15)}.form-group textarea{min-height:120px;resize:vertical}.form-group .error-message{display:none;font-size:var(--size-caption);color:var(--color-error);margin-top:0.25rem}.form-group.has-error input,.form-group.has-error select,.form-group.has-error textarea{border-color:var(--color-error)}.form-group.has-error .error-message{display:block}.form-grid{display:grid;grid-template-columns:1fr;gap:0 1.25rem}@media (min-width:768px){.form-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:768px){.footer a{display:inline-block;padding:0.375rem 0;min-height:44px;line-height:2}.footer__legal a{padding:0.5rem 0.25rem}}
/* Footer responsive grid */
@media (min-width: 478px) {
  .footer-grid-responsive {
    grid-template-columns: repeat(2, 1fr) !important;
  }
}
@media (min-width: 992px) {
  .footer-grid-responsive {
    grid-template-columns: 1.5fr 1fr 1fr 1fr 1fr !important;
  }
}

/* ===== 2026-06-23 hero scroll cue (bottom-right) + 24/7 availability topbar ===== */
.hero__scroll-cue{transition:color .2s ease;}
.hero__scroll-cue:hover{color:#fff;}
.hero__scroll-mouse{position:relative;width:24px;height:38px;border:2px solid rgba(255,255,255,.6);border-radius:12px;display:block;}
.hero__scroll-wheel{position:absolute;top:7px;left:50%;width:4px;height:8px;margin-left:-2px;border-radius:2px;background:#fff;animation:scrollWheel 1.8s cubic-bezier(.4,0,.2,1) infinite;}
@keyframes scrollWheel{0%{opacity:0;transform:translateY(0)}25%{opacity:1}55%{opacity:1;transform:translateY(12px)}100%{opacity:0;transform:translateY(14px)}}
@media (max-width:768px){.hero__scroll-cue{display:none;}}
@media (prefers-reduced-motion:reduce){.hero__scroll-wheel{animation:none;top:50%;margin-top:-4px;}}
.topbar{background:#0F1419;color:#fff;font-size:.82rem;line-height:1.3;}
.topbar__inner{display:flex;align-items:center;justify-content:center;gap:.5rem 1.25rem;flex-wrap:wrap;padding:.5rem 1rem;text-align:center;}
.topbar__msg{display:inline-flex;align-items:center;gap:.45rem;font-weight:600;letter-spacing:.01em;}
.topbar__msg svg{flex:none;}
.topbar__dot{width:7px;height:7px;border-radius:50%;background:#4ADE80;box-shadow:0 0 6px rgba(74,222,128,.9);animation:topbarPulse 2s ease-in-out infinite;flex:none;}
@keyframes topbarPulse{0%,100%{opacity:1}50%{opacity:.4}}
.topbar__phone{display:inline-flex;align-items:center;gap:.3rem;color:#FBBF24;font-weight:800;text-decoration:none;white-space:nowrap;}
.topbar__phone:hover{text-decoration:underline;}
@media (max-width:600px){.topbar{font-size:.74rem;}.topbar__inner{padding:.4rem .75rem;gap:.25rem .75rem;}}

/* ===== 2026-06-24 hero trust bar — fit one line on desktop ===== */
.hero__trust{gap:0.6rem 1rem !important;}
.hero__trust-item{font-size:0.78rem !important;}
.hero__trust-item svg{width:15px !important;height:15px !important;}

/* offscreen section layout skipping - measured on Fort Myers 2026-08-17: Style & Layout 1713 -> 1142 ms,
   TBT 794 -> 501 ms, CLS unchanged at 0.000. Lighthouse mobile showed 1713 ms of Style & Layout
   against 62 ms of script, i.e. the TBT was layout, not JavaScript. The hero and first section are
   excluded so the LCP element is never deferred; `auto` in contain-intrinsic-size makes the browser
   remember each section's real height, which is what prevents scroll-back shift. */
@media (max-width:767px){main > section:nth-of-type(n+2){content-visibility:auto;contain-intrinsic-size:auto 700px}}

/* mobile hero variants - !important because background-image is an inline style attribute. */
@media (max-width: 767px) {
  .hero__bg[style*="hero-epoxy-floor."],
  .service-hero__bg[style*="hero-epoxy-floor."],
  .service-hero[style*="hero-epoxy-floor."] {
    background-image: url('../images/hero-epoxy-floor-m900.bb664be4a1.webp') !important;
  }
}

/* layout containment - each repeated card becomes its own layout root, so a change inside one
   cannot invalidate layout for the rest of the page. Style & Layout was 1605 ms against 69 ms of
   script, i.e. the whole of the mobile TBT. */
.card,.service-card,.testimonial-card,.blog-card,.gallery-card,.value-card,.faq-item,.area-card,
.process-step,.stat-bar__item{contain:layout style}

/* footer layout skipping - the footer sits OUTSIDE <main>, so the section rule never covered it,
   and it is always below the fold. */
@media (max-width:767px){.footer{content-visibility:auto;contain-intrinsic-size:auto 900px}}

/* ==== Greensboro optimizer iteration 1 (2026-09-14) — overrides; style.css loads after each page's inline <style> ==== */
/* FAQ: question text sits beside its icon (was centred by space-between) */
.faq-item__question{justify-content:flex-start}
.faq-item__question>svg:last-child{margin-left:auto}
/* FAQ: keyboard focus ring drawn INSIDE the button (.faq-item overflow:hidden clipped the outside ring) */
.faq-item__question:focus-visible{outline:3px solid #1A5BC5;outline-offset:-3px;border-radius:var(--radius-md)}
.faq-item:has(.faq-item__question:focus-visible){border-color:#1A5BC5;box-shadow:0 0 0 2px #1A5BC5}
/* FAQ: collapsed answers leave the Tab order and the accessibility tree (every accordion toggles .active) */
.faq-item__answer{visibility:hidden}
.faq-item.active .faq-item__answer{visibility:visible}
/* sticky mobile CTA bar no longer covers the footer links / focused elements */
@media(max-width:767px){body:has(.mobile-cta-bar){padding-bottom:calc(72px + env(safe-area-inset-bottom,0px))}html{scroll-padding-bottom:88px}}
/* focus rings: >=3:1 on light surfaces, light ring on dark surfaces */
:focus-visible{outline:3px solid #1A5BC5;outline-offset:2px}
.btn:focus-visible,.service-card:focus-visible,.nav-dropdown__menu a:focus-visible{outline-color:#1A5BC5}
.navbar :focus-visible,.topbar :focus-visible,.mobile-nav :focus-visible,.mobile-cta-bar :focus-visible,.section--dark :focus-visible,.footer :focus-visible,.hero :focus-visible,.service-hero :focus-visible{outline-color:#5BA3F5}
/* .btn shorthand reset the outline button's border to transparent */
.btn-outline{background:transparent;color:#1A5BC5;border:2px solid #1A5BC5}
.btn-outline:hover{background:#1A5BC5;color:#FFFFFF;border-color:#1A5BC5}
/* muted grey (#666) directly on navy measured 2.48:1 */
.section--dark p[style*="color:var(--color-text-muted)"]{color:rgba(255,255,255,0.7)!important}
/* photo-card captions: stronger scrim + brighter caption text */
/* photo cards: caption + scrim at the TOP of the photo so the floor keeps its real colour (iteration 2) */
.gallery-card__overlay{justify-content:flex-start!important;background:linear-gradient(to bottom,rgba(27,42,74,0.9) 0,rgba(27,42,74,0.8) 6rem,rgba(27,42,74,0) 9.5rem)!important}
.gallery-card__overlay span[style*="rgba(255,255,255,0.7)"]{color:rgba(255,255,255,0.9)!important}
/* homepage cards read left-aligned, links pinned to the bottom */
#services .service-card,#why-us .value-card,#trust .value-card{text-align:left}
#services .service-card{display:flex;flex-direction:column}
#services .service-card .service-card__link{margin-top:auto;padding-top:0.75rem}
#why-us .value-card__icon,#trust .value-card__icon{margin:0 0 1rem}
/* bottom CTA band was padded twice (.section + .cta-banner) */
.section > .cta-banner{padding:0}
/* homepage service-area cards: two columns could not shrink below min-content and spilled to ~427px on a 375px phone */
@media(max-width:600px){.areas-grid{grid-template-columns:1fr!important}}

/* ==== Greensboro optimizer iteration 1 (2026-09-14), block 2 ==== */
/* FAQ: answer text stays visible while the panel collapses; visibility flips once max-height has finished */
.faq-item__answer{transition:max-height .3s ease,visibility 0s linear .3s!important}
.faq-item.active .faq-item__answer{transition:max-height .3s ease,visibility 0s!important}
@media(prefers-reduced-motion:reduce){.faq-item__answer,.faq-item.active .faq-item__answer{transition:none!important}}
/* tablets: the header quote button was hidden between 768 and 991 px, where the sticky bar is also gone */
@media (min-width:768px) and (max-width:991px){.navbar__cta{display:inline-flex;padding:0.625rem 1rem;font-size:var(--size-small)}}
/* sticky mobile CTA bar clears the iOS home indicator */
@media(max-width:767px){.mobile-cta-bar{padding-bottom:calc(0.5rem + env(safe-area-inset-bottom,0px))}}
/* intro grids: text beside the photo on desktop instead of 136-character lines above an upscaled image */
@media (min-width:992px){.content-grid-responsive{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr)!important;align-items:start!important}.content-grid-responsive>div:last-child:not(:first-child){position:sticky;top:96px}}
.content-grid-responsive>div:first-child{max-width:70ch}
/* homepage service cards: the link sits at the bottom of every card */
#services .service-card>div{display:flex;flex-direction:column;flex:1}
#services .service-card .service-card__link{align-self:flex-start}
/* first screen never waits for the scroll-reveal observer (LCP) */
main > section:nth-of-type(-n+2) .reveal{opacity:1;transform:none;transition:none}
/* sticky navbar: compact look via transform, no height change (a height change shifts the whole page) */
.navbar.scrolled{-webkit-backdrop-filter:none;backdrop-filter:none}
.navbar.scrolled .navbar__inner{padding-top:0.75rem;padding-bottom:0.75rem}
.navbar__logo img{transition:transform var(--transition-fast);transform-origin:left center}
.navbar.scrolled .navbar__logo img{height:42px;transform:scale(0.857)}
/* homepage hero: overlay strong enough for the H1's light-blue second line over the brightest photo pixels */
.hero__bg::after{background:linear-gradient(135deg,rgba(27,42,74,0.94) 0%,rgba(27,42,74,0.86) 50%,rgba(27,42,74,0.72) 100%)}
/* value-card icons are white: restore the blue tile the inline critical CSS intended */
.value-card__icon{background:linear-gradient(135deg,#2A6FDB 0%,#1A5BC5 100%)}
/* trust strip: one band of padding, not a 240 px seam between light sections (city/service implementers set the class) */
.section.trust-strip{padding-top:4.5rem;padding-bottom:4.5rem}
@media (max-width:477px){.section.trust-strip{padding-top:3rem;padding-bottom:3rem}}
/* long localized button labels ("Get a Free Winston-Salem Quote") wrap instead of overflowing a 320 px phone */
@media(max-width:480px){.btn{white-space:normal;text-align:center;line-height:1.25;max-width:100%}}

/* ==== Greensboro optimizer iteration 1 (2026-09-14), block 3 ==== */
/* accent text on light-blue tints: #1A5BC5 (5.65:1) instead of #2A6FDB (4.30:1) */
.suburb-links a{color:#1A5BC5}
#process span[style*="background:rgba(42,111,219,0.08)"]{color:#1A5BC5!important}
/* process timeline: keep the left-rail layout on desktop and carry the rail past each photo */
@media (min-width:992px){#process .process-step{padding-top:0;text-align:left}}

/* ==== Greensboro optimizer iteration 1 (2026-09-14), block 4 ==== */
/* footer column titles are <h2> now: keep the small uppercase label look, not the page h2 size */
.footer .footer__heading{color:#FFFFFF;font-size:var(--size-small);font-weight:var(--weight-bold);margin:0 0 1rem;line-height:1.4;text-transform:uppercase;letter-spacing:0.05em}
/* social icon links: 44 px touch targets */
.footer-social{width:44px;height:44px}

/* ==== Greensboro optimizer iteration 2 (2026-09-14), block 5 ==== */
/* focus rings: dark blue on light surfaces, light blue on dark ones, amber inside Floor Studio */
.btn:focus-visible,.service-card:focus-visible,.nav-dropdown__menu a:focus-visible,.gallery-card:focus-visible,.area-card:focus-visible,.blog-card:focus-visible,.blog-featured:focus-visible{outline-color:#1A5BC5}
.navbar :focus-visible,.topbar :focus-visible,.mobile-nav :focus-visible,.mobile-cta-bar :focus-visible,.section--dark :focus-visible,.footer :focus-visible,.hero :focus-visible,.service-hero :focus-visible,.article-cta :focus-visible,.lightbox :focus-visible,[style*="background:var(--color-primary)"] :focus-visible,[style*="linear-gradient(135deg,var(--color-primary)"] :focus-visible,section[style*="#0F1419"] :focus-visible,.contact-info-card[style*="var(--color-primary)"] :focus-visible{outline-color:#5BA3F5}
.section--dark .area-card:focus-visible,#service-areas .area-card:focus-visible{outline-color:#5BA3F5}
.fs-app-wrap :focus-visible{outline-color:#FBBF24}
/* sticky call/quote bar: labels stay white after a tap, and the tap gives feedback */
.mobile-cta-bar__btn--quote,.mobile-cta-bar__btn--quote:hover,.mobile-cta-bar__btn--quote:focus,.mobile-cta-bar__btn--call,.mobile-cta-bar__btn--call:hover,.mobile-cta-bar__btn--call:focus{color:#FFFFFF}
.mobile-cta-bar__btn{transition:transform .12s ease,background-color .15s ease,border-color .15s ease;touch-action:manipulation}
.mobile-cta-bar__btn:active{transform:scale(.97)}
.mobile-cta-bar__btn--quote:active{background:var(--color-accent-hover);border-color:var(--color-accent-hover)}
.mobile-cta-bar__btn--call:active{background:rgba(255,255,255,0.12)}
@media (prefers-reduced-motion:reduce){.mobile-cta-bar__btn:active{transform:none}}
/* in-page jumps land below the sticky navbar; the quote form lands with its first fields in view */
html{scroll-padding-top:84px}
.ghl-form-container,#quote-form{scroll-margin-top:88px}
[tabindex="-1"]:focus:not(:focus-visible){outline:none}
/* photo cards: badge opaque (6.28:1 on any photo) and no per-badge blur */
.gallery-card__overlay .badge,.gallery-card .badge{background:#1A5BC5!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
.gallery-card__overlay .badge{top:auto!important;bottom:12px}
/* gallery page grid (2-4 columns): caption bar under the photo instead of over it */
@media (min-width:600px){
.gallery-grid>.gallery-item{display:flex;flex-direction:column}
.gallery-grid .gallery-card{aspect-ratio:auto!important;flex:1;display:flex;flex-direction:column;background:var(--color-primary)}
.gallery-grid .gallery-card img{aspect-ratio:4/3;height:auto!important}
.gallery-grid .gallery-card:hover img{transform:none}
.gallery-grid .gallery-card:hover{box-shadow:var(--shadow-hover)}
.gallery-grid .gallery-card__overlay{position:static;flex:1;background:none!important;padding:0.75rem 1rem 0.875rem}
.gallery-grid .gallery-card__overlay .badge{top:12px!important;bottom:auto}
}
/* service and town heroes: overlay strong enough for the 0.8-alpha sub and trust text on the brightest pixel (5.2:1) */
.service-hero__bg::after{background:linear-gradient(160deg,rgba(27,42,74,0.92) 0%,rgba(27,42,74,0.84) 40%,rgba(27,42,74,0.78) 100%)}
.service-hero{background-color:#1B2A4A}
.service-hero:not([style*="background-image"]){background-image:linear-gradient(160deg,#1B2A4A 0%,#1A3A6A 100%)}
/* links inside running text get a non-colour cue (WCAG 1.4.1) */
main p a:not(.btn),main li a:not(.btn),main td a:not(.btn){text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:0.18em}
main p a:not(.btn):hover,main li a:not(.btn):hover{text-decoration-thickness:2px}
nav[aria-label="Table of contents"] a,.toc a,main li a.suburb-link,.suburb-links a{text-decoration:none}
/* phones: headings that fit, a hero CTA above the fold, full-width quote form */
@media (max-width:991px){.service-hero h1,main h1[style*="--size-h1"]:not(.article-hero h1){font-size:2.5rem!important}}
@media (max-width:767px){
.service-hero{min-height:auto}
.service-hero__content{padding:3rem 0 2.5rem}
.service-hero h1,main h1[style*="--size-h1"]:not(.article-hero h1){font-size:2rem!important;line-height:1.15!important}
.section__header h2,.content-block h2,.about-intro h2,main h2[style*="font-size:var(--size-h2)"]{font-size:1.75rem!important}
.ghl-form-container{padding:0.5rem;border-radius:var(--radius-md)}
.gallery-row-1,.gallery-row-2,#gallery .container>div[style*="display:grid"]{grid-template-columns:repeat(2,minmax(0,1fr))!important}
.gallery-row-1>.gallery-card,.gallery-row-2>.gallery-card,#gallery .container>div[style*="display:grid"]>.gallery-card{aspect-ratio:4/3!important}
#gallery .container>div[style*="repeat(3,1fr)"]>a:last-child{grid-column:1/-1;aspect-ratio:auto!important;min-height:3.5rem}
}
@media (max-width:599px){
.gallery-row-1 .gallery-card__overlay,.gallery-row-2 .gallery-card__overlay,#gallery .container>div[style*="display:grid"] .gallery-card__overlay{padding:0.625rem 0.75rem}
.gallery-row-1 h3,.gallery-row-2 h3,#gallery .container>div[style*="display:grid"] h3{font-size:0.875rem!important;line-height:1.25}
.gallery-row-1 .badge,.gallery-row-2 .badge,#gallery .container>div[style*="display:grid"] .badge,.gallery-row-1 .gallery-card__overlay>span:last-child,.gallery-row-2 .gallery-card__overlay>span:last-child,#gallery .container>div[style*="display:grid"] .gallery-card__overlay>span:last-child{display:none!important}
}
@media (max-width:600px){.topbar__extra{display:none}}
@media (max-width:477px){
.service-hero h1,main h1[style*="--size-h1"]:not(.article-hero h1){font-size:1.75rem!important}
.section__header h2,.content-block h2,.about-intro h2,main h2[style*="font-size:var(--size-h2)"]{font-size:1.5rem!important}
.stat-bar__number{font-size:1.625rem}
.footer-grid-responsive>div:nth-child(n+2):nth-child(-n+4)>div{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:1rem;row-gap:0!important}
}
.stat-bar__number{white-space:nowrap}
/* homepage hook line, moved out of the H1 (SEO): a subordinate line, not a second headline */
.hero__hook{display:block;color:#5BA3F5;font-size:clamp(1.25rem,2.6vw,2.1rem);font-weight:700;line-height:1.25;margin:-0.25rem 0 1.25rem;text-shadow:0 2px 12px rgba(0,0,0,0.35)}
.hero h1 span{display:block;color:#5BA3F5;font-size:0.62em;font-weight:700;line-height:1.25;margin-top:0.4em}
/* reveal: the designed fade + stagger wins over component transitions; never on the first screen or for reduced motion */
.reveal.reveal{transition:opacity var(--transition-slow),transform var(--transition-slow)}
.reveal-delay-1.reveal{transition-delay:100ms}
.reveal-delay-2.reveal{transition-delay:200ms}
.reveal-delay-3.reveal{transition-delay:300ms}
.reveal-delay-4.reveal{transition-delay:400ms}
.reveal-delay-5.reveal{transition-delay:500ms}
@media (prefers-reduced-motion:reduce){.reveal.reveal{opacity:1;transform:none;transition:none}}
main > section:nth-of-type(-n+2) .reveal.reveal{opacity:1;transform:none;transition:none}
/* motion budget: the navbar is simply there; decorative loops end; explicit transitions instead of 'all' */
.navbar{animation:none}
/* #3 [a11y 1.4.3] hero CTA: without its own stacking context the button paints its #2A6FDB fill over the glow (label 4.78:1, was 3.77:1); one 3 s pulse (2.2.2) */
.hero .btn-primary{z-index:auto}
.hero .btn-primary::before{animation-iteration-count:1;will-change:auto}
.cta-banner::before{animation:none}
.hero__scroll-wheel{animation-iteration-count:3}
@media (max-width:768px){.hero__scroll-cue{display:none!important}}
.navbar__links a{transition:color var(--transition-fast),background-color var(--transition-fast)}
.navbar__hamburger span{transition:transform var(--transition-base),opacity var(--transition-base)}
.footer-social{transition:background-color 150ms ease,border-color 150ms ease}
.suburb-links a{transition:color var(--transition-fast),background-color var(--transition-fast),border-color var(--transition-fast)}
.benefit-card{transition:transform var(--transition-fast),box-shadow var(--transition-fast)}
/* topbar on the brand palette; no "online now" pulse next to Mon–Sat hours; a 44 px tap area on the first phone link */
.topbar{background:var(--color-primary);border-bottom:1px solid rgba(255,255,255,0.08)}
.topbar__phone{color:#FFFFFF;position:relative}
.topbar__phone::after{content:'';position:absolute;left:-8px;right:-8px;top:-14px;bottom:-14px}
.topbar__dot{display:none}
.navbar__links a[href$="floor-studio.html"] span,.mobile-nav a[href$="floor-studio.html"] span{background:#5BA3F5!important;color:#1B2A4A!important}
.hero__trust-item svg,.service-hero__trust-item svg{filter:none!important}
/* homepage FAQ shows its open state (the items carry an inline border) */
#faq .faq-item.active{border-color:var(--color-accent)!important;box-shadow:0 0 0 1px var(--color-accent),0 4px 12px rgba(42,111,219,0.1)}
#faq .faq-item.active .faq-item__question{color:var(--color-accent)!important}
#faq .faq-item__question>svg:last-child{transition:transform var(--transition-base)!important}
#faq .faq-item.active .faq-item__question>svg:last-child{transform:rotate(180deg)}
/* homepage why-us card labels align along each row; services-page category pill hugs its text */
#why-us .value-card{display:flex;flex-direction:column}
#why-us .value-card>span:last-child,#why-us .value-card>a:last-child{margin-top:auto!important;padding-top:0.75rem;align-self:flex-start}
.service-detail__content>span:first-child{align-self:flex-start}

/* ==== Greensboro optimizer iteration 2 (2026-09-14), block 6 ==== */
.reveal.reveal{transition:opacity var(--transition-slow),transform var(--transition-slow)!important}
.reveal-delay-1.reveal{transition-delay:100ms!important}
.reveal-delay-2.reveal{transition-delay:200ms!important}
.reveal-delay-3.reveal{transition-delay:300ms!important}
.reveal-delay-4.reveal{transition-delay:400ms!important}
.reveal-delay-5.reveal{transition-delay:500ms!important}
@media (prefers-reduced-motion:reduce){.reveal.reveal{opacity:1!important;transform:none!important;transition:none!important}}
main > section:nth-of-type(-n+2) .reveal.reveal{opacity:1;transform:none;transition:none!important}
.nav-dropdown.is-dismissed>.nav-dropdown__menu{opacity:0!important;visibility:hidden!important;pointer-events:none!important;transition:none!important}
.mobile-call-btn::after{animation:none!important;will-change:auto!important}

/* ==== Greensboro optimizer iteration 2 (2026-09-14), block 7 ==== */
/* touch targets: standalone arrow links and small nav links reach 44 px */
.link-arrow{display:inline-flex!important;align-items:center;min-height:44px}
.service-detail__cta{display:inline-flex;align-items:center;min-height:44px}
/* #10 [a11y] + #17 [animation_ux] top-bar phone on phones: the link itself is 44 px tall; its ::after hit area was cut by the viewport top and covered by the sticky header */
@media (max-width:600px){.topbar__inner{min-height:44px;padding-top:0;padding-bottom:0}.topbar__phone{display:inline-flex;align-items:center;min-height:44px;padding:0 0.5rem}.topbar__phone::after{content:none}}
@media (max-width:767px){
.suburb-links a{min-height:44px;padding:0.55rem 1rem}
.breadcrumb a,nav[aria-label="Breadcrumb"] a{display:inline-block;padding:0.75rem 0.35rem;margin:-0.75rem -0.35rem}
nav[aria-label="Table of contents"] a{display:inline-flex;align-items:center;min-height:44px}
#why-us .value-card a[href]{display:inline-flex;align-items:center;min-height:44px}
}
/* quote form: a quiet placeholder under the iframe until the form has loaded */
.ghl-form-container{position:relative}
.ghl-form-container::before{content:'Loading the quote form\2026';position:absolute;left:0;right:0;top:2.5rem;z-index:0;text-align:center;font-size:var(--size-small);font-weight:600;color:var(--color-text-muted);pointer-events:none}
.ghl-form-container>iframe{position:relative!important;left:auto!important;z-index:1}
.ghl-form-container.is-loaded::before{content:none}
/* banner landmark: the sticky navbar now lives inside <header class="site-header"> */
.site-header{position:sticky;top:0;z-index:1000}
.site-header .navbar{position:relative}
/* homepage trust section: the six-step process as a compact row */
#trust .trust-steps{margin:0 auto;max-width:1000px}
#trust .trust-steps .process-step{display:flex;align-items:center;min-height:48px}
#trust .trust-steps .process-step h3{font-size:var(--size-small);line-height:1.35;margin:0}
@media (min-width:768px) and (max-width:991px){#trust .trust-steps{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (min-width:992px){#trust .trust-steps{grid-template-columns:repeat(6,minmax(0,1fr));gap:1rem}#trust .trust-steps .process-step{display:block}}
/* anchor jumps: html{scroll-padding-top:84px} already clears the sticky header, so targets add no margin of their own
   (scroll-padding and scroll-margin add up: the form was landing ~170 px down) */
.ghl-form-container,#quote-form{scroll-margin-top:0!important}
.blog-post__content h2{scroll-margin-top:0}
/* skipped sections reserve height only; a 700 px intrinsic WIDTH made a grid item overflow on phones */
@media (max-width:767px){main > section:nth-of-type(n+2){contain-intrinsic-size:none auto 700px}}
/* click-to-load service-area map */
.map-facade{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0.5rem;width:100%;padding:1rem;border:1px solid var(--color-border);border-radius:var(--radius-md);background-color:#E8EEF6;background-image:linear-gradient(rgba(27,42,74,0.07) 1px,transparent 1px),linear-gradient(90deg,rgba(27,42,74,0.07) 1px,transparent 1px);background-size:32px 32px;color:var(--color-primary);font:inherit;font-weight:700;text-align:center;cursor:pointer;transition:background-color var(--transition-fast)}
.map-facade:hover{background-color:#DCE5F1}
.map-facade svg{width:36px;height:36px;color:#1A5BC5}
/* #9 [a11y 1.4.3] facade caption: #4A5568 (5.68:1 on the grid lines, was 4.33:1) */
.map-facade small{display:block;font-size:var(--size-caption);font-weight:400;color:#4A5568}
/* ==== Greensboro optimizer iteration 3 (2026-09-14), block 8 (orchestrator phase B, workstream B1) ==== */
/* changed in place above: #3 hero CTA (block 5), #10/#17 top-bar phone and #11 breadcrumbs (block 7), #9 facade caption; #19 the hero trust slide-in, its delays and @keyframes slideUp were removed from the base rules */
/* #36 [design_ui CRITICAL] photo previews on phones: the 9.5rem top scrim was taller than the 102-137 px tiles (0% of the photo clear). The scrim now rides on the title: 0.8+ navy down to its last line (2 or 3 lines), then a 1.5rem fade */
@media (max-width:599px){
.gallery-row-1 .gallery-card__overlay,.gallery-row-2 .gallery-card__overlay,#gallery .container>div[style*="display:grid"] .gallery-card__overlay{background:none!important;isolation:isolate}
.gallery-row-1 .gallery-card__overlay>h3,.gallery-row-2 .gallery-card__overlay>h3,#gallery .container>div[style*="display:grid"] .gallery-card__overlay>h3{position:relative}
.gallery-row-1 .gallery-card__overlay>h3::before,.gallery-row-2 .gallery-card__overlay>h3::before,#gallery .container>div[style*="display:grid"] .gallery-card__overlay>h3::before{content:'';position:absolute;z-index:-1;top:-0.625rem;left:-0.75rem;right:-0.75rem;bottom:-1.5rem;background:linear-gradient(to bottom,rgba(27,42,74,0.9) 0,rgba(27,42,74,0.8) calc(100% - 1.5rem),rgba(27,42,74,0) 100%)}
}
/* #36 [design_ui] tablets: the homepage four-across row is 181x136 px, so its caption is the title only */
@media (min-width:600px) and (max-width:991px){
.gallery-row-2 .gallery-card__overlay{padding:0.625rem 0.75rem;background:linear-gradient(to bottom,rgba(27,42,74,0.9) 0,rgba(27,42,74,0.8) 2.9rem,rgba(27,42,74,0) 4.75rem)!important}
.gallery-row-2 h3{font-size:0.875rem!important;line-height:1.25}
.gallery-row-2 .gallery-card__overlay>span:last-child,.gallery-row-2 .gallery-card__overlay .badge{display:none!important}
}
/* #36 [design_ui] + #5 [a11y 1.4.10] 'View Full Gallery' tiles: up to 279 px of content was clipped inside 102-188 px tiles (homepage row; service-page three-across row at 768-991 px) */
@media (max-width:1199px){.gallery-row-2>a:last-child small{display:none!important}}
@media (max-width:991px){.gallery-row-2>a:last-child>div{padding:0.5rem!important}.gallery-row-2>a:last-child>div>div{display:none!important}}
@media (min-width:768px) and (max-width:991px){#gallery .container>div[style*="repeat(3,1fr)"]>a:last-child>div>div{display:none!important}}
/* #2 [a11y CRITICAL 2.4.7] map facade: the wrapper's overflow:hidden clipped the outside focus ring away; the ring is drawn inside the button (5.38:1 on #E8EEF6) */
.map-facade:focus-visible{outline:3px solid #1A5BC5!important;outline-offset:-6px}
/* #46 [design_ui] homepage facade inside the dark #service-areas band: dark-surface variant (label about 12:1, caption about 7:1, focus ring #5BA3F5 about 4.8:1) */
#service-areas .map-facade{background-color:rgba(255,255,255,0.04);background-image:linear-gradient(rgba(255,255,255,0.06) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,0.06) 1px,transparent 1px);border-color:rgba(255,255,255,0.14);color:#FFFFFF}
#service-areas .map-facade:hover{background-color:rgba(255,255,255,0.08)}
#service-areas .map-facade svg{color:#5BA3F5}
#service-areas .map-facade small{color:rgba(255,255,255,0.7)}
#service-areas .map-facade:focus-visible{outline-color:#5BA3F5!important}
/* #4 [a11y 1.4.3] open FAQ questions and answer links on light sections: #1A5BC5 (5.85:1 on #F5F7FA) instead of #2A6FDB (4.45:1) */
.section--light#faq .faq-item.active .faq-item__question{color:#1A5BC5!important}
.section--light .faq-item__answer a:not(.btn){color:#1A5BC5}
/* #7 [a11y 1.4.3] article-hero reading time sits where the scrim is weakest (min 3.97:1): opaque white */
.article-hero span[style*="color:rgba(255,255,255,0.85)"]{color:#FFFFFF!important}
/* #8 [a11y 1.4.1] the last links in running text marked by colour alone: an inline text-decoration:none (index 'Floor Studio') and a link inside a town-page fact card */
main p a:not(.btn):not(.link-arrow)[style*="text-decoration:none"]{text-decoration-line:underline!important;text-underline-offset:0.18em}
.local-fact a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:0.18em}
/* #11 [a11y 2.5.5] + #17 [animation_ux] standalone links under 44 px: FAQ-answer links alone in their paragraph; on phones the legal pages' contact list, the hero 'View Our Work', the contact sidebar links, the faqs.html phone link and the blog bylines */
.faq-item__answer p[style="margin-top:0.75rem;"]>a:only-child{display:inline-flex;align-items:center;min-height:44px}
@media (max-width:767px){
.legal-content li>a[href^="tel:"],.legal-content li>a[href^="https://ascentepoxygreensboro.com"]{display:inline-flex;align-items:center;min-height:44px}
.hero__ctas>a:not(.btn),.contact-info-item a[href^="tel:"],.contact-info-item a[href="our-service-areas.html"],main a[href^="tel:"][style*="display:flex"],a[href$="contact-us.html"][style*="font-size:var(--size-caption)"][style*="display:flex"]{display:inline-flex!important;align-items:center;min-height:44px}
}
/* #18 [animation_ux] buttons: touch screens keep no enlarged 'hover' after a tap, and every button gets a short pressed state */
@media (hover:none){.btn-primary:hover,.btn-secondary:hover{transform:none;box-shadow:none}.hero .btn-primary:hover{box-shadow:none}}
.btn:active{transform:scale(.98);box-shadow:none;transition-duration:60ms}
@media (prefers-reduced-motion:reduce){.btn:active{transform:none}}
/* #20 [animation_ux] our-service-areas hero H1 at desktop widths: the same three lines in the metric fallback and in Inter, so the font swap no longer moves the page (CLS 0.022); below 992 px both fonts already agree */
@media (min-width:992px){main h1[style*="--size-h1-hero"]{max-width:12em;text-wrap:balance}}
/* #21 [animation_ux] explicit transitions instead of 'all'; the services-page 'Explore' links move their arrow instead of animating gap (a layout property) */
.area-card{transition:border-color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}
.related-card{transition:box-shadow var(--transition-fast),transform var(--transition-fast)}
.blog-featured{transition:box-shadow var(--transition-fast),transform var(--transition-fast)!important}
.service-detail__cta{transition:color var(--transition-fast)}
.service-detail__cta svg{transition:transform var(--transition-fast)}
.service-detail__cta:hover{gap:0.5rem}
.service-detail__cta:hover svg{transform:translateX(4px)}
@media (prefers-reduced-motion:reduce){.service-detail__cta:hover svg{transform:none}}
/* #22 [animation_ux] scrolled navbar: opaque navy (the 97% fill showed the page underneath as a sharp ghost); the shadow stays as the scroll cue */
.navbar.scrolled{background:var(--color-primary)}
/* #25 [cro CRITICAL] quote jump: an overflow:hidden banner is a scroll container, so scrollIntoView scrolled its clipped glow and hid the CTA headline and trust row; clip without a scroll container */
.cta-banner{overflow:clip}
@supports not (overflow:clip){.cta-banner::before{top:0;left:0;width:100%;height:100%}}
/* #43 [design_ui] bottom CTA band: the glow positions against the whole section instead of the unpadded banner (no flat strips at the top and bottom); the section clips it, also without becoming a scroll container (#25) */
.section>.cta-banner{position:static;overflow:visible}
.section>.cta-banner>.container{position:relative;z-index:1}
#cta-bottom{overflow:clip!important}
.section:has(>.cta-banner){overflow:clip!important}
/* #37 [design_ui] town and service intros below 992 px: the section photo follows the H2 and first paragraph instead of 3,100-3,600 px of text (desktop two-column layout untouched) */
@media (max-width:991px){
#what-it-is .content-grid-responsive{display:flex!important;flex-direction:column;gap:0!important}
#what-it-is .content-grid-responsive>div:first-child{display:contents}
#what-it-is .content-grid-responsive>div:first-child>*{order:3;max-width:70ch}
#what-it-is .content-grid-responsive>div:first-child>h2,#what-it-is .content-grid-responsive>div:first-child>p:first-of-type{order:1}
#what-it-is .content-grid-responsive>div:first-child>.btn{align-self:flex-start}
#what-it-is .content-grid-responsive>div:last-child{order:2;margin:0.5rem 0 1.5rem;max-width:70ch}
}
/* #38 [design_ui] homepage stat icons: the global svg{display:block} reset ignored text-align:center; 320 px phones: the nowrap '$2K-$4K' column overflowed the bar by 6 px */
.stat-bar__item>svg{margin-left:auto;margin-right:auto}
@media (max-width:360px){.stat-bar{column-gap:0.75rem}.stat-bar__item{padding-left:0.25rem;padding-right:0.25rem}}
/* #39 [design_ui] town-page local facts: the icon sits level with its heading (it was stretched to the card height), the description keeps its own 1.5 line-height */
.local-fact>svg{height:22px;align-self:flex-start;margin-top:1px}
.local-fact span{display:block}
/* #40 [design_ui] faqs.html help pill on phones: a rounded box, question and link as one sentence, divider hidden, phone centred below */
@media (max-width:600px){
main div[style*="border-radius:var(--radius-full);padding:0.5rem 1.25rem"]{border-radius:var(--radius-md)!important;flex-direction:column;gap:0.375rem!important;padding:0.75rem 1rem!important}
main div[style*="border-radius:var(--radius-full);padding:0.5rem 1.25rem"]>span:first-child{display:block!important;text-align:center}
main div[style*="border-radius:var(--radius-full);padding:0.5rem 1.25rem"]>span:first-child svg{display:inline-block;vertical-align:-4px;margin-right:0.25rem}
main div[style*="border-radius:var(--radius-full);padding:0.5rem 1.25rem"]>span:nth-child(2){display:none}
}
/* #41 [design_ui] benefit cards: the 'stat' slot mostly holds a word, so it reads as a small eyebrow above the card heading, not a louder second headline (#1A5BC5, 6.3:1) */
#benefits p[style*="font-size:1.5rem;font-weight:800;color:var(--color-accent)"]{font-size:0.8125rem!important;font-weight:700!important;letter-spacing:0.08em;text-transform:uppercase;color:#1A5BC5!important;margin-bottom:0.375rem!important}
/* #44 [design_ui] headings: no single-word last lines */
h1,h2,h3{text-wrap:balance}
/* #45 [design_ui] phone numbers never break mid-number (scoped: a global tel nowrap overflowed a contact card at 320 px) */
main p a[href^="tel:"],main li a[href^="tel:"],.btn[href^="tel:"]{white-space:nowrap}
/* #47 [design_ui] last off-palette accents: amber seasonal line in the navy CTA band (index, garage), amber 'TOOL' pill (blog index), green footer trust icons */
#cta-bottom [style*="color:#FBBF24"]{color:#5BA3F5!important}
span[style*="color:#B45309"]{background:rgba(42,111,219,0.1)!important;color:#1A5BC5!important}
.footer svg[fill="#4ADE80"]{fill:#5BA3F5}
/* #48 [design_ui] 404 and legal-page H1s follow the mobile heading scale (were 48 px on a 375 px phone) */
@media (max-width:767px){.error-page h1,.legal-content h1{font-size:2rem}}
@media (max-width:477px){.error-page h1,.legal-content h1{font-size:1.75rem}}
/* #50 [design_ui] About value cards: icon above the text on small phones (text column 223 px -> about 300 px) */
@media (max-width:480px){.about-value-card{flex-direction:column;gap:0.75rem;padding:1.25rem}}
/* hooks for wave-2 markup, inert until it lands: #6 figures moved inside their process step; #42 drawer call/quote row moved right after the close button and service links marked .mobile-nav__child; homepage trust steps without the inline align-self */
#process .process-step__content>figure img{max-width:480px}
.mobile-nav__close+.mobile-nav__actions{margin:0 0 1rem;padding-top:0}
.mobile-nav:has(>.mobile-nav__close+.mobile-nav__actions){padding-top:4.5rem}
.mobile-nav a.mobile-nav__child{font-size:1rem;font-weight:500;padding:0.625rem 0 0.625rem 1rem;color:rgba(255,255,255,0.85)}
.mobile-nav a.mobile-nav__child:hover{color:#FFFFFF}
#trust .trust-steps .process-step>div{align-self:flex-start}
