@charset "UTF-8";
:root{
  --navy:#102A43;
  --navy-deep:#071B2E;
  --navy-line:#1E3F5C;
  --petrol:#1F6F8B;
  --petrol-dark:#12556B;
  --champagne:#C8A96A;
  --sage:#8BAE8B;
  --sage-light:#DDE8D8;

  --white:#FFFFFF;
  --paper:#FFFDF8;
  --ivory:#F7F4EF;
  --sand:#F5EFEB;

  --line:#E2DCD4;
  --line-strong:#C7C0B6;
  --ink:#102A43;
  --ink-soft:#3E5366;
  --ink-muted:#61748A;
  --on-dark:#E8F0F6;
  --on-dark-muted:#9FB6C7;
  --danger:#8E2F2F;

  --r-control:6px;
  --r-panel:10px;

  --gutter:24px;
  --pad:28px;
  --maxw:1240px;
  --header-h:80px;
  --section-y:80px;

  --f-head:'Barlow','Arial Narrow',Arial,sans-serif;
  --f-body:'Manrope','Segoe UI',Arial,sans-serif;

  --t-btn:160ms;
  --t-state:200ms;
  --t-photo:240ms;
  --t-hero:420ms;
  --t-panel:210ms;
  --ease:cubic-bezier(.4,.1,.2,1);
  --shadow-float:0 12px 30px rgba(7,27,46,.24);



  --logo:url("data:image/png;base64,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");
  /* Exportacoes diretas dos originais, sem ampliacao artificial.
     Todas as URLs fotograficas sao consumidas nesta folha, inclusive as
     selecionadas pelo JS via --photo, para manter a mesma base relativa. */
  --img-hero:url("../assets/images/uniformes/hero-uniformes-hq.webp");
  --img-commercial:url("../assets/images/uniformes/commercial-uniformes-hq.webp");
  --img-floor:url("../assets/images/uniformes/floor-uniformes-hq.webp");
  --img-residential:url("../assets/images/uniformes/residential-uniformes-hq.webp");
  --img-post:url("../assets/images/uniformes/post-uniformes-hq.webp");
  --img-move:url("../assets/images/uniformes/move-uniformes-hq.webp");
  --img-before:url("../assets/images/compare/before.jpg");
  --img-after:url("../assets/images/compare/after.jpg");
}




*{box-sizing:border-box;}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;}
body{margin:0;background:var(--paper);color:var(--ink);
  font-family:var(--f-body);font-size:17px;line-height:1.62;overflow-x:hidden;}
h1,h2,h3,h4{font-family:var(--f-head);margin:0;color:var(--navy);letter-spacing:-.005em;}
p{margin:0;}
ul,ol{margin:0;padding:0;list-style:none;}
a{color:inherit;}
button{font-family:inherit;}
:focus-visible{outline:3px solid var(--petrol);outline-offset:2px;}
.on-dark :focus-visible,.site-header :focus-visible,.site-footer :focus-visible,.hero :focus-visible{outline-color:var(--champagne);}

.wrap{max-width:var(--maxw);margin:0 auto;padding:0 var(--pad);}
main section[id],#faq,#planning{scroll-margin-top:96px;}
@media (max-width:920px){main section[id],#faq,#planning{scroll-margin-top:80px;}}
.section{padding:var(--section-y) 0;}
.bg-paper{background:var(--paper);}
.bg-sand{background:var(--sand);}
.bg-ivory{background:var(--ivory);}
.bg-white{background:var(--white);}

.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;}
.skip{position:absolute;left:16px;top:-60px;z-index:200;background:var(--champagne);color:var(--navy-deep);
  padding:10px 16px;border-radius:var(--r-control);font-weight:700;transition:top var(--t-btn) var(--ease);}
.skip:focus{top:10px;}

h1{font-size:clamp(34px,4.5vw,54px);font-weight:700;line-height:1.05;}
.h2{font-size:clamp(26px,3.1vw,40px);font-weight:600;line-height:1.12;}
.h3{font-size:clamp(22px,2.1vw,28px);font-weight:600;line-height:1.18;}
.lead{font-size:clamp(16px,1.35vw,18px);line-height:1.6;color:var(--ink-soft);max-width:60ch;}
.muted{font-size:15px;color:var(--ink-muted);line-height:1.55;}
.label{font-family:var(--f-body);font-size:13px;font-weight:700;letter-spacing:.05em;
  text-transform:uppercase;color:var(--petrol-dark);}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;
  font-weight:700;font-size:16px;line-height:1;padding:15px 24px;min-height:50px;
  border:1px solid transparent;border-radius:var(--r-control);cursor:pointer;text-decoration:none;
  transition:background-color var(--t-btn) var(--ease),border-color var(--t-btn) var(--ease),color var(--t-btn) var(--ease);}
.btn--primary{background:var(--navy);border-color:var(--navy);color:#fff;}
.btn--primary:hover{background:#19405F;border-color:#19405F;}
.btn--petrol{background:var(--petrol-dark);border-color:var(--petrol-dark);color:#fff;}
.btn--petrol:hover{background:var(--petrol);border-color:var(--petrol);}
.btn--ghost{background:transparent;border-color:var(--line-strong);color:var(--navy);}
.btn--ghost:hover{background:var(--white);border-color:var(--navy);}
.btn--gold{background:var(--champagne);border-color:var(--champagne);color:var(--navy-deep);}
.btn--gold:hover{background:#D5B97E;border-color:#D5B97E;}
.btn--onDark{background:transparent;border-color:rgba(255,255,255,.34);color:#fff;}
.btn--onDark:hover{background:rgba(255,255,255,.1);border-color:#fff;}
.btn--sm{min-height:42px;padding:11px 18px;font-size:15px;}
.btn[disabled]{opacity:.5;cursor:not-allowed;}
.btn[hidden]{display:none;}

/* ---------- Header ---------- */
.site-header{position:sticky;top:0;z-index:100;background:var(--navy);}
.header-bar{display:flex;align-items:center;gap:26px;height:80px;}
.logo{display:block;flex:0 0 auto;width:186px;height:53px;background:var(--logo) left center/contain no-repeat;}
.logo--footer{width:210px;height:60px;}
.main-nav{margin-left:auto;}
.main-nav ul{display:flex;gap:24px;align-items:center;}
.main-nav a{color:var(--on-dark);text-decoration:none;font-weight:600;font-size:15px;
  padding:9px 0;border-bottom:2px solid transparent;
  transition:color var(--t-btn) var(--ease),border-color var(--t-btn) var(--ease);}
.main-nav a:hover{color:#fff;border-bottom-color:var(--champagne);}
.header-actions{display:flex;gap:10px;flex:0 0 auto;}
.nav-toggle{display:none;}
.mobile-nav{display:none;}

/* ---------- Hero slider ---------- */
.hero{position:relative;display:flex;align-items:center;overflow:hidden;
  min-height:calc(100vh - var(--header-h));
  min-height:calc(100dvh - var(--header-h));
  background:var(--navy-deep);}
.hero__media{position:absolute;inset:0;}
/* Fotos usam interpolacao suave; optimize-contrast produz serrilhado em
   ampliacoes, e high-quality nao e suportado em todos os navegadores. */
.hero__slide, .panel__layer, .acc-photo, .compare__side, .team__photo {
  image-rendering:auto;
}
.hero__slide, .panel__layer, .acc-photo {
  background-image:var(--photo, none);
}

.hero__slide{position:absolute;inset:0;background-size:cover;opacity:0;
  transition:opacity var(--t-hero) var(--ease);}
.hero__slide.is-on{opacity:1;}
.hero__veil{position:absolute;inset:0;
  background:linear-gradient(90deg,rgba(7,27,46,.95) 0%,rgba(7,27,46,.88) 36%,rgba(7,27,46,.66) 68%,rgba(7,27,46,.52) 100%);}
.hero__inner{position:relative;width:100%;display:grid;
  grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:56px;align-items:center;
  padding-top:64px;padding-bottom:64px;}
.hero__copy{transition:opacity var(--t-state) var(--ease);}
.hero__copy.is-swapping{opacity:0;}
.hero__eyebrow{font-size:13px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--champagne);}
.hero h1{color:#fff;margin:16px 0 20px;max-width:16ch;}
.hero__lead{color:#C7D8E4;font-size:clamp(16px,1.35vw,18px);line-height:1.6;max-width:46ch;
  border-left:2px solid rgba(200,169,106,.55);padding-left:18px;}
.hero__actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:30px;}

.hero__card{background:var(--navy);border:1px solid var(--navy-line);border-radius:var(--r-panel);
  padding:24px 28px 10px;box-shadow:var(--shadow-float);}
.hero__count{display:flex;gap:11px;align-items:baseline;flex-wrap:wrap;
  padding-bottom:15px;border-bottom:1px solid var(--navy-line);}
.hero__count b{font-family:var(--f-head);font-size:15px;font-weight:600;letter-spacing:.07em;color:var(--champagne);}
.hero__count span{font-size:15px;font-weight:600;color:var(--on-dark);}
.cred li{display:flex;gap:14px;align-items:center;padding:15px 0;
  border-bottom:1px solid var(--navy-line);color:#fff;font-size:16px;font-weight:600;}
.cred li:last-child{border-bottom:0;}
.cred__ico{flex:0 0 auto;width:38px;height:38px;border-radius:50%;background:#16344E;color:var(--champagne);
  display:flex;align-items:center;justify-content:center;}

/* Dots: base central da composicao. Alvo de 30x24px, marca visual de 6px. */
.hero__nav{position:absolute;left:50%;bottom:clamp(14px,3.2vh,30px);z-index:3;
  transform:translateX(-50%);display:flex;align-items:center;}
.hero__dots{display:flex;}
.dot{position:relative;width:30px;height:24px;padding:0;border:0;border-radius:var(--r-control);
  background:transparent;cursor:pointer;}
.dot::before{content:"";position:absolute;left:50%;top:50%;width:6px;height:6px;border-radius:3px;
  transform:translate(-50%,-50%);background:rgba(255,255,255,.46);
  transition:width 240ms var(--ease),background-color var(--t-btn) var(--ease);}
.dot:hover::before{background:rgba(255,255,255,.74);}
.dot[aria-current="true"]::before{width:20px;background:var(--champagne);}

/* ---------- Services ---------- */
.sec-head{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,4fr);gap:var(--gutter);
  align-items:end;margin-bottom:40px;}
.svc-layout{display:grid;grid-template-columns:minmax(0,340px) minmax(0,1fr);gap:var(--gutter);align-items:start;}

.rail{position:relative;background:var(--white);border:1px solid var(--line);border-radius:var(--r-panel);overflow:hidden;}
.rail__marker{position:absolute;left:0;top:0;width:4px;background:var(--champagne);
  transition:transform var(--t-state) var(--ease),height var(--t-state) var(--ease);}
.rail__opt{display:flex;gap:13px;align-items:flex-start;width:100%;text-align:left;
  background:transparent;border:0;border-bottom:1px solid var(--line);
  padding:18px 20px 18px 22px;cursor:pointer;color:var(--ink);
  transition:background-color var(--t-state) var(--ease),color var(--t-state) var(--ease);}
.rail__opt:last-child{border-bottom:0;}
.rail__opt:hover{background:var(--ivory);}
.rail__dot{flex:0 0 auto;width:15px;height:15px;margin-top:6px;border-radius:50%;
  border:2px solid var(--line-strong);
  transition:border-color var(--t-state) var(--ease),background-color var(--t-state) var(--ease);}
.rail__name{display:block;font-family:var(--f-head);font-weight:600;font-size:20px;line-height:1.2;}
.rail__sum{display:block;font-size:14px;line-height:1.45;color:var(--ink-muted);margin-top:4px;}
.rail__state{display:none;font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:var(--champagne);margin-top:7px;}
.rail__opt[aria-checked="true"]{background:var(--petrol-dark);color:#fff;}
.rail__opt[aria-checked="true"] .rail__name{color:#fff;}
.rail__opt[aria-checked="true"] .rail__sum{color:#C6DEE7;}
.rail__opt[aria-checked="true"] .rail__dot{border-color:var(--champagne);background:var(--champagne);}
.rail__opt[aria-checked="true"] .rail__state{display:block;}

.panel{background:var(--white);border:1px solid var(--line);border-radius:var(--r-panel);overflow:hidden;}
.panel__photo{position:relative;width:100%;height:390px;max-height:430px;background:var(--sand);border-radius:var(--r-panel) var(--r-panel) 0 0;overflow:hidden;}
.panel__layer{position:absolute;inset:0;background-size:cover;background-repeat:no-repeat;
  transition:opacity var(--t-photo) var(--ease);}
.panel__kind{position:absolute;left:18px;top:18px;background:var(--navy);color:#fff;
  font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  padding:7px 13px;border-radius:var(--r-control);}
.panel__body{padding:34px;}
.panel__body h3{margin-bottom:12px;}
.panel__desc{color:var(--ink-soft);max-width:60ch;}
.panel__cols{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,.95fr);gap:40px;
  margin-top:28px;padding-top:26px;border-top:1px solid var(--line);}
.panel__cols h4{margin-bottom:14px;}
.checks li{display:flex;gap:11px;align-items:flex-start;padding:6px 0;font-size:16px;color:var(--ink-soft);}
.checks svg{flex:0 0 auto;margin-top:5px;color:var(--petrol);}
.meta dt{font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--petrol-dark);}
.meta dd{margin:3px 0 15px;font-size:16px;color:var(--ink-soft);}
.meta dd:last-child{margin-bottom:0;}
.panel__foot{display:flex;flex-wrap:wrap;align-items:center;gap:18px;
  margin-top:28px;padding-top:24px;border-top:1px solid var(--line);}
.accordion{display:none;}

/* ---------- Planning ---------- */
.plan__head{max-width:62ch;margin-bottom:34px;}
.plan__grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:48px;align-items:start;}
.plan__block h3{font-size:20px;font-weight:600;margin-bottom:16px;}
.chips{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:20px;}
.chip{display:inline-flex;align-items:center;gap:9px;min-height:46px;padding:11px 17px;
  background:var(--white);border:1px solid var(--line-strong);border-radius:var(--r-control);
  font-weight:600;font-size:15px;color:var(--ink);cursor:pointer;
  transition:background-color var(--t-btn) var(--ease),border-color var(--t-btn) var(--ease),color var(--t-btn) var(--ease);}
.chip:hover{border-color:var(--petrol);}
.chip__mark{flex:0 0 auto;width:14px;height:14px;border-radius:3px;border:2px solid var(--line-strong);
  transition:background-color var(--t-btn) var(--ease),border-color var(--t-btn) var(--ease);}
.chip--radio .chip__mark{border-radius:50%;}
.chip[aria-checked="true"],.chip[aria-pressed="true"]{background:var(--petrol-dark);border-color:var(--petrol-dark);color:#fff;}
.chip[aria-checked="true"] .chip__mark,.chip[aria-pressed="true"] .chip__mark{background:var(--champagne);border-color:var(--champagne);}
.plan__note{font-size:16px;color:var(--ink-soft);border-left:3px solid var(--champagne);padding-left:18px;}
.plan__note strong{color:var(--navy);}

/* ---------- Floor care ---------- */
.floor__head{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:56px;align-items:start;margin-bottom:44px;}
.floor__list{border-top:1px solid var(--line);}
.floor__list li{display:flex;gap:11px;align-items:flex-start;padding:12px 0;border-bottom:1px solid var(--line);
  font-size:16px;color:var(--ink-soft);}
.floor__list svg{flex:0 0 auto;margin-top:5px;color:var(--petrol);}

.compare{position:relative;width:100%;max-width:1180px;margin:0 auto;aspect-ratio:2/1;
  border-radius:var(--r-panel);overflow:hidden;background:var(--navy-deep);user-select:none;touch-action:pan-y;}
.compare.is-focused{outline:3px solid var(--petrol);outline-offset:3px;}
.compare__side{position:absolute;inset:0;background-size:auto 200%;background-repeat:no-repeat;background-position:center bottom;}
.compare__side--before{background-image:var(--img-before);clip-path:inset(0 calc(100% - var(--pos,50%)) 0 0);}
.compare__side--after{background-image:var(--img-after);clip-path:inset(0 0 0 var(--pos,50%));}
.compare__tag{position:absolute;bottom:18px;font-size:12px;font-weight:700;letter-spacing:.07em;
  text-transform:uppercase;background:rgba(7,27,46,.88);color:#fff;padding:7px 14px;border-radius:var(--r-control);}
.compare__tag--a{left:18px;}
.compare__tag--b{right:18px;}
.compare__bar{position:absolute;top:0;bottom:0;left:var(--pos,50%);width:3px;background:var(--champagne);
  transform:translateX(-50%);pointer-events:none;}
.compare__knob{position:absolute;top:50%;left:var(--pos,50%);transform:translate(-50%,-50%);
  width:54px;height:54px;border-radius:50%;background:var(--champagne);color:var(--navy-deep);
  border:0;display:flex;align-items:center;justify-content:center;cursor:ew-resize;box-shadow:var(--shadow-float);}
.compare__range{position:absolute;left:0;bottom:0;width:100%;height:56px;margin:0;opacity:0;cursor:ew-resize;}
.compare__foot{display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;align-items:center;
  max-width:1180px;margin:16px auto 0;}
.case{max-width:1180px;margin:26px auto 0;display:grid;grid-template-columns:repeat(4,1fr);gap:24px;
  border-top:1px solid var(--line);padding-top:22px;}

/* ---------- Pillars ---------- */
.pillars{position:relative;padding-top:28px;}
.pillars__rule{position:absolute;top:0;left:0;right:0;height:1px;background:var(--line-strong);}
.pillars__rule span{position:absolute;top:0;width:1px;height:12px;background:var(--champagne);}
.pillars__grid{display:grid;grid-template-columns:repeat(4,1fr);}
.pillar{padding:14px 30px 0 0;border-right:1px solid var(--line);margin-right:30px;}
.pillar:last-child{border-right:0;margin-right:0;padding-right:0;}
.pillar h3{font-size:23px;font-weight:600;margin-bottom:10px;}
.pillar p{font-size:16px;color:var(--ink-soft);}

.process{display:flex;flex-wrap:wrap;gap:0;margin-top:48px;border:1px solid var(--line);
  border-radius:var(--r-panel);background:var(--white);overflow:hidden;}
.process li{flex:1 1 160px;display:flex;align-items:center;gap:12px;padding:18px 20px;
  border-right:1px solid var(--line);font-weight:600;font-size:16px;}
.process li:last-child{border-right:0;}
.process b{font-family:var(--f-head);font-size:14px;font-weight:600;color:var(--petrol-dark);letter-spacing:.06em;}

/* ---------- Team / impact ---------- */
.team{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:56px;align-items:start;}
.team__photo{height:480px;border-radius:var(--r-panel);
  background:var(--img-hero) center 40%/cover no-repeat,var(--sand);}
.trust{margin-top:28px;border-top:1px solid var(--line);}
.trust li{display:flex;gap:14px;align-items:flex-start;padding:16px 0;border-bottom:1px solid var(--line);}
.trust svg{flex:0 0 auto;margin-top:4px;color:var(--petrol-dark);}
.trust strong{display:block;font-family:var(--f-head);font-weight:600;font-size:19px;margin-bottom:3px;}
.trust span span{font-size:15px;color:var(--ink-muted);}

.quotes{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--gutter);}
.quote{margin:0;background:var(--white);border:1px solid var(--line);border-top:3px solid var(--petrol);
  border-radius:var(--r-control);padding:24px;display:flex;flex-direction:column;}
.quote__kind{font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:var(--petrol-dark);margin-bottom:12px;}
.quote p{font-size:16px;color:var(--ink-soft);margin-bottom:18px;flex:1;}
.quote cite{display:flex;gap:12px;align-items:center;font-style:normal;
  border-top:1px solid var(--line);padding-top:16px;}
.quote__ini{flex:0 0 auto;width:40px;height:40px;border-radius:50%;background:var(--navy);color:#fff;
  display:flex;align-items:center;justify-content:center;font-family:var(--f-head);font-weight:600;font-size:15px;}
.quote strong{display:block;font-size:15px;color:var(--navy);}
.quote small{display:block;font-size:13px;color:var(--ink-muted);}

.impact{margin-top:56px;background:var(--sage-light);border-radius:var(--r-panel);padding:44px;
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);gap:48px;align-items:center;}
.impact h3{font-size:27px;font-weight:600;margin-bottom:12px;}
.impact p{color:#2C4636;}
.ratio{display:flex;align-items:center;gap:16px;background:rgba(255,255,255,.6);
  border:1px solid #C6D6C1;border-radius:var(--r-panel);padding:22px 24px;margin-bottom:18px;}
.ratio b{flex:0 0 auto;white-space:nowrap;font-family:var(--f-head);font-size:40px;font-weight:700;line-height:1;color:#3F6A49;}
.ratio span{font-size:15px;color:#2C4636;font-weight:600;}
.impact li{display:flex;gap:11px;align-items:flex-start;padding:6px 0;font-size:16px;color:#2C4636;}
.impact svg{flex:0 0 auto;margin-top:5px;color:#4F7A57;}

/* ---------- Coverage + FAQ ---------- */
.cov{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:64px;align-items:start;}
.cov__facts{margin-top:26px;border-top:1px solid var(--line);}
.cov__facts div{display:flex;justify-content:space-between;gap:20px;padding:13px 0;border-bottom:1px solid var(--line);}
.cov__facts dt{font-size:14px;font-weight:700;color:var(--ink-muted);}
.cov__facts dd{margin:0;font-size:16px;text-align:right;color:var(--ink-soft);}
.serves{display:flex;flex-wrap:wrap;gap:8px;margin-top:22px;}
.serves li{display:flex;align-items:center;gap:8px;padding:9px 14px;background:var(--ivory);
  border:1px solid var(--line);border-radius:var(--r-control);font-size:15px;font-weight:600;}
.serves svg{color:var(--petrol-dark);}

.faq{border-top:1px solid var(--line);margin-top:26px;}
.faq__item{border-bottom:1px solid var(--line);}
.faq__q{margin:0;}
.faq__btn{width:100%;display:flex;gap:20px;align-items:center;justify-content:space-between;
  background:transparent;border:0;padding:20px 0;cursor:pointer;text-align:left;
  font-family:var(--f-head);font-weight:600;font-size:20px;color:var(--navy);
  transition:color var(--t-btn) var(--ease);}
.faq__btn:hover{color:var(--petrol-dark);}
.faq__icon{flex:0 0 auto;width:28px;height:28px;border-radius:var(--r-control);
  border:1px solid var(--line-strong);display:flex;align-items:center;justify-content:center;color:var(--petrol-dark);
  transition:background-color var(--t-btn) var(--ease),border-color var(--t-btn) var(--ease),color var(--t-btn) var(--ease);}
.faq__btn[aria-expanded="true"] .faq__icon{background:var(--petrol-dark);border-color:var(--petrol-dark);color:#fff;}
.faq__icon .minus{display:none;}
.faq__btn[aria-expanded="true"] .plus{display:none;}
.faq__btn[aria-expanded="true"] .minus{display:block;}

.collapse{overflow:hidden;height:0;transition:height var(--t-panel) var(--ease);}
.collapse__inner{padding:0 0 22px;font-size:16px;color:var(--ink-soft);max-width:72ch;}

/* ---------- Quote form ---------- */
.quote-grid{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,8fr);gap:var(--gutter);align-items:start;}
.aside{background:var(--navy);border-radius:var(--r-panel);padding:34px;color:var(--on-dark);}
.aside h3{color:#fff;font-size:23px;font-weight:600;margin-bottom:12px;}
.aside p{color:var(--on-dark-muted);font-size:16px;margin-bottom:24px;}
.sum-row{display:flex;justify-content:space-between;gap:16px;padding:13px 0;border-bottom:1px solid var(--navy-line);font-size:15px;}
.sum-row:last-of-type{border-bottom:0;}
.sum-row dt{color:var(--on-dark-muted);font-weight:600;}
.sum-row dd{margin:0;color:#fff;font-weight:700;text-align:right;}
.aside__contact{margin-top:26px;padding-top:22px;border-top:1px solid var(--navy-line);}
.aside__contact a{display:flex;align-items:center;gap:11px;color:#fff;text-decoration:none;
  font-weight:700;font-size:16px;padding:7px 0;transition:color var(--t-btn) var(--ease);}
.aside__contact a:hover{color:var(--champagne);}
.aside__contact svg{flex:0 0 auto;color:var(--champagne);}

.card{background:var(--white);border:1px solid var(--line);border-radius:var(--r-panel);padding:40px;}
.steps{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:26px;}
.step-pill{display:flex;align-items:center;gap:9px;padding:9px 14px;border-radius:var(--r-control);
  background:var(--ivory);color:var(--ink-muted);font-size:14px;font-weight:700;}
.step-pill em{font-style:normal;width:22px;height:22px;border-radius:50%;background:var(--line);
  color:var(--navy);display:flex;align-items:center;justify-content:center;font-size:12px;}
.step-pill.is-active{background:var(--petrol-dark);color:#fff;}
.step-pill.is-active em{background:var(--champagne);color:var(--navy-deep);}
.step-pill.is-done{background:var(--sage-light);color:#2C4636;}
.step-pill.is-done em{background:#4F7A57;color:#fff;}
.progress{height:5px;background:var(--ivory);border-radius:99px;overflow:hidden;margin-bottom:32px;}
.progress__bar{height:100%;background:var(--petrol);transition:width var(--t-state) var(--ease);}

fieldset{border:0;margin:0;padding:0;}
legend{font-family:var(--f-head);font-weight:600;font-size:25px;color:var(--navy);margin-bottom:6px;}
.hint{font-size:15px;color:var(--ink-muted);margin-bottom:26px;}
.field{margin-bottom:22px;}
.field label,.field .lbl{display:block;font-size:14px;font-weight:700;color:var(--navy);margin-bottom:7px;}
.field input,.field select,.field textarea{width:100%;min-height:50px;padding:13px 15px;
  font-family:var(--f-body);font-size:16px;color:var(--ink);background:var(--white);
  border:1px solid var(--line-strong);border-radius:var(--r-control);
  transition:border-color var(--t-btn) var(--ease),background-color var(--t-btn) var(--ease);}
.field textarea{min-height:112px;resize:vertical;line-height:1.55;}
.field input:hover,.field select:hover,.field textarea:hover{border-color:var(--petrol);}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--petrol-dark);}
.field .help{margin-top:7px;font-size:13px;color:var(--ink-muted);}
.err{display:none;margin-top:7px;font-size:14px;font-weight:600;color:var(--danger);}
.field.has-error input,.field.has-error select,.field.has-error textarea{border-color:var(--danger);background:#FCF7F6;}
.field.has-error .err{display:block;}
.two{display:grid;grid-template-columns:1fr 1fr;gap:0 22px;}
.form-nav{display:flex;flex-wrap:wrap;align-items:center;gap:12px;
  margin-top:30px;padding-top:26px;border-top:1px solid var(--line);}
.form-nav .muted{margin-left:auto;}

.review{border-top:1px solid var(--line);margin-bottom:22px;}
.review-row{display:flex;justify-content:space-between;align-items:flex-start;gap:18px;
  padding:15px 0;border-bottom:1px solid var(--line);}
.review-row dt{flex:0 0 190px;font-size:14px;font-weight:700;color:var(--ink-muted);}
.review-row dd{flex:1;margin:0;font-size:16px;}
.notice{background:var(--ivory);border-left:3px solid var(--champagne);border-radius:0 var(--r-control) var(--r-control) 0;
  padding:16px 20px;font-size:15px;color:var(--ink-soft);}

.status{display:none;}
.status.is-on{display:block;}
.spinner{width:34px;height:34px;border-radius:50%;border:3px solid var(--line);border-top-color:var(--petrol);
  animation:spin 800ms linear infinite;margin-bottom:22px;}
@keyframes spin{to{transform:rotate(360deg);}}
.done-mark{width:54px;height:54px;border-radius:50%;background:var(--sage-light);color:#3F6A49;
  display:flex;align-items:center;justify-content:center;margin-bottom:22px;}

/* ---------- Footer ---------- */
.site-footer{background:var(--navy-deep);color:var(--on-dark);padding:64px 0 32px;}
.footer-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1.2fr;gap:44px;}
.site-footer h4{color:#fff;font-family:var(--f-body);font-size:15px;font-weight:700;
  letter-spacing:.05em;text-transform:uppercase;margin-bottom:18px;}
.site-footer p{color:var(--on-dark-muted);font-size:15px;}
.site-footer li{padding:6px 0;}
.site-footer a{color:var(--on-dark-muted);font-size:15px;text-decoration:none;transition:color var(--t-btn) var(--ease);}
.site-footer a:hover{color:var(--champagne);}
.footer-bottom{display:flex;flex-wrap:wrap;justify-content:space-between;gap:16px;
  margin-top:44px;padding-top:24px;border-top:1px solid #10304A;}
.footer-bottom p{font-size:14px;}

/* ---------- Responsive ---------- */
@media (max-width:1200px){
  .quotes{grid-template-columns:repeat(2,1fr);}
  .case{grid-template-columns:repeat(2,1fr);}
}
@media (max-width:1080px){
  .pillars__rule span{display:none;}
  .svc-layout{grid-template-columns:minmax(0,290px) minmax(0,1fr);}
  .pillars__grid{grid-template-columns:1fr 1fr;row-gap:32px;}
  .pillar:nth-child(2){border-right:0;margin-right:0;padding-right:0;}
  .footer-grid{grid-template-columns:1fr 1fr;}
  .floor__head,.team,.cov,.hero__inner{gap:36px;}
  .main-nav ul{gap:18px;}
  .main-nav a{font-size:14px;}
}
@media (max-width:980px){
  .hero__inner{grid-template-columns:1fr;gap:34px;}
  .hero__card{max-width:460px;}
}
@media (max-width:920px){
  :root{--section-y:46px;--pad:20px;--gutter:18px;}
  body{font-size:16px;}

  .header-bar{height:68px;gap:14px;}
  .logo{width:152px;height:44px;}
  .main-nav,.header-actions{display:none;}
  .nav-toggle{display:inline-flex;align-items:center;gap:9px;margin-left:auto;min-height:44px;padding:9px 15px;
    background:transparent;border:1px solid var(--navy-line);border-radius:var(--r-control);
    color:#fff;font-weight:700;font-size:15px;cursor:pointer;
    transition:background-color var(--t-btn) var(--ease),border-color var(--t-btn) var(--ease);}
  .nav-toggle:hover{background:#16344E;}
  .mobile-nav{display:block;position:absolute;left:0;right:0;top:100%;background:var(--navy);
    border-top:1px solid var(--navy-line);box-shadow:var(--shadow-float);}
  .mobile-nav .collapse__inner{padding:14px var(--pad) 26px;max-width:none;}
  .mobile-nav a{display:block;padding:13px 0;border-bottom:1px solid #16344E;
    color:var(--on-dark);font-weight:600;text-decoration:none;}
  .mobile-nav .btn{width:100%;margin-top:12px;border-bottom:0;}

  .hero{min-height:0;}
  .hero__inner{padding-top:40px;padding-bottom:60px;}
  .hero__veil{background:linear-gradient(180deg,rgba(7,27,46,.92) 0%,rgba(7,27,46,.86) 55%,rgba(7,27,46,.9) 100%);}
  .hero__card{max-width:none;padding:20px 22px 8px;}
  .hero__nav{bottom:14px;}

  .sec-head{grid-template-columns:1fr;gap:16px;margin-bottom:26px;}
  .svc-layout{grid-template-columns:1fr;}
  .rail,.panel{display:none;}
  .accordion{display:block;background:var(--white);border:1px solid var(--line);
    border-radius:var(--r-panel);overflow:hidden;}
  .acc-item{border-bottom:1px solid var(--line);}
  .acc-item:last-child{border-bottom:0;}
  .acc-btn{width:100%;display:flex;gap:12px;align-items:flex-start;text-align:left;
    background:transparent;border:0;padding:17px;cursor:pointer;color:var(--ink);
    transition:background-color var(--t-state) var(--ease),color var(--t-state) var(--ease);}
  .acc-btn .rail__name{font-size:21px;}
  .acc-btn[aria-expanded="true"]{background:var(--petrol-dark);color:#fff;}
  .acc-btn[aria-expanded="true"] .rail__name{color:#fff;}
  .acc-btn[aria-expanded="true"] .rail__sum{color:#C6DEE7;}
  .acc-btn[aria-expanded="true"] .rail__dot{border-color:var(--champagne);background:var(--champagne);}
  .acc-btn[aria-expanded="true"] .rail__state{display:block;}
  .acc-body{padding:0 17px 22px;max-width:none;}
  .acc-photo{height:240px;border-radius:var(--r-panel);margin:16px 0 18px;background-size:cover;}
  .acc-body h4{margin:20px 0 10px;}
  .acc-body .btn{width:100%;margin-top:18px;}

  .plan__grid,.floor__head,.team,.cov,.quote-grid,.impact{grid-template-columns:1fr;gap:30px;}
  .compare{aspect-ratio:2/1;}
  .case{grid-template-columns:1fr;gap:14px;}
  .pillars__grid{grid-template-columns:1fr;row-gap:0;}
  .pillar{border-right:0;margin-right:0;padding:18px 0;border-bottom:1px solid var(--line);}
  .pillar:last-child{border-bottom:0;padding-bottom:0;}
  .process li{flex:1 1 100%;border-right:0;border-bottom:1px solid var(--line);}
  .process li:last-child{border-bottom:0;}
  .team__photo{height:280px;background-position:center 36%;}
  .quotes{grid-template-columns:1fr;}
  .impact{padding:26px;margin-top:34px;}
  .card{padding:26px 20px;}
  .two{grid-template-columns:1fr;}
  .review-row{flex-wrap:wrap;}
  .review-row dt{flex:0 0 100%;}
  .form-nav .btn{flex:1 1 auto;}
  .form-nav .muted{flex:0 0 100%;margin-left:0;}
  .step-pill{font-size:12px;padding:8px 10px;}
  .step-pill em{width:19px;height:19px;font-size:11px;}
  .footer-grid{grid-template-columns:1fr;gap:28px;}
  .cov__facts dd{text-align:left;}
}
@media (max-width:380px){
  .logo{width:134px;height:39px;}
}

/* ---------- Hero 100% viewport (desktop) ---------- */
@media (min-width:921px){
  .hero{min-height:calc(100vh - var(--header-h));min-height:calc(100dvh - var(--header-h));}
}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto;}
  *,*::before,*::after{transition-duration:1ms !important;animation-duration:1ms !important;animation-iteration-count:1 !important;}
  .collapse{transition:none !important;}
}

/* ---------- Utilitarios ex-inline ----------
   Substituem os antigos atributos style="" estaticos do HTML e do JS.
   !important reproduz a precedencia do inline: vence qualquer regra
   nao-important das camadas abaixo. Estado controlado pelo JS
   (--pos do #compare, width do #progressBar, fundo do .acc-photo) segue inline. */
.u-relative{position:relative !important;}
.u-mt-10{margin-top:10px !important;}
.u-mt-12{margin-top:12px !important;}
.u-mb-8{margin-bottom:8px !important;}
.u-mb-10{margin-bottom:10px !important;}
.u-mb-18{margin-bottom:18px !important;}
.u-mb-22{margin-bottom:22px !important;}
.u-m-0{margin:0 !important;}
.u-m-5-0-0{margin:5px 0 0 !important;}
.u-actions-row{display:flex !important;flex-wrap:wrap !important;gap:12px !important;margin-top:24px !important;}
.u-left-0{left:0 !important;}
.u-left-25{left:25% !important;}
.u-left-50{left:50% !important;}
.u-left-75{left:75% !important;}
.u-label-sage{color:#4F7A57 !important;}
.u-optional{font-weight:500 !important;color:var(--ink-muted) !important;}
.u-ink-soft{color:var(--ink-soft) !important;}

/* =========================================================================
   ART DIRECTION — "Superficie de Precisao / Luz Rasante"
   Camada localizada e reversivel. Remova data-art-direction="surface-plane"
   do <html> para voltar a aparencia original. Nenhuma regra acima foi tocada.
   ========================================================================= */
html[data-art-direction="surface-plane"]{
  --sp-edge:inset 0 1px 0 rgba(255,255,255,.72);
  --sp-contact:0 1px 0 rgba(7,27,46,.11),0 12px 20px -16px rgba(7,27,46,.34);
  --sp-contact-lift:0 1px 0 rgba(7,27,46,.12),0 22px 34px -26px rgba(7,27,46,.44);
  --sp-groove:inset 0 1px 2px rgba(7,27,46,.16);
  --sp-dark-edge:inset 0 1px 0 rgba(200,169,106,.28);
  --sp-dark-foot:inset 0 -1px 0 rgba(0,0,0,.42);
  --sp-seat:inset 0 1px 0 rgba(255,255,255,.12),inset 0 -1px 0 rgba(0,0,0,.38),inset 20px 0 26px -24px rgba(0,0,0,.55);
  --sp-petrol-plate:linear-gradient(180deg,#14596F 0%,#0E4557 100%);
}

/* ---- Header: plano superior com filete de inspecao ---- */
[data-art-direction="surface-plane"] .site-header{
  box-shadow:inset 0 -1px 0 rgba(200,169,106,.30),0 14px 22px -20px rgba(7,27,46,.85);}

/* ---- Botoes: placas com aresta e contato curto ---- */
[data-art-direction="surface-plane"] .btn{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.16),0 1px 0 rgba(7,27,46,.20),0 8px 14px -11px rgba(7,27,46,.42);
  transition:background-color var(--t-btn) var(--ease),border-color var(--t-btn) var(--ease),
    color var(--t-btn) var(--ease),box-shadow var(--t-btn) var(--ease),transform 90ms var(--ease);}
[data-art-direction="surface-plane"] .btn--gold{background:linear-gradient(180deg,#D6BA80,#C8A96A);}
[data-art-direction="surface-plane"] .btn--gold:hover{background:linear-gradient(180deg,#E0C68F,#D5B97E);}
[data-art-direction="surface-plane"] .btn--ghost{box-shadow:var(--sp-edge),0 1px 0 rgba(7,27,46,.10);}
[data-art-direction="surface-plane"] .btn--onDark{box-shadow:inset 0 1px 0 rgba(255,255,255,.14);}
[data-art-direction="surface-plane"] .btn:active{transform:translateY(1px);
  box-shadow:inset 0 1px 3px rgba(7,27,46,.38);}

/* ---- Hero: uma unica composicao espacial atras do conteudo ---- */
[data-art-direction="surface-plane"] .hero{isolation:isolate;}
[data-art-direction="surface-plane"] .hero__inner{z-index:2;}
[data-art-direction="surface-plane"] .hero::before,
[data-art-direction="surface-plane"] .hero::after{
  content:"";position:absolute;pointer-events:none;z-index:1;}
/* plano de superficie obliquo, revelado por luz lateral baixa */
[data-art-direction="surface-plane"] .hero::before{
  left:-16%;right:-16%;bottom:-8%;height:64%;
  transform-origin:50% 100%;
  transform:perspective(900px) rotateX(67deg);
  background:
    repeating-linear-gradient(90deg,rgba(200,169,106,.20) 0 1px,rgba(0,0,0,0) 1px 152px),
    repeating-linear-gradient(0deg,rgba(232,240,246,.09) 0 1px,rgba(0,0,0,0) 1px 104px),
    linear-gradient(97deg,rgba(232,240,246,.13) 0%,rgba(232,240,246,.05) 30%,rgba(7,27,46,0) 66%);
  -webkit-mask-image:linear-gradient(to top,#000 0%,rgba(0,0,0,.6) 46%,rgba(0,0,0,0) 94%);
  mask-image:linear-gradient(to top,#000 0%,rgba(0,0,0,.6) 46%,rgba(0,0,0,0) 94%);}
/* junta entre o plano vertical e o plano tratado */
[data-art-direction="surface-plane"] .hero::after{
  left:0;right:0;bottom:0.5%;height:2px;
  background:
    linear-gradient(90deg,rgba(200,169,106,0) 0%,rgba(200,169,106,.34) 16%,
      rgba(200,169,106,.44) 44%,rgba(200,169,106,.06) 78%,rgba(200,169,106,0) 100%);
  box-shadow:0 1px 0 rgba(7,27,46,.5);}

/* placa operacional opaca */
[data-art-direction="surface-plane"] .hero__card{
  position:relative;
  background:linear-gradient(180deg,#123350 0%,#0C2540 54%,#092039 100%);
  border-color:#24486A;
  transition:transform 200ms var(--ease),box-shadow 200ms var(--ease);}
[data-art-direction="surface-plane"] .cred__ico{
  background:linear-gradient(180deg,#1B3C58,#13304A);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.10),0 1px 0 rgba(0,0,0,.38);}

/* ---- Servicos: modulo tecnico de baixa altura ---- */
[data-art-direction="surface-plane"] .rail{
  background:linear-gradient(180deg,#fff 0%,#FAF7F2 100%);
  box-shadow:var(--sp-edge),0 1px 0 rgba(7,27,46,.12),0 18px 28px -22px rgba(7,27,46,.4);}
[data-art-direction="surface-plane"] .rail__marker{
  background:linear-gradient(180deg,#E3C68C,#C8A96A 42%,#A8873F);
  box-shadow:1px 0 0 rgba(7,27,46,.30);}
[data-art-direction="surface-plane"] .rail__opt{
  transition:background-color var(--t-state) var(--ease),color var(--t-state) var(--ease),
    box-shadow var(--t-state) var(--ease);}
[data-art-direction="surface-plane"] .rail__opt:hover{
  background:linear-gradient(180deg,#FFFDF8,#F2EDE4);
  box-shadow:inset 0 -1px 0 rgba(7,27,46,.07);}
[data-art-direction="surface-plane"] .rail__opt[aria-checked="true"]{
  background:var(--sp-petrol-plate);box-shadow:var(--sp-seat);}
[data-art-direction="surface-plane"] .rail__dot{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.5);}

[data-art-direction="surface-plane"] .panel{
  background:linear-gradient(180deg,#fff,#FCFAF6);
  box-shadow:var(--sp-edge),var(--sp-contact-lift);}
[data-art-direction="surface-plane"] .panel__photo{
  isolation:isolate;background:#0B2237;}
[data-art-direction="surface-plane"] .panel__photo::after{
  content:"";position:absolute;inset:0;z-index:2;pointer-events:none;
  background:linear-gradient(180deg,rgba(7,27,46,.12) 0%,rgba(7,27,46,0) 34%);
  box-shadow:
    inset 0 0 0 1px rgba(7,27,46,.22),
    inset 0 16px 24px -16px rgba(7,27,46,.62),
    inset 0 -18px 26px -20px rgba(7,27,46,.48);}
[data-art-direction="surface-plane"] .panel__kind{
  z-index:3;box-shadow:inset 0 1px 0 rgba(200,169,106,.34),0 2px 0 rgba(0,0,0,.3);}
[data-art-direction="surface-plane"] .panel__cols,
[data-art-direction="surface-plane"] .panel__foot{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9);}

/* ---- Planejamento: tabuleiro operacional contido ---- */
[data-art-direction="surface-plane"] .chip{
  background:linear-gradient(180deg,#fff,#F6F2EB);
  box-shadow:var(--sp-edge),0 1px 0 rgba(7,27,46,.12);}
[data-art-direction="surface-plane"] .chip:hover{
  border-color:var(--petrol);box-shadow:var(--sp-edge),0 1px 0 rgba(31,111,139,.32);}
[data-art-direction="surface-plane"] .chip[aria-checked="true"],
[data-art-direction="surface-plane"] .chip[aria-pressed="true"]{
  background:var(--sp-petrol-plate);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.12),inset 0 -1px 0 rgba(0,0,0,.36),
    inset 0 4px 8px -5px rgba(0,0,0,.5);}
[data-art-direction="surface-plane"] .plan__note{
  background:linear-gradient(90deg,rgba(200,169,106,.10),rgba(200,169,106,0) 48%);}

/* ---- Floor care: amostra fisica de material ---- */
[data-art-direction="surface-plane"] .compare{
  isolation:isolate;background:#071B2E;
  box-shadow:0 1px 0 rgba(255,255,255,.55),0 2px 0 rgba(7,27,46,.20),
    0 32px 42px -30px rgba(7,27,46,.55);}
[data-art-direction="surface-plane"] .compare::before{
  content:"";position:absolute;inset:0;z-index:3;pointer-events:none;border-radius:inherit;
  box-shadow:
    inset 0 0 0 1px rgba(255,253,248,.26),
    inset 0 0 0 7px rgba(7,27,46,.34),
    inset 0 0 0 8px rgba(200,169,106,.16),
    inset 0 18px 28px -18px rgba(7,27,46,.62),
    inset 0 -18px 28px -20px rgba(7,27,46,.46);}
/* leitura de varredura presa ao controle existente (--pos) */
[data-art-direction="surface-plane"] .compare::after{
  content:"";position:absolute;top:0;bottom:0;z-index:2;pointer-events:none;
  left:var(--pos,50%);width:190px;transform:translateX(-50%);
  background:linear-gradient(90deg,rgba(200,169,106,0) 0%,rgba(200,169,106,.10) 36%,
    rgba(255,253,248,.17) 50%,rgba(200,169,106,.10) 64%,rgba(200,169,106,0) 100%);}
[data-art-direction="surface-plane"] .compare__tag{
  z-index:5;box-shadow:inset 0 1px 0 rgba(200,169,106,.30),0 2px 0 rgba(0,0,0,.32);}
[data-art-direction="surface-plane"] .compare__bar{
  z-index:5;box-shadow:0 0 0 1px rgba(7,27,46,.55);}
[data-art-direction="surface-plane"] .compare__knob{
  z-index:6;background:linear-gradient(180deg,#E3C68C 0%,#C8A96A 48%,#A9883F 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.55),inset 0 -1px 0 rgba(0,0,0,.30),
    0 2px 0 rgba(7,27,46,.38),0 14px 20px -12px rgba(7,27,46,.6);}
[data-art-direction="surface-plane"] .compare__range{z-index:7;}
[data-art-direction="surface-plane"] .case{box-shadow:inset 0 1px 0 rgba(255,255,255,.9);}

/* ---- Demais secoes: textura e moldura apenas como suporte ---- */
[data-art-direction="surface-plane"] .bg-sand{
  background-color:var(--sand);
  background-image:repeating-linear-gradient(90deg,rgba(7,27,46,.028) 0 1px,rgba(0,0,0,0) 1px 116px);}
[data-art-direction="surface-plane"] .bg-ivory{
  background-color:var(--ivory);
  background-image:repeating-linear-gradient(0deg,rgba(7,27,46,.022) 0 1px,rgba(0,0,0,0) 1px 100px);}
[data-art-direction="surface-plane"] .process{
  background:linear-gradient(180deg,#fff,#FAF7F2);
  box-shadow:var(--sp-edge),0 1px 0 rgba(7,27,46,.12),0 16px 24px -22px rgba(7,27,46,.35);}
[data-art-direction="surface-plane"] .process li{box-shadow:inset -1px 0 0 rgba(255,255,255,.75);}
[data-art-direction="surface-plane"] .team__photo{
  box-shadow:inset 0 0 0 1px rgba(7,27,46,.16),inset 0 18px 26px -18px rgba(7,27,46,.42),
    0 26px 36px -30px rgba(7,27,46,.42);}
[data-art-direction="surface-plane"] .quote{
  background:linear-gradient(180deg,#fff,#FCFAF6);
  box-shadow:var(--sp-edge),0 1px 0 rgba(7,27,46,.10),0 16px 24px -22px rgba(7,27,46,.32);}
[data-art-direction="surface-plane"] .quote__ini{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.18),0 1px 0 rgba(7,27,46,.26);}
[data-art-direction="surface-plane"] .impact{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.6),0 1px 0 rgba(44,70,54,.14),
    0 24px 34px -30px rgba(44,70,54,.4);}
[data-art-direction="surface-plane"] .ratio{box-shadow:var(--sp-edge),0 1px 0 rgba(44,70,54,.12);}
[data-art-direction="surface-plane"] .serves li{box-shadow:var(--sp-edge),0 1px 0 rgba(7,27,46,.08);}
[data-art-direction="surface-plane"] .faq__icon{box-shadow:var(--sp-edge),0 1px 0 rgba(7,27,46,.10);}
[data-art-direction="surface-plane"] .faq__btn[aria-expanded="true"] .faq__icon{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.14),inset 0 -1px 0 rgba(0,0,0,.32);}
[data-art-direction="surface-plane"] .site-footer{box-shadow:inset 0 1px 0 rgba(200,169,106,.22);}

/* ---- Formulario: placa legivel, campos planos ---- */
[data-art-direction="surface-plane"] .card{
  background:linear-gradient(180deg,#fff,#FCFAF6);
  box-shadow:var(--sp-edge),0 1px 0 rgba(7,27,46,.12),0 26px 38px -30px rgba(7,27,46,.42);}
[data-art-direction="surface-plane"] .aside{
  background:linear-gradient(180deg,#123350,#0B2340);
  box-shadow:var(--sp-dark-edge),var(--sp-dark-foot),0 26px 38px -30px rgba(7,27,46,.6);}
[data-art-direction="surface-plane"] .step-pill{box-shadow:var(--sp-edge),0 1px 0 rgba(7,27,46,.08);}
[data-art-direction="surface-plane"] .step-pill.is-active{
  background:var(--sp-petrol-plate);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.12),inset 0 -1px 0 rgba(0,0,0,.34);}
[data-art-direction="surface-plane"] .step-pill.is-done{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.55),inset 0 -1px 0 rgba(44,70,54,.14);}
[data-art-direction="surface-plane"] .progress{background:#EFEAE2;box-shadow:var(--sp-groove);}
[data-art-direction="surface-plane"] .progress__bar{
  background:linear-gradient(180deg,#2C89A6,#12556B);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.32);}
[data-art-direction="surface-plane"] .field input,
[data-art-direction="surface-plane"] .field select,
[data-art-direction="surface-plane"] .field textarea{
  box-shadow:inset 0 1px 0 rgba(7,27,46,.07);}
[data-art-direction="surface-plane"] .notice{box-shadow:var(--sp-groove);}
[data-art-direction="surface-plane"] .done-mark{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.7),0 1px 0 rgba(44,70,54,.18);}

/* ---- Mobile (<=920px): profundidade reduzida, leitura em primeiro lugar ---- */
@media (max-width:920px){
  [data-art-direction="surface-plane"] .hero::before,
  [data-art-direction="surface-plane"] .hero::after{display:none;}
  [data-art-direction="surface-plane"] .hero__card{
    box-shadow:var(--sp-dark-edge),var(--sp-dark-foot),0 1px 0 #061626;}
  [data-art-direction="surface-plane"] .accordion{
    background:linear-gradient(180deg,#fff,#FAF7F2);box-shadow:var(--sp-contact);}
  [data-art-direction="surface-plane"] .acc-btn[aria-expanded="true"]{
    background:var(--sp-petrol-plate);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.12),inset 0 -1px 0 rgba(0,0,0,.34);}
  [data-art-direction="surface-plane"] .acc-photo{
    box-shadow:inset 0 0 0 1px rgba(7,27,46,.18),inset 0 12px 20px -14px rgba(7,27,46,.5);}
  [data-art-direction="surface-plane"] .compare{box-shadow:0 1px 0 rgba(7,27,46,.14);}
  [data-art-direction="surface-plane"] .compare::before{
    box-shadow:inset 0 0 0 1px rgba(255,253,248,.22),inset 0 0 0 4px rgba(7,27,46,.28),
      inset 0 12px 20px -14px rgba(7,27,46,.5);}
  [data-art-direction="surface-plane"] .compare::after{width:120px;}
  [data-art-direction="surface-plane"] .card,
  [data-art-direction="surface-plane"] .panel,
  [data-art-direction="surface-plane"] .quote,
  [data-art-direction="surface-plane"] .process,
  [data-art-direction="surface-plane"] .rail{box-shadow:var(--sp-edge),0 1px 0 rgba(7,27,46,.12);}
  [data-art-direction="surface-plane"] .team__photo{
    box-shadow:inset 0 0 0 1px rgba(7,27,46,.16),inset 0 12px 20px -14px rgba(7,27,46,.4);}
}

@media (prefers-reduced-motion:reduce){
  [data-art-direction="surface-plane"] .hero__card{transform:none !important;}
}

/* =========================================================================
   COREOGRAFIA DE SUPERFICIE — movimento da direcao "Luz Rasante"
   Narrativa: diagnosticar -> tratar -> comprovar -> contratar.
   Cinco gestos, sem overshoot, bounce ou loop:
     calibrar  varredura tipografica + exposicao da imagem (so em portas narrativas)
     assentar  placa desce e a sombra encurta ate o contato
     tracar    linha ou check existente desenhado da esquerda
     percorrer sequencia firme da esquerda para a direita
     confirmar resposta curta a uma mudanca de estado
   .sp-motion e aplicada pelo script apenas em desktop (>=921px), sem
   reducao de movimento e com IntersectionObserver; sem ela nada fica oculto.
   Entradas usam fill "backwards": ao terminar, o elemento volta ao proprio estilo.
   Mudanca estrutural fora desta camada: setas do hero removidas e dots
   reposicionados na base central (.hero__nav / .dot).
   ========================================================================= */
html[data-art-direction="surface-plane"]{
  --m-confirm:180ms;
  --m-state:280ms;
  --m-seat:460ms;
  --m-calibrate:560ms;
  --m-image:900ms;
  --ease-settle:cubic-bezier(.16,.84,.24,1);
  --ease-machine:cubic-bezier(.66,0,.24,1);
  --ease-exit:cubic-bezier(.4,0,1,1);
}

@keyframes sp-calibrate{
  from{clip-path:inset(-.2em 100% -.3em -.2em);transform:translate3d(-.14em,0,0);}
  to{clip-path:inset(-.2em -.2em -.3em -.2em);transform:none;}
}
@keyframes sp-rise{from{opacity:0;transform:translate3d(0,var(--sp-rise,8px),0);}}
@keyframes sp-track{from{opacity:0;transform:translate3d(var(--sp-track,-8px),0,0);}}
@keyframes sp-fade{from{opacity:0;}}
@keyframes sp-seat{
  from{opacity:0;transform:translate3d(0,12px,0);
    box-shadow:inset 0 1px 0 rgba(255,255,255,0),0 1px 0 rgba(7,27,46,0),0 38px 46px -30px rgba(7,27,46,.3);}
}
@keyframes sp-trace{from{transform:scaleX(0);}}
@keyframes sp-draw{from{stroke-dashoffset:24;}}
@keyframes sp-settle{from{filter:brightness(.8) saturate(.9);transform:scale(1.014);}}
@keyframes sp-expose{from{filter:brightness(.8) saturate(.9);}}
@keyframes sp-seam{from{background-position:-30% 0,0 0;}to{background-position:130% 0,0 0;}}
@keyframes sp-sweep{from{background-size:0% 100%;opacity:.45;}}
@keyframes sp-mark{from{transform:scale(.4);}}
@keyframes sp-stamp{from{opacity:0;transform:scale(.88);}}

/* ---- Estados tateis (qualquer tela): respondem a pessoa, nunca sozinhos ---- */
[data-art-direction="surface-plane"] .chip{
  transition:background-color var(--t-btn) var(--ease),border-color var(--t-btn) var(--ease),
    color var(--t-btn) var(--ease),box-shadow var(--t-btn) var(--ease),transform 90ms var(--ease);}
[data-art-direction="surface-plane"] .chip:active{transform:translateY(1px);}
[data-art-direction="surface-plane"] .step-pill,
[data-art-direction="surface-plane"] .step-pill em{
  transition:background-color 240ms var(--ease),color 240ms var(--ease),box-shadow 240ms var(--ease);}

/* Comparador: inspecao de acabamento. Luz e leitura acompanham a acao;
   nenhum filtro toca as fotos antes/depois e nada se move sozinho. */
[data-art-direction="surface-plane"] .compare::after{
  opacity:.7;transition:opacity 220ms var(--ease),width 220ms var(--ease);}
[data-art-direction="surface-plane"] .compare.is-inspecting::after,
[data-art-direction="surface-plane"] .compare.is-focused::after{opacity:1;width:150px;}
@media (hover:hover) and (min-width:921px){
  [data-art-direction="surface-plane"] .compare:hover::after{opacity:1;width:150px;}
}
[data-art-direction="surface-plane"] .compare__knob{
  transition:transform 120ms var(--ease),box-shadow 120ms var(--ease);}
[data-art-direction="surface-plane"] .compare.is-inspecting .compare__knob{
  transform:translate(-50%,-50%) scale(.96);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.5),inset 0 -1px 0 rgba(0,0,0,.3),
    0 1px 0 rgba(7,27,46,.38),0 6px 10px -6px rgba(7,27,46,.6);}
[data-art-direction="surface-plane"] .compare__tag{transition:opacity 160ms var(--ease);}
[data-art-direction="surface-plane"] .compare.is-before-covered .compare__tag--a,
[data-art-direction="surface-plane"] .compare.is-after-covered .compare__tag--b{opacity:.28;}
@media (min-width:921px){
  [data-art-direction="surface-plane"] .compare::before{transition:box-shadow 260ms var(--ease);}
  [data-art-direction="surface-plane"] .compare.is-inspecting::before{
    box-shadow:
      inset 0 0 0 1px rgba(255,253,248,.26),
      inset 0 0 0 7px rgba(7,27,46,.34),
      inset 0 0 0 8px rgba(200,169,106,.16),
      inset 0 18px 28px -18px rgba(7,27,46,.36),
      inset 0 -18px 28px -20px rgba(7,27,46,.28);}
}
@media (max-width:920px){
  [data-art-direction="surface-plane"] .compare.is-inspecting::after,
  [data-art-direction="surface-plane"] .compare.is-focused::after{width:100px;}
}

/* ---- Espera dos capitulos: entradas pausadas ate a secao entrar em tela ---- */
/* !important: o shorthand "animation" das regras abaixo redefiniria o play-state */
.sp-motion main > section:not(.hero):not(.is-in) *{animation-play-state:paused !important;}

/* ---- 1. Diagnosticar — Hero (intensidade 5) ---- */
.sp-motion .hero__slide{transition:opacity var(--m-calibrate) var(--ease);}
.sp-motion .hero__slide.is-settling{animation:sp-settle var(--m-image) var(--ease-settle) backwards;}
.sp-motion .hero__copy.is-swapping{opacity:1;}
.sp-motion .hero__copy.is-swapping > :is(.hero__eyebrow,h1,.hero__lead){
  opacity:0;transform:translate3d(0,-4px,0);
  transition:opacity 170ms var(--ease-exit),transform 170ms var(--ease-exit);}
.sp-motion .hero__copy.is-entering .hero__eyebrow{
  animation:sp-rise 380ms var(--ease-settle) backwards;--sp-rise:6px;}
.sp-motion .hero__copy.is-entering h1{
  animation:sp-calibrate var(--m-calibrate) var(--ease-settle) 60ms backwards;}
.sp-motion .hero__copy.is-entering .hero__lead{
  animation:sp-rise 440ms var(--ease-settle) 150ms backwards;--sp-rise:6px;}
/* a placa de credenciais e a ancora: nao se move, so confirma a cena */
.sp-motion .hero__card::before{transform-origin:0 50%;}
.sp-motion .hero__card.is-calibrating::before{animation:sp-trace 560ms var(--ease-machine) 80ms backwards;}
.sp-motion .hero__card.is-calibrating .hero__count b{
  animation:sp-rise var(--m-state) var(--ease-settle) backwards;--sp-rise:.45em;}
.sp-motion .hero__card.is-calibrating .hero__count span{
  animation:sp-rise 340ms var(--ease-settle) 60ms backwards;--sp-rise:.45em;}
/* um unico passe de luz rasante pela junta entre os planos */
.sp-motion .hero::after{
  background:
    linear-gradient(90deg,rgba(255,244,220,0) 0%,rgba(255,244,220,.78) 50%,rgba(255,244,220,0) 100%) no-repeat,
    linear-gradient(90deg,rgba(200,169,106,0) 0%,rgba(200,169,106,.34) 16%,
      rgba(200,169,106,.44) 44%,rgba(200,169,106,.06) 78%,rgba(200,169,106,0) 100%);
  background-size:22% 100%,100% 100%;
  background-position:-30% 0,0 0;}
.sp-motion .hero.is-calibrating::after{animation:sp-seam 1100ms var(--ease-machine) 120ms backwards;}

/* ---- 2. Tratar — Servicos: selecionar (intensidade 4) ---- */
.sp-motion #services .sec-head .label{animation:sp-fade 380ms var(--ease-settle) backwards;}
.sp-motion #svcTitle{animation:sp-calibrate 640ms var(--ease-settle) 60ms backwards;}
.sp-motion #services .sec-head .lead{animation:sp-fade 460ms var(--ease-settle) 200ms backwards;}
.sp-motion #services .rail{animation:sp-seat 560ms var(--ease-settle) 160ms backwards;}
.sp-motion #services .panel{animation:sp-seat 600ms var(--ease-settle) 240ms backwards;}

.sp-motion .rail__marker{
  transition:transform 380ms var(--ease-machine),height 380ms var(--ease-machine),opacity 160ms var(--ease);}
.sp-motion .rail__opt[aria-checked="true"] .rail__state{
  animation:sp-rise 260ms var(--ease-settle) 240ms backwards;--sp-rise:4px;}
.sp-motion .panel__layer{transition:opacity 420ms var(--ease);}
.sp-motion .panel__layer.is-settling{animation:sp-expose 720ms var(--ease-settle) backwards;}
.sp-motion .panel.is-calibrating #panelKind{
  animation:sp-rise var(--m-state) var(--ease-settle) 60ms backwards;--sp-rise:.5em;}
.sp-motion .panel.is-calibrating #panelName{
  animation:sp-calibrate 480ms var(--ease-settle) 40ms backwards;}
.sp-motion .panel.is-calibrating #panelDesc{
  animation:sp-rise 360ms var(--ease-settle) 120ms backwards;--sp-rise:5px;}
.sp-motion .panel.is-calibrating #panelIncl li{
  animation:sp-rise 320ms var(--ease-settle) 170ms backwards;--sp-rise:4px;}
.sp-motion .panel.is-calibrating #panelIncl li:nth-child(2){animation-delay:205ms;}
.sp-motion .panel.is-calibrating #panelIncl li:nth-child(3){animation-delay:240ms;}
.sp-motion .panel.is-calibrating #panelIncl li:nth-child(4){animation-delay:275ms;}
.sp-motion .panel.is-calibrating #panelIncl li:nth-child(5){animation-delay:310ms;}
.sp-motion .panel.is-calibrating #panelMeta{animation:sp-fade 360ms var(--ease-settle) 220ms backwards;}

/* ---- 2. Tratar — Planejamento: ajustar e confirmar (intensidade 3) ---- */
.sp-motion #planning .plan__head > *{animation:sp-rise 440ms var(--ease-settle) backwards;--sp-rise:8px;}
.sp-motion #planning .plan__head > :nth-child(2){animation-delay:60ms;}
.sp-motion #planning .plan__head > :nth-child(3){animation-delay:120ms;}
.sp-motion #planning .plan__block h3{animation:sp-fade 360ms var(--ease-settle) 160ms backwards;}
.sp-motion #planning .chip{animation:sp-track 340ms var(--ease-settle) 220ms backwards;--sp-track:-8px;}
.sp-motion #planning .chip:nth-child(2){animation-delay:255ms;}
.sp-motion #planning .chip:nth-child(3){animation-delay:290ms;}
.sp-motion #planning .chip:nth-child(4){animation-delay:325ms;}
.sp-motion #planning .chip:nth-child(5){animation-delay:360ms;}
.sp-motion #planning .chip:nth-child(6){animation-delay:395ms;}
.sp-motion .chip[aria-checked="true"] .chip__mark,
.sp-motion .chip[aria-pressed="true"] .chip__mark{animation:sp-mark 220ms var(--ease-settle) backwards;}
.sp-motion .plan__note{background-size:100% 100%;background-repeat:no-repeat;}
.sp-motion #planning .plan__note.is-confirmed{animation:sp-sweep 560ms var(--ease-settle) backwards;}

/* ---- 3. Comprovar — Floor care: inspecionar (intensidade 3) ---- */
.sp-motion #floorcare .floor__head .label{animation:sp-fade 380ms var(--ease-settle) backwards;}
.sp-motion #floorTitle{animation:sp-calibrate 640ms var(--ease-settle) 60ms backwards;}
.sp-motion #floorcare .floor__list li{animation:sp-fade 320ms var(--ease-settle) 180ms backwards;}
.sp-motion #floorcare .floor__list path{
  stroke-dasharray:24;animation:sp-draw 420ms var(--ease-settle) 240ms backwards;}
.sp-motion #floorcare .floor__list li:nth-child(2){animation-delay:260ms;}
.sp-motion #floorcare .floor__list li:nth-child(3){animation-delay:340ms;}
.sp-motion #floorcare .floor__list li:nth-child(4){animation-delay:420ms;}
.sp-motion #floorcare .floor__list li:nth-child(5){animation-delay:500ms;}
.sp-motion #floorcare .floor__list li:nth-child(2) path{animation-delay:320ms;}
.sp-motion #floorcare .floor__list li:nth-child(3) path{animation-delay:400ms;}
.sp-motion #floorcare .floor__list li:nth-child(4) path{animation-delay:480ms;}
.sp-motion #floorcare .floor__list li:nth-child(5) path{animation-delay:560ms;}

/* ---- 3. Comprovar — Metodo (intensidade 2) ---- */
.sp-motion #approach .sec-head .label{animation:sp-fade 380ms var(--ease-settle) backwards;}
.sp-motion #approachTitle{animation:sp-rise 460ms var(--ease-settle) 60ms backwards;--sp-rise:8px;}
.sp-motion #approach .sec-head .lead{animation:sp-fade 460ms var(--ease-settle) 160ms backwards;}
.sp-motion .pillars__rule{transform-origin:0 50%;animation:sp-trace 760ms var(--ease-machine) 120ms backwards;}
.sp-motion .pillars__rule span{animation:sp-fade 220ms linear 120ms backwards;}
.sp-motion .pillars__rule span:nth-child(2){animation-delay:440ms;}
.sp-motion .pillars__rule span:nth-child(3){animation-delay:540ms;}
.sp-motion .pillars__rule span:nth-child(4){animation-delay:620ms;}
.sp-motion .pillar{animation:sp-rise 480ms var(--ease-settle) 300ms backwards;--sp-rise:10px;}
.sp-motion .pillar:nth-child(2){animation-delay:410ms;}
.sp-motion .pillar:nth-child(3){animation-delay:520ms;}
.sp-motion .pillar:nth-child(4){animation-delay:630ms;}
.sp-motion .process li{animation:sp-track 360ms var(--ease-settle) 720ms backwards;--sp-track:-10px;}
.sp-motion .process li:nth-child(2){animation-delay:790ms;}
.sp-motion .process li:nth-child(3){animation-delay:860ms;}
.sp-motion .process li:nth-child(4){animation-delay:930ms;}
.sp-motion .process li:nth-child(5){animation-delay:1000ms;}

/* ---- 3. Comprovar — Equipe (intensidade 2): a foto real nao se move ---- */
.sp-motion #team .team > div:last-child > :is(.label,.h2,.lead){animation:sp-fade 440ms var(--ease-settle) backwards;}
.sp-motion #team .team > div:last-child > .h2{animation-delay:60ms;}
.sp-motion #team .team > div:last-child > .lead{animation-delay:140ms;}
.sp-motion #team .trust li{animation:sp-rise 400ms var(--ease-settle) 220ms backwards;--sp-rise:6px;}
.sp-motion #team .trust li:nth-child(2){animation-delay:300ms;}
.sp-motion #team .trust li:nth-child(3){animation-delay:380ms;}

/* ---- 3. Comprovar — Prova social e impacto (intensidade 2) ---- */
.sp-motion #impact .quote{animation:sp-seat 520ms var(--ease-settle) backwards;}
.sp-motion #impact .quote:nth-child(2){animation-delay:80ms;}
.sp-motion #impact .quote:nth-child(3){animation-delay:160ms;}
.sp-motion #impact .quote:nth-child(4){animation-delay:240ms;}
.sp-motion #impact .impact{animation:sp-seat 560ms var(--ease-settle) 360ms backwards;}

/* ---- 4. Contratar — Cobertura e FAQ (intensidade 1): so opacidade ---- */
.sp-motion #coverage .cov > div:first-child > :is(.label,.h2,.lead){animation:sp-fade 420ms var(--ease-settle) backwards;}
.sp-motion .cov__facts > div{animation:sp-fade 320ms var(--ease-settle) 140ms backwards;}
.sp-motion .cov__facts > div:nth-child(2){animation-delay:190ms;}
.sp-motion .cov__facts > div:nth-child(3){animation-delay:240ms;}
.sp-motion .cov__facts > div:nth-child(4){animation-delay:290ms;}
.sp-motion .serves li{animation:sp-fade 300ms var(--ease-settle) 360ms backwards;}
.sp-motion #faq > :is(.label,.h2){animation:sp-fade 420ms var(--ease-settle) 80ms backwards;}
.sp-motion .faq .collapse[data-open="1"] .collapse__inner{
  animation:sp-rise var(--m-state) var(--ease-settle) 40ms backwards;--sp-rise:-4px;}

/* ---- 4. Contratar — Orcamento (intensidade 1 + confirmacoes) ---- */
.sp-motion #quote .sec-head .label{animation:sp-fade 360ms var(--ease-settle) backwards;}
.sp-motion #quoteTitle{animation:sp-calibrate 440ms var(--ease-settle) 40ms backwards;}
.sp-motion #quote .sec-head .lead{animation:sp-fade 420ms var(--ease-settle) 140ms backwards;}
.sp-motion #quote .aside{animation:sp-rise 480ms var(--ease-settle) 120ms backwards;--sp-rise:8px;}
.sp-motion #quote .card{animation:sp-seat 520ms var(--ease-settle) 180ms backwards;}
.sp-motion .progress__bar{transition:width var(--m-seat) var(--ease-machine);}
.sp-motion .step.is-entering{animation:sp-track 320ms var(--ease-settle) backwards;--sp-track:14px;}
.sp-motion [data-dir="back"] .step.is-entering{--sp-track:-14px;}
.sp-motion .sum-row dd.is-ticked{animation:sp-rise 300ms var(--ease-settle) backwards;--sp-rise:.45em;}
.sp-motion .field.has-error .err{animation:sp-fade var(--m-confirm) var(--ease-settle) backwards;}
.sp-motion #formDone.is-on .done-mark{animation:sp-stamp 440ms var(--ease-settle) backwards;}
.sp-motion #formDone.is-on .done-mark path{
  stroke-dasharray:24;animation:sp-draw 460ms var(--ease-settle) 180ms backwards;}
.sp-motion #formDone.is-on #doneTitle{animation:sp-fade 360ms var(--ease-settle) 120ms backwards;}

/* ---- Rodape: pausa. Nenhum movimento alem dos hovers existentes. ---- */

/* =========================================================================
   LATAO MINERAL + ASSINATURA EDITORIAL — refinamento da "Luz Rasante"
   Camada localizada e reversivel, como as anteriores. Nenhuma regra acima foi tocada.
   Latao (fosco, acetinado): so onde ha decisao, prioridade, progresso ou precisao.
   --champagne segue como o ouro discreto de filetes, grades, costuras e fundos.
   Serif editorial: hero e aberturas de capitulo com promessa ou visao;
   a sans (Barlow) segue como voz operacional.
   ========================================================================= */
html[data-art-direction="surface-plane"]{
  --brass:#D3AA4C;
  --brass-hi:#DAB35C;
  --brass-deep:#BF9138;
  --f-editorial:'Newsreader',Georgia,'Times New Roman',serif;
}

/* ---- CTAs de orcamento: placa de latao com aresta de contato ---- */
[data-art-direction="surface-plane"] .btn--gold{
  background:linear-gradient(180deg,var(--brass-hi),var(--brass));
  border-color:var(--brass);border-bottom-color:var(--brass-deep);}
[data-art-direction="surface-plane"] .btn--gold:hover{
  background:linear-gradient(180deg,#DFBD6A,var(--brass-hi));
  border-color:var(--brass-hi);border-bottom-color:var(--brass-deep);}

/* ---- Estados ativos e escolhas selecionadas ---- */
[data-art-direction="surface-plane"] .rail__marker{
  background:linear-gradient(180deg,var(--brass-hi),var(--brass) 45%,var(--brass-deep));}
[data-art-direction="surface-plane"] .rail__opt[aria-checked="true"] .rail__dot,
[data-art-direction="surface-plane"] .acc-btn[aria-expanded="true"] .rail__dot{
  border-color:var(--brass);background:var(--brass);}
[data-art-direction="surface-plane"] .rail__state{color:var(--brass-hi);}
[data-art-direction="surface-plane"] .chip[aria-checked="true"] .chip__mark,
[data-art-direction="surface-plane"] .chip[aria-pressed="true"] .chip__mark{
  background:var(--brass);border-color:var(--brass);}

/* ---- Indicadores de leitura ---- */
[data-art-direction="surface-plane"] .step-pill.is-active em{background:var(--brass);}
[data-art-direction="surface-plane"] .dot[aria-current="true"]::before{background:var(--brass);}

/* ---- Hero: microtextos de credibilidade e icones de confianca ---- */
[data-art-direction="surface-plane"] .hero__eyebrow,
[data-art-direction="surface-plane"] .hero__count b,
[data-art-direction="surface-plane"] .cred__ico{color:var(--brass-hi);}

/* ---- Contato no resumo do orcamento ---- */
[data-art-direction="surface-plane"] .aside__contact svg,
[data-art-direction="surface-plane"] .aside__contact a:hover{color:var(--brass-hi);}

/* ---- Comparador: controle principal em latao acetinado, sem reflexo ---- */
[data-art-direction="surface-plane"] .compare__bar{background:var(--brass);}
[data-art-direction="surface-plane"] .compare__knob{
  background:linear-gradient(180deg,var(--brass-hi) 0%,var(--brass) 52%,var(--brass-deep) 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.28),inset 0 -1px 0 rgba(0,0,0,.30),
    0 2px 0 rgba(7,27,46,.38),0 14px 20px -12px rgba(7,27,46,.6);}
[data-art-direction="surface-plane"] .compare.is-inspecting .compare__knob{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.24),inset 0 -1px 0 rgba(0,0,0,.3),
    0 1px 0 rgba(7,27,46,.38),0 6px 10px -6px rgba(7,27,46,.6);}

/* ---- Assinatura editorial: titulos de maior carga narrativa ---- */
[data-art-direction="surface-plane"] :is(#heroTitle,#svcTitle,#planTitle,#floorTitle,#approachTitle,#teamTitle),
[data-art-direction="surface-plane"] .impact h3{
  font-family:var(--f-editorial);font-weight:500;letter-spacing:-.012em;text-wrap:balance;}

/* =========================================================================
   ATELIE OPERACIONAL — composicao cromatica
   Camada localizada e reversivel. Remova data-palette="atelie-operacional"
   do <html> para voltar a "Luz Rasante". Nenhuma regra acima foi tocada.
   Somente cor: nada aqui altera layout, tipografia, movimento ou interacao.
   Papeis:
     marinho    autoridade, estrutura, pausa, comparacao e decisao
     petroleo   operacao: selecao, fluxo, interacao, servico em andamento
     latao      decisao: conversao, avanco, controle prioritario
     champagne  precisao: filetes, costuras, marcadores, acabamento
     sage       cuidado: impacto positivo, sucesso, confirmacao
   Cadencia: hero (tensao) > placas minerais (tratar) > placa escura
   (comprovar o material) > papeis quentes (metodo, equipe, impacto)
   > areia profunda (decidir) > marinho (pausa).
   ========================================================================= */
html[data-palette="atelie-operacional"]{
  --navy:#0E2740;
  --navy-deep:#06172A;
  --navy-raised:#143352;
  --navy-line:#21405C;
  --petrol:#1B6676;
  --petrol-dark:#0F5260;
  --petrol-lite:#86BCC6;
  --brass:#CFA146;
  --brass-hi:#DAB25C;
  --brass-deep:#AE8534;
  --champagne:#C4AA78;
  --champagne-lite:#D9C49A;
  --sage:#86A58A;
  --sage-light:#DFE7D8;
  --sage-ink:#3D6546;
  --sage-lite:#A9C6A6;

  --white:#FFFFFF;
  --paper:#FBF8F2;
  --ivory:#F4EFE6;
  --sand:#ECE4D7;
  --sand-deep:#E8DECF;
  --mineral:#E6E5DF;
  --mineral-soft:#EFEEE9;

  --line:rgba(52,44,32,.15);
  --line-strong:rgba(52,44,32,.30);
  --line-control:#938D85;
  --ink:#0E2740;
  --ink-soft:#3A4D5F;
  --ink-muted:#526477;
  --on-dark:#E9EEF1;
  --on-dark-soft:#C3D1DB;
  --on-dark-muted:#A3B4C2;
  --danger:#8E2F2F;

  --sp-petrol-plate:linear-gradient(180deg,#145E6D 0%,#0D4855 100%);
  --sp-dark-edge:inset 0 1px 0 rgba(196,170,120,.28);
}

/* ---- Estrutura: cabecalho, controles navy e rodape ---- */
[data-palette="atelie-operacional"] .btn--primary:hover{background:#183D5E;border-color:#183D5E;}
[data-palette="atelie-operacional"] .nav-toggle:hover{background:var(--navy-raised);}
[data-palette="atelie-operacional"] .mobile-nav a:not(.btn){border-bottom-color:rgba(233,238,241,.1);}
/* .mobile-nav a (cor on-dark) vencia o .btn--gold: texto claro sobre latao, ~2:1 */
[data-palette="atelie-operacional"] .mobile-nav .btn--gold{color:var(--navy-deep);}
/* idem no rodape: .site-footer a (on-dark-muted / champagne no hover) apagava o texto, ~1:1 */
[data-palette="atelie-operacional"] .site-footer .btn--gold,
[data-palette="atelie-operacional"] .site-footer .btn--gold:hover{color:var(--navy-deep);}
[data-palette="atelie-operacional"] .footer-bottom{border-top-color:rgba(233,238,241,.1);}

/* ---- Hero: tensao maxima. Latao so no CTA; champagne mede e orienta ---- */
[data-palette="atelie-operacional"] .hero__eyebrow,
[data-palette="atelie-operacional"] .hero__count b,
[data-palette="atelie-operacional"] .cred__ico{color:var(--champagne-lite);}
[data-palette="atelie-operacional"] .dot[aria-current="true"]::before{background:var(--champagne-lite);}
[data-palette="atelie-operacional"] .hero__lead{color:var(--on-dark-soft);}
/* veu por multiplicacao: escurece como sombra real, preserva contraste e pele
   da foto (sem filtro, sem tint). So escurece: o contraste do texto so aumenta. */
[data-palette="atelie-operacional"] .hero__veil{
  mix-blend-mode:multiply;
  background:
    linear-gradient(0deg,rgba(6,23,42,.5) 0%,rgba(6,23,42,0) 32%),
    linear-gradient(90deg,rgba(6,23,42,.95) 0%,rgba(6,23,42,.88) 34%,rgba(6,23,42,.62) 64%,rgba(6,23,42,.44) 100%);}
@media (max-width:920px){
  [data-palette="atelie-operacional"] .hero__veil{
    background:linear-gradient(180deg,rgba(6,23,42,.93) 0%,rgba(6,23,42,.87) 55%,rgba(6,23,42,.91) 100%);}
}
[data-palette="atelie-operacional"] .hero__card{
  background:linear-gradient(180deg,#153556 0%,#0E2844 54%,#0A2139 100%);border-color:#24476A;}

/* ---- Servicos: placa mineral; petroleo como linguagem de operacao ---- */
[data-palette="atelie-operacional"] #services{background-color:var(--mineral);}
[data-palette="atelie-operacional"] .rail__state{color:var(--champagne-lite);}
[data-palette="atelie-operacional"] .rail__opt[aria-checked="true"] .rail__sum,
[data-palette="atelie-operacional"] .acc-btn[aria-expanded="true"] .rail__sum{color:#CFE1E4;}

/* ---- Planejamento: mineral mais claro; latao decide, champagne marca ---- */
[data-palette="atelie-operacional"] #planning{
  background-color:var(--mineral-soft);box-shadow:inset 0 1px 0 rgba(52,44,32,.08);}
[data-palette="atelie-operacional"] .chip[aria-pressed="true"] .chip__mark{
  background:var(--champagne);border-color:var(--champagne);}

/* ---- Floor care: placa escura de comparacao, o contraste material maximo ---- */
[data-palette="atelie-operacional"] #floorcare{
  --ink-soft:var(--on-dark-soft);
  --ink-muted:var(--on-dark-muted);
  --line:rgba(233,238,241,.14);
  --line-strong:rgba(233,238,241,.30);
  color:var(--on-dark);
  background-color:#0A1F33;
  background-image:
    radial-gradient(120% 70% at 16% 0%,rgba(233,238,241,.055) 0%,rgba(233,238,241,0) 62%),
    repeating-linear-gradient(90deg,rgba(196,170,120,.055) 0 1px,rgba(0,0,0,0) 1px 152px),
    linear-gradient(180deg,#0D2439 0%,#08192A 100%);
  box-shadow:inset 0 1px 0 rgba(196,170,120,.30),inset 0 -1px 0 rgba(0,0,0,.45);}
[data-palette="atelie-operacional"] #floorcare .h2{color:#fff;}
[data-palette="atelie-operacional"] #floorcare .label{color:var(--petrol-lite);}
[data-palette="atelie-operacional"] #floorcare .case > div:last-child dt{color:var(--sage-lite);}
[data-palette="atelie-operacional"] #floorcare .floor__list svg{color:var(--petrol-lite);}
[data-palette="atelie-operacional"] #floorcare .case{box-shadow:none;}
[data-palette="atelie-operacional"] #floorcare .btn--petrol{
  background:var(--sp-petrol-plate);border-color:#2A7A89;color:#fff;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.16),0 1px 0 rgba(0,0,0,.4),0 10px 16px -12px rgba(0,0,0,.7);}
[data-palette="atelie-operacional"] #floorcare .btn--petrol:hover{background:#17697A;border-color:#3A8D9C;}
[data-palette="atelie-operacional"] #floorcare .btn--ghost{
  background:transparent;border-color:rgba(255,255,255,.34);color:#fff;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.14);}
[data-palette="atelie-operacional"] #floorcare .btn--ghost:hover{background:rgba(255,255,255,.1);border-color:#fff;}
[data-palette="atelie-operacional"] #floorcare .btn:active{box-shadow:inset 0 1px 3px rgba(0,0,0,.5);}
[data-palette="atelie-operacional"] #floorcare :focus-visible,
[data-palette="atelie-operacional"] #floorcare .compare.is-focused{outline-color:var(--champagne-lite);}
[data-palette="atelie-operacional"] #floorcare .compare{
  box-shadow:0 0 0 1px rgba(233,238,241,.08),0 2px 0 rgba(0,0,0,.35),0 34px 46px -30px rgba(0,0,0,.8);}
@media (max-width:920px){
  [data-palette="atelie-operacional"] #floorcare .compare{
    box-shadow:0 0 0 1px rgba(233,238,241,.08),0 1px 0 rgba(0,0,0,.35);}
}

/* ---- Padrao 4Points: papel tecnico; o pilar Care recebe o sage ---- */
[data-palette="atelie-operacional"] #approach{
  background-color:var(--paper);
  background-image:
    repeating-linear-gradient(90deg,rgba(14,39,64,.03) 0 1px,rgba(0,0,0,0) 1px 116px),
    repeating-linear-gradient(0deg,rgba(14,39,64,.024) 0 1px,rgba(0,0,0,0) 1px 116px);}
[data-palette="atelie-operacional"] .pillars__rule span:nth-child(3){background:var(--sage);}

/* ---- Impacto: marfim de apoio; sage contido no painel de cuidado ---- */
[data-palette="atelie-operacional"] #impact{background-color:var(--ivory);}
[data-palette="atelie-operacional"] .impact{
  background:linear-gradient(180deg,#E4EBDD 0%,#DAE4D3 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.65),inset 0 0 0 1px rgba(61,101,70,.10),
    0 1px 0 rgba(44,70,54,.14),0 24px 34px -30px rgba(44,70,54,.4);}
/* !important: o rotulo tem cor utilitaria .u-label-sage (!important) (#4F7A57, 3,9:1 sobre o sage) */
[data-palette="atelie-operacional"] .impact .label{color:var(--sage-ink) !important;}

/* ---- Orcamento: areia profunda; o card branco e o plano mais claro da pagina ---- */
[data-palette="atelie-operacional"] #quote{background-color:var(--sand-deep);}
[data-palette="atelie-operacional"] .aside{background:linear-gradient(180deg,var(--navy-raised),#0A223A);}
[data-palette="atelie-operacional"] .aside__contact svg,
[data-palette="atelie-operacional"] .aside__contact a:hover{color:var(--champagne-lite);}
[data-palette="atelie-operacional"] .progress__bar{background:linear-gradient(180deg,#2A8394,var(--petrol-dark));}
/* :where mantem a especificidade da regra base: hover, foco e erro seguem vencendo */
:where([data-palette="atelie-operacional"]) .field :is(input,select,textarea){border-color:var(--line-control);}
/* a conversao final: unico latao dentro do formulario, alem do passo ativo */
[data-palette="atelie-operacional"] #btnSubmit{
  background:linear-gradient(180deg,var(--brass-hi),var(--brass));
  border-color:var(--brass);border-bottom-color:var(--brass-deep);color:var(--navy-deep);}
[data-palette="atelie-operacional"] #btnSubmit:hover{
  background:linear-gradient(180deg,#E2BF6C,var(--brass-hi));
  border-color:var(--brass-hi);border-bottom-color:var(--brass-deep);}

/* =========================================================================
   TONS DA LOGO — azuis e dourados ancorados na marca
   Camada localizada e reversivel. Remova data-brand-tones="logo" do <html>
   para voltar ao "Atelie Operacional". Nenhuma regra acima foi tocada.
   Somente cor: os papeis do Atelie seguem os mesmos.
   Ancoras medidas no PNG da logo:
     azul da lamina vertical     #1F6F8B  (OKLCH h226)
     ouro da lamina horizontal   #C8A96A  (OKLCH h84), brilho #DAB873 > #E4C079
   Logica da marca: a vertical azul encontra a horizontal dourada.
     marinho    giro leve para a sombra do azul da logo (h251 > h245)
     petroleo   matiz da logo, mais profundo e sobrio
     latao      matiz da logo, um pouco mais vivo que ela
     champagne  o mesmo ouro, mais claro e mais discreto
   ========================================================================= */
html[data-brand-tones="logo"]{
  --navy:#0C283E;
  --navy-deep:#041828;
  --navy-raised:#11344F;
  --navy-line:#21405A;
  --ink:#0C283E;
  --ink-soft:#3A4D5E;
  --ink-muted:#516475;

  --petrol:#16617A;
  --petrol-dark:#0B4C62;
  --petrol-lite:#90C0D4;
  --sp-petrol-plate:linear-gradient(180deg,#10566E 0%,#084255 100%);

  --brass:#CCA85E;
  --brass-hi:#DDB76A;
  --brass-deep:#A78743;
  --champagne:#CBB68D;
  --champagne-lite:#D8C49C;

  --sp-dark-edge:inset 0 1px 0 rgba(200,169,106,.28);
}

/* ---- Estrutura e botoes: hex fixos levados para as familias da logo ---- */
[data-brand-tones="logo"] .btn--primary:hover{background:#183E5B;border-color:#183E5B;}
[data-brand-tones="logo"] .btn--gold:hover,
[data-brand-tones="logo"] #btnSubmit:hover{background:linear-gradient(180deg,#E6C072,var(--brass-hi));}

/* ---- Hero: marinho da marca; a vertical azul da logo entra ao lado do lead ---- */
[data-brand-tones="logo"] .hero{
  background:linear-gradient(90deg,rgba(4,24,40,.95) 0%,rgba(4,24,40,.88) 36%,rgba(4,24,40,.66) 68%,rgba(4,24,40,.52) 100%);}
[data-brand-tones="logo"] .hero__veil{
  mix-blend-mode:multiply;
  background:
    linear-gradient(0deg,rgba(4,24,40,.5) 0%,rgba(4,24,40,0) 32%),
    linear-gradient(90deg,rgba(4,24,40,.95) 0%,rgba(4,24,40,.88) 34%,rgba(4,24,40,.62) 64%,rgba(4,24,40,.44) 100%);}
@media (max-width:920px){
  [data-brand-tones="logo"] .hero__veil{
    background:linear-gradient(180deg,rgba(4,24,40,.93) 0%,rgba(4,24,40,.87) 55%,rgba(4,24,40,.91) 100%);}
}
[data-brand-tones="logo"] .hero__card{
  background:linear-gradient(180deg,#113653 0%,#092941 54%,#072237 100%);border-color:#224867;}
[data-brand-tones="logo"] .hero__card::before{
  background:linear-gradient(90deg,var(--brass-hi),rgba(200,169,106,0));}
[data-brand-tones="logo"] .cred__ico{background:linear-gradient(180deg,#1C3C56,#133148);}
/* eco da marca: vertical no azul exato da lamina; as horizontais seguem douradas */
[data-brand-tones="logo"] .hero__lead{border-left-color:#1F6F8B;}

/* ---- Servicos ---- */
[data-brand-tones="logo"] .rail__opt[aria-checked="true"] .rail__sum,
[data-brand-tones="logo"] .acc-btn[aria-expanded="true"] .rail__sum{color:#C9DFE9;}

/* ---- Floor care: placa escura no marinho da marca, grade no ouro da logo ---- */
[data-brand-tones="logo"] #floorcare{
  background-color:#092031;
  background-image:
    radial-gradient(120% 70% at 16% 0%,rgba(233,238,241,.055) 0%,rgba(233,238,241,0) 62%),
    repeating-linear-gradient(90deg,rgba(200,169,106,.055) 0 1px,rgba(0,0,0,0) 1px 152px),
    linear-gradient(180deg,#0D2437 0%,#071A28 100%);
  box-shadow:inset 0 1px 0 rgba(200,169,106,.30),inset 0 -1px 0 rgba(0,0,0,.45);}
[data-brand-tones="logo"] #floorcare .btn--petrol{border-color:#2F728B;}
[data-brand-tones="logo"] #floorcare .btn--petrol:hover{background:var(--petrol);border-color:#42849E;}

/* ---- Orcamento ---- */
[data-brand-tones="logo"] .aside{background:linear-gradient(180deg,var(--navy-raised),#072338);}
[data-brand-tones="logo"] .progress__bar{background:linear-gradient(180deg,#27738E,var(--petrol-dark));}

/* =========================================================================
   FLUXO MARINHO + AZUL DA LOGO — superficies escuras em gradiente vivo
   Camada localizada e reversivel. Remova data-navy-flow="logo" do <html>
   para voltar aos "Tons da Logo". Nenhuma regra acima foi tocada.
   Marinho #0C283E e azul da lamina #1F6F8B com o mesmo peso visual:
   dois tons medios interpolados em OKLCH (1/3 e 2/3) fazem a ponte.
   Gradiente 135 graus periodico em fundo de 200%: a janela visivel sempre
   mostra um ciclo inteiro, entao o peso dos dois tons e igual em qualquer
   quadro. Ciclo de 24s, linear, sem costura. Excecao consciente ao
   "sem loop" da coreografia: e superficie, nao gesto.
   Assento marinho fixo sob a logo (cabecalho e rodape).
   O azul passa por baixo de todo texto: secundarios, rotulos e ouro em
   texto sobem de tom para manter 4,5:1 sobre #1F6F8B.
   ========================================================================= */
html[data-navy-flow="logo"]{
  --nf-navy:#0C283E;
  --nf-mid-1:#143E58;
  --nf-mid-2:#1A5671;
  --nf-blue:#1F6F8B;
  --nf-flow:linear-gradient(135deg,
    var(--nf-navy) 0%,var(--nf-mid-1) 8.333%,var(--nf-mid-2) 16.667%,var(--nf-blue) 25%,
    var(--nf-mid-2) 33.333%,var(--nf-mid-1) 41.667%,var(--nf-navy) 50%,
    var(--nf-mid-1) 58.333%,var(--nf-mid-2) 66.667%,var(--nf-blue) 75%,
    var(--nf-mid-2) 83.333%,var(--nf-mid-1) 91.667%,var(--nf-navy) 100%);
  /* borda esquerda real da logo: mesma conta do .wrap (max-width + padding) */
  --nf-seat-x:calc(max(0px,50% - var(--maxw) / 2) + var(--pad));
  --nf-seat:linear-gradient(90deg,var(--nf-navy) 0,var(--nf-navy) calc(var(--nf-seat-x) + 80px),
    rgba(12,40,62,0) calc(var(--nf-seat-x) + 220px));
  --nf-dur:24s;
  --nf-line:rgba(233,238,241,.16);
  --nf-text-soft:#E9EEF1;   /* 4,85:1 sobre o azul */
  --nf-text-muted:#E2E9EE;  /* 4,62:1 */
  --nf-gold-text:#F1E6CF;   /* 4,58:1, familia do ouro (h85) */
  --nf-blue-text:#DBECF3;   /* 4,67:1, familia do azul da logo (h224) */
  --nf-sage-text:#DDEBDA;   /* 4,58:1 */
}
@keyframes nf-flow{from{background-position:100% 100%;}to{background-position:0% 0%;}}
@keyframes nf-flow-seat{from{background-position:0 0,100% 100%;}to{background-position:0 0,0% 0%;}}
@keyframes nf-flow-floor{from{background-position:0 0,0 0,100% 100%;}to{background-position:0 0,0 0,0% 0%;}}

/* ---- Fluxo simples: menu mobile, aside e Continue ---- */
[data-navy-flow="logo"] .mobile-nav,
[data-navy-flow="logo"] .aside,
[data-navy-flow="logo"] .btn--primary,
[data-navy-flow="logo"] .btn--primary:hover{
  background-color:var(--nf-navy);
  background-image:var(--nf-flow);
  background-size:200% 200%;
  background-position:100% 100%;
  background-repeat:no-repeat;}
[data-navy-flow="logo"] .mobile-nav,
[data-navy-flow="logo"] .aside,
[data-navy-flow="logo"] .btn--primary{animation:nf-flow var(--nf-dur) linear infinite;}

/* ---- Cabecalho e rodape: assento marinho sob a logo + fluxo ---- */
[data-navy-flow="logo"] .site-header,
[data-navy-flow="logo"] .site-footer{
  background-color:var(--nf-navy);
  background-image:var(--nf-seat),var(--nf-flow);
  background-size:100% 100%,200% 200%;
  background-position:0 0,100% 100%;
  background-repeat:no-repeat;
  animation:nf-flow-seat var(--nf-dur) linear infinite;}
[data-navy-flow="logo"] .main-nav a:hover{border-bottom-color:var(--champagne-lite);}
[data-navy-flow="logo"] .nav-toggle{border-color:rgba(233,238,241,.28);}
[data-navy-flow="logo"] .nav-toggle:hover{background:rgba(255,255,255,.1);}
[data-navy-flow="logo"] .mobile-nav a:not(.btn){border-bottom-color:var(--nf-line);}
[data-navy-flow="logo"] .site-footer{--on-dark-muted:var(--nf-text-muted);}
/* so a troca de cor seria imperceptivel entre dois tons claros: entra o sublinhado */
[data-navy-flow="logo"] .site-footer a:not(.btn):hover{
  color:var(--nf-gold-text);text-decoration:underline;
  text-decoration-color:var(--brass-hi);text-underline-offset:4px;}
[data-navy-flow="logo"] .footer-bottom{border-top-color:var(--nf-line);}

/* ---- Floor care: realce e grade dourada fixos, so o fluxo se move ---- */
[data-navy-flow="logo"] #floorcare{
  --ink-soft:var(--nf-text-soft);
  --ink-muted:var(--nf-text-muted);
  --line:rgba(233,238,241,.18);
  background-color:var(--nf-navy);
  background-image:
    radial-gradient(120% 70% at 16% 0%,rgba(233,238,241,.055) 0%,rgba(233,238,241,0) 62%),
    repeating-linear-gradient(90deg,rgba(200,169,106,.055) 0 1px,rgba(0,0,0,0) 1px 152px),
    var(--nf-flow);
  background-size:auto,auto,200% 200%;
  background-position:0 0,0 0,100% 100%;
  animation:nf-flow-floor var(--nf-dur) linear infinite;}
[data-navy-flow="logo"] #floorcare .label,
[data-navy-flow="logo"] #floorcare .floor__list svg{color:var(--nf-blue-text);}
[data-navy-flow="logo"] #floorcare .case > div:last-child dt{color:var(--nf-sage-text);}
[data-navy-flow="logo"] #floorcare .btn--petrol{border-color:rgba(233,238,241,.38);}
[data-navy-flow="logo"] #floorcare .btn--petrol:hover{border-color:rgba(233,238,241,.6);}

/* ---- Orcamento: aside e Continue ---- */
[data-navy-flow="logo"] .aside{--on-dark-muted:var(--nf-text-muted);}
[data-navy-flow="logo"] .sum-row,
[data-navy-flow="logo"] .aside__contact{border-color:var(--nf-line);}
[data-navy-flow="logo"] .aside__contact a:hover{color:var(--nf-gold-text);}
/* a entrada "sp-rise" do aside e o fluxo convivem na mesma lista */
html[data-navy-flow="logo"].sp-motion #quote .aside{
  animation:sp-rise 480ms var(--ease-settle) 120ms backwards,nf-flow var(--nf-dur) linear infinite;}
[data-navy-flow="logo"] .btn--primary{border-color:var(--nf-mid-1);}
[data-navy-flow="logo"] .btn--primary:hover{border-color:var(--nf-blue);filter:brightness(1.12);}

@media (prefers-reduced-motion:reduce){
  [data-navy-flow="logo"] :is(.site-header,.site-footer,.mobile-nav,#floorcare,.aside,.btn--primary){
    animation:none !important;}
}

/* =========================================================================
   PLACA OSSO + FILETE OURO PROFUNDO — CTAs de conversao sem latao
   Camada localizada e reversivel. Remova data-cta-plate="osso" do <html>
   para voltar a placa de latao. Nenhuma regra acima foi tocada.
   Somente os 5 CTAs: Request a Quote (cabecalho, menu mobile, hero, rodape)
   e Submit request. O ouro segue na logo, filetes, marcadores e comparador.
   Chapado: sem gradiente e sem aresta inferior escura; fica a sombra de
   contato comum a todo .btn. Texto marinho sobre osso: 10,3:1.
   Filete de 1,5px: borda 1px + anel interno de .5px na mesma cor. Uma
   border-width de 1.5px seria arredondada para 1px em telas 1x e 1,25x.
   Linha: 2,2:1 sobre o osso, 4,7:1 sobre o marinho.
   ========================================================================= */
html[data-cta-plate="osso"]{
  --cta-fill:#DED4C1;
  --cta-fill-hover:#E8E0D0;
  --cta-line:#B08A3E;
  --cta-line-hover:#C9A04F;
  --cta-ink:#0C283E;
  /* mesma sombra de contato do .btn na camada surface-plane */
  --cta-contact:inset 0 1px 0 rgba(255,255,255,.16),0 1px 0 rgba(7,27,46,.20),0 8px 14px -11px rgba(7,27,46,.42);
}
/* :is com #btnSubmit leva tudo a especificidade de id: vence o latao das
   camadas anteriores e as cores herdadas de .mobile-nav a / .site-footer a */
[data-cta-plate="osso"] :is(.btn--gold,#btnSubmit){
  background:var(--cta-fill);
  border-color:var(--cta-line);
  color:var(--cta-ink);
  box-shadow:inset 0 0 0 .5px var(--cta-line),var(--cta-contact);}
[data-cta-plate="osso"] :is(.btn--gold,#btnSubmit):hover{
  background:var(--cta-fill-hover);
  border-color:var(--cta-line-hover);
  color:var(--cta-ink);
  box-shadow:inset 0 0 0 .5px var(--cta-line-hover),var(--cta-contact);}
/* a especificidade de id tambem venceria o .btn:active da surface-plane:
   o afundamento e redeclarado aqui, depois do hover */
[data-cta-plate="osso"] :is(.btn--gold,#btnSubmit):active{
  box-shadow:inset 0 0 0 .5px var(--cta-line-hover),inset 0 1px 3px rgba(7,27,46,.38);}
/* placa de credenciais do hero: contorno no mesmo ouro profundo do filete dos CTAs */
[data-cta-plate="osso"] .hero__card{border-color:var(--cta-line);}

/* =========================================================================
   PLACA AZUL DA LOGO + FILETE OURO PROFUNDO — troca so o preenchimento
   Camada localizada e reversivel. Remova data-cta-fill="logo" do <html>
   para voltar a placa osso. Nenhuma regra acima foi tocada.
   Redefine apenas as variaveis da camada osso: o filete de ouro profundo
   (#B08A3E, hover #C9A04F), a sombra de contato e o afundamento seguem.
   Azul exato da lamina #1F6F8B, chapado. Hover no mesmo matiz OKLCH
   (h226), L +0,02. Texto marfim: 5,17:1 no repouso, 4,74:1 no hover.
   ========================================================================= */
html[data-cta-fill="logo"]{
  --cta-fill:#1F6F8B;
  --cta-fill-hover:#277591;
  --cta-ink:#F7F4EF;
}

/* =========================================================================
   PLACA DE CREDENCIAIS OSSO + BORDA AZUL DA LOGO — so o .hero__card
   Camada localizada e reversivel. Remova data-hero-card="osso" do <html>
   para voltar a placa marinha. Nenhuma regra acima foi tocada.
   Fundo osso #DED4C1 chapado (o antigo preenchimento dos CTAs), borda no
   azul exato da lamina #1F6F8B. Estrutura, icones, discos e animacao
   intactos: so a cor do texto muda para continuar legivel sobre o osso.
   Marinho 10,3:1; ouro escuro do contador 4,9:1 (h82, familia do filete).
   ========================================================================= */
html[data-hero-card="osso"]{
  --hc-fill:#DED4C1;
  --hc-line:#1F6F8B;
  --hc-ink:#0C283E;
  --hc-gold:#725202;
  --hc-rule:rgba(12,40,62,.18);
}
[data-hero-card="osso"] .hero__card{
  background:var(--hc-fill);
  border-color:var(--hc-line);}
[data-hero-card="osso"] .hero__count{border-bottom-color:var(--hc-rule);}
[data-hero-card="osso"] .hero__count b{color:var(--hc-gold);}
[data-hero-card="osso"] .hero__count span{color:var(--hc-ink);}
[data-hero-card="osso"] .cred li{color:var(--hc-ink);border-bottom-color:var(--hc-rule);}
/* mobile: a aresta escura interna (sp-dark-foot) viraria um risco preto no osso */
@media (max-width:920px){
  [data-hero-card="osso"] .hero__card{
    box-shadow:inset 0 1px 0 rgba(255,255,255,.35),0 1px 0 #061626;}
}

/* =========================================================================
   LOGO COMPACTA NO CABECALHO — so o .logo dentro do .header-bar
   Camada localizada e reversivel. Remova data-header-logo="compacta" do
   <html> para voltar ao tamanho anterior. Nenhuma regra acima foi tocada.
   Cerca de 88% em cada faixa, mantendo a proporcao do PNG (~3,5:1):
   186x53 > 164x47, 152x44 > 134x39 (<=920px), 134x39 > 118x34 (<=380px).
   Altura da barra e logo do rodape intactas.
   ========================================================================= */
[data-header-logo="compacta"] .header-bar .logo{width:164px;height:47px;}
@media (max-width:920px){
  [data-header-logo="compacta"] .header-bar .logo{width:134px;height:39px;}
}
@media (max-width:380px){
  [data-header-logo="compacta"] .header-bar .logo{width:118px;height:34px;}
}

/* =========================================================================
   CAMPO MARINHO EM SHADER — o fluxo vira o fundo da pagina
   Camada localizada e reversivel. Remova data-navy-field="shader" do <html>
   para voltar ao gradiente CSS por superficie. Nenhuma regra acima foi tocada.
   Hoje cada superficie marinha anima a sua propria copia de --nf-flow: seis
   fluxos paralelos, cada um na sua caixa. Aqui um unico campo fixo cobre a
   viewport atras da pagina e quatro superficies viram janelas para o mesmo
   quadro, por dois caminhos:
     - #floorcare e o rodape estao em fluxo normal, com nada passando por tras
       deles: basta ficarem transparentes e o campo em z-index -1 aparece;
     - o cabecalho e o menu mobile pintam acima do conteudo (sticky, z-index
       100), entao transparentes mostrariam a pagina rolando. Os dois recebem
       um canvas espelho com a fatia do campo que cai sob eles.
   Nos dois casos o recorte vem das mesmas coordenadas de viewport, entao o
   fluxo fica continuo e alinhado do topo ao rodape.
   .aside e .btn--primary ficam no gradiente CSS: vivem dentro de #quote, que
   tem fundo opaco, entao uma janela ali mostraria a areia, nao o campo. O
   shader sai sem reflexo, entao a paleta dele e exatamente a de --nf-flow e
   os dois convivem na mesma familia tonal.
   data-navy-field e a intencao, escrita a mao. data-field-engine e estado de
   runtime, escrito pelo JS so depois do primeiro quadro desenhado: sem WebGL
   nada daqui se aplica e o site fica como esta.
   ========================================================================= */
/* As regras de posicao nao dependem do atributo: sem elas, tirar
   data-navy-field deixaria os canvas no fluxo com os 300x150 padrao. */
.nf-field{
  position:fixed;inset:0;pointer-events:none;
  /* obrigatorio: em z-index 0 o campo pintaria acima das secoes estaticas */
  z-index:-1;
  /* com layout, mas sem pintura: o WebGL precisa de tamanho para iniciar */
  visibility:hidden;}
.nf-field__canvas{display:block;width:100%;height:100%;}

/* Daqui para baixo, so com o primeiro quadro ja desenhado. A visibilidade do
   campo e a transparencia das janelas entram no mesmo recalculo de estilo,
   entao nao ha um quadro de papel piscando no meio. */
html[data-navy-field="shader"][data-field-engine="webgl"] .nf-field{visibility:visible;}

/* O papel sai do body e o marinho vai para a raiz: cobre o overscroll e tira
   o risco de o fundo do body pintar por cima do campo. */
html[data-navy-field="shader"][data-field-engine="webgl"]{background:var(--nf-navy);}
html[data-navy-field="shader"][data-field-engine="webgl"] body{background:transparent;}

/* ---- As janelas: param de pintar o fluxo e deixam o campo passar ---- */
html[data-navy-field="shader"][data-field-engine="webgl"]
  :is(.site-header,.site-footer,.mobile-nav,#floorcare){
  background-color:transparent;
  background-image:none;
  animation:none;}

/* Rodape: em fluxo normal, nada passa por tras dele, entao ele ve o campo
   direto. O assento marinho sob a logo volta como fundo proprio. */
html[data-navy-field="shader"][data-field-engine="webgl"] .site-footer{
  background-image:var(--nf-seat);
  background-size:100% 100%;
  background-position:0 0;}

/* ---- Espelhos: cabecalho e menu mobile ----
   O cabecalho e sticky com z-index 100, entao ele pinta acima do conteudo:
   transparente, ele mostraria a pagina rolando por baixo, nao o campo. Os
   dois recebem um canvas alimentado pelo mesmo shader, no mesmo quadro e nas
   mesmas coordenadas de viewport — o recorte do campo que cai sob cada um.
   Como ambos sao ancorados ao topo da viewport, o recorte nao muda com a
   rolagem: o JS so reescreve quando o campo redesenha ou o menu abre. */
.nf-mirror{
  position:absolute;inset:0;display:block;width:100%;height:100%;
  z-index:-2;pointer-events:none;visibility:hidden;}
html[data-navy-field="shader"][data-field-engine="webgl"] .nf-mirror{visibility:visible;}
/* o menu vira contexto de empilhamento para conter o proprio espelho */
html[data-navy-field="shader"][data-field-engine="webgl"] .mobile-nav{isolation:isolate;}
html[data-navy-field="shader"][data-field-engine="webgl"] .mobile-nav .nf-mirror{z-index:-1;}
/* o assento do cabecalho sobe para um ::before: o fundo proprio dele fica
   debaixo do espelho, mas o pseudo-elemento fica entre o espelho e o texto */
html[data-navy-field="shader"][data-field-engine="webgl"] .site-header::before{
  content:'';position:absolute;inset:0;z-index:-1;pointer-events:none;
  background-image:var(--nf-seat);
  background-size:100% 100%;
  background-position:0 0;
  background-repeat:no-repeat;}

/* Floor care: o realce e a grade dourada ficam, so o fluxo sai */
html[data-navy-field="shader"][data-field-engine="webgl"] #floorcare{
  background-image:
    radial-gradient(120% 70% at 16% 0%,rgba(233,238,241,.055) 0%,rgba(233,238,241,0) 62%),
    repeating-linear-gradient(90deg,rgba(200,169,106,.055) 0 1px,rgba(0,0,0,0) 1px 152px);
  background-size:auto,auto;
  background-position:0 0,0 0;}

/* =========================================================================
   CAMPO AREIA EM SHADER — o fluxo claro atras das secoes de papel
   Camada localizada e reversivel. Remova data-sand-field="shader" do <html>
   para voltar aos sete chapados de hoje. Nenhuma regra acima foi tocada.
   A estetica e a do conceito-fluxo-areia.html: o mesmo shader "Oceanic" do
   campo marinho (nevoa fbm, onda senoidal, distorcao de dominio, deriva
   lenta, granulacao) com a paleta dos fundos claros do site, um reflexo na
   crista do papel e uma vinheta que mistura com a areia profunda em vez de
   escurecer para o cinza. FIELD e o ciclo sao iguais aos do campo marinho:
   as duas metades da pagina sao a mesma onda em duas paletas, entao a forma
   continua onde o rodape marinho encontra o #quote.
   As sete secoes claras (#services, #planning, #approach, #team, #impact,
   #coverage, #quote) nao podem ficar so transparentes: o campo marinho ja
   ocupa position:fixed z-index -1 atras da pagina e e ele que apareceria.
   Cada uma recebe um canvas espelho com a fatia do campo areia que cai sob
   ela; o campo em si nunca pinta, e so a fonte.
   O empilhamento nao precisa de isolation nem de pseudo-elemento:
     camada negativa da raiz, por ordem de DOM
       .nf-field    campo marinho
       .sf-mirror   espelhos das secoes, pintam depois, por cima
     passo seguinte
       fundo da secao: cor transparente + a grade atual (background-image)
       conteudo da secao
   Entao a grade de cada secao e a aresta interna do #planning seguem
   intactas, por cima do fluxo, como o usuario pediu.
   data-sand-field e a intencao, escrita a mao. data-sand-engine e estado de
   runtime, escrito pelo JS so depois do primeiro quadro desenhado e so
   acima de 920px: sem WebGL ou no celular nada daqui se aplica e as secoes
   claras ficam como estao hoje.
   ========================================================================= */
html[data-sand-field="shader"]{
  /* tokens claros do site afastados do papel para a escala render na tela;
     o papel fica intacto e o marfim leva um empurrao maior para nao virar so
     passagem entre a areia e o papel */
  --sf-sand-deep:#DDCEBA;   /* --sand-deep #E8DECF afastado 1,6x: base do ciclo, fase 0 */
  --sf-sand:#E3D8C7;        /* --sand #ECE4D7 afastado 1,6x */
  --sf-ivory:#EDE6DA;       /* --ivory #F4EFE6 afastado 2x */
  --sf-paper:#FBF8F2;       /* --paper: crista do ciclo, sem mudanca */
  --sf-sheen:#FFFFFF;       /* so o reflexo do shader usa */
  --sf-dur:24s;             /* mesmo ciclo do campo marinho */
}

/* As regras de posicao nao dependem do atributo: sem elas, tirar
   data-sand-field deixaria os canvas no fluxo com os 300x150 padrao. */
.sf-field{position:fixed;inset:0;pointer-events:none;z-index:-3;
  /* com layout, mas sem pintura: o WebGL precisa de tamanho para iniciar,
     e este campo alimenta so os espelhos — ele nunca aparece */
  visibility:hidden;}
.sf-field__canvas{display:block;width:100%;height:100%;}
/* O espelho e sticky, nao absoluto. Um canvas absoluto vive em coordenadas do
   documento e rola junto com a pagina, mas o conteudo dele e uma fatia de um
   campo preso a viewport: entre a rolagem (compositor) e o rAF seguinte
   sobrava uma faixa descoberta da altura do passo da rolagem, e por ela
   aparecia o campo marinho. Sticky e reposicionado pelo proprio compositor,
   entao enquanto a secao cruza a tela o canvas fica parado na viewport e nem
   a cobertura nem o alinhamento dependem de JS.
   O host recorta o sticky na caixa da secao. overflow:clip recorta sem virar
   scrollport — com overflow:hidden o sticky passaria a se prender ao host, que
   nunca rola, e a ancoragem se perderia. */
/* O recorte vem de clip-path, nao de overflow. overflow (hidden ou clip) so
   recorta descendentes cujo bloco de referencia passa pelo elemento, e o
   espelho e position:fixed: com overflow:clip ele pintaria a viewport inteira,
   por cima das outras secoes. clip-path recorta a pintura da subarvore toda,
   inclusive o descendente fixo, e nao vira bloco de referencia para ele, entao
   o canvas segue preso a viewport. O recorte fica so no host do fundo: nada
   de sombra, outline de foco ou conteudo passa por aqui. */
.sf-host{position:absolute;inset:0;z-index:-1;pointer-events:none;
  clip-path:inset(0);}
/* O espelho e fixo e cobre a viewport inteira, com o quadro completo do campo.
   Assim a cobertura nao depende de rolagem nem do proximo requestAnimationFrame:
   quem mantem o canvas parado na tela e o compositor, e quem o recorta nos
   limites da secao e o clip-path do host, por layout. Antes ele era sticky e
   recebia so a fatia correspondente a propria posicao; nas entradas e saidas
   essa leitura extrapolava o canvas de origem e a parte excedente ficava sem
   pixels novos, aparecendo como faixa clara na base da viewport.
   width/height em 100%: com inset:0 e width:auto um canvas, por ser elemento
   substituido, cairia na largura intrinseca de 300px. */
.sf-mirror{position:fixed;top:0;left:0;width:100%;height:100%;display:block;
  visibility:hidden;}

/* Daqui para baixo, so com o primeiro quadro ja desenhado. A visibilidade do
   espelho e o fundo da secao entram no mesmo recalculo de estilo, entao nao ha
   um quadro de papel piscando no meio. */
html[data-sand-field="shader"][data-sand-engine="webgl"] .sf-mirror{visibility:visible;}

/* 1 id + 2 atributos: vence o [data-palette="atelie-operacional"] #services
   e os .bg-* da surface-plane. */
html[data-sand-field="shader"][data-sand-engine="webgl"]
  :is(#services,#planning,#approach,#team,#impact,#coverage,#quote){
  position:relative;
  isolation:isolate;
  /* rede de seguranca, e o motivo de a secao nao ficar transparente: no
     instante em que uma secao entra na tela o espelho dela ainda pode estar
     vazio, e transparente isso mostraria o campo marinho. Um tom medio do
     proprio ciclo torna essa fracao de quadro imperceptivel. Com
     isolation:isolate o espelho, em z-index -1, pinta acima deste fundo. */
  background-color:var(--sf-sand);
  background-image:none;
  /* o tom mais fechado do ciclo e mais escuro que os chapados de hoje:
     #516475 sobre #DDCEBA cai para 3,97:1. #47596A, mesma familia e mais
     fundo, volta para 4,69:1. --ink-soft (5,66:1) e o --petrol-dark dos
     rotulos (6,12:1) ja passam e ficam como estao. */
  --ink-muted:#47596A;}

/* As grades voltam por cima do fluxo. Como background-image da secao elas
   ficariam debaixo do espelho; num ::after, que e o ultimo filho, pintam
   depois do canvas dentro da mesma camada de z-index negativo. Sao as mesmas
   grades de sempre, copiadas das camadas surface-plane e atelie-operacional.
   #impact e #coverage nao tem grade. */
html[data-sand-field="shader"][data-sand-engine="webgl"]
  :is(#services,#planning,#approach,#team,#quote)::after{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;}
html[data-sand-field="shader"][data-sand-engine="webgl"]
  :is(#services,#team,#quote)::after{
  background-image:repeating-linear-gradient(90deg,rgba(7,27,46,.028) 0 1px,rgba(0,0,0,0) 1px 116px);}
/* a aresta interna do #planning tambem pinta com o fundo: volta junto */
html[data-sand-field="shader"][data-sand-engine="webgl"] #planning::after{
  background-image:repeating-linear-gradient(0deg,rgba(7,27,46,.022) 0 1px,rgba(0,0,0,0) 1px 100px);
  box-shadow:inset 0 1px 0 rgba(52,44,32,.08);}
html[data-sand-field="shader"][data-sand-engine="webgl"] #approach::after{
  background-image:
    repeating-linear-gradient(90deg,rgba(14,39,64,.03) 0 1px,rgba(0,0,0,0) 1px 116px),
    repeating-linear-gradient(0deg,rgba(14,39,64,.024) 0 1px,rgba(0,0,0,0) 1px 116px);}

/* =========================================================================
   FAIXA CTA — o convite final entre o #quote e o rodape
   Bloco novo no fim do arquivo. Nenhuma regra acima foi editada; a unica
   coisa que muda de lugar e o filete champanhe, declarada abaixo.
   A faixa e uma superficie marinha como o rodape, entao ela entra nas mesmas
   tres situacoes: base chapada, fluxo em gradiente e campo em shader.
   ========================================================================= */
.cta-band{
  background:var(--navy-deep);
  color:var(--on-dark);
  text-align:center;
  /* mesmo caminho do #floorcare: os tokens de texto mudam de lado, entao
     .lead e .muted seguem valendo sem regra propria */
  --ink-soft:var(--on-dark);
  --ink-muted:var(--on-dark-muted);}
.cta-band .h2{color:#fff;}
/* .lead nasce com max-width:60ch e margem zero: sem o auto ela encostaria
   na esquerda dentro de um bloco centrado */
.cta-band .lead{margin:14px auto 0;}
.cta-band__actions{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;margin-top:28px;}

/* ---- Assinatura editorial, como nos outros titulos de carga narrativa ---- */
[data-art-direction="surface-plane"] #ctaTitle{
  font-family:var(--f-editorial);font-weight:500;letter-spacing:-.012em;text-wrap:balance;}

/* ---- O filete sobe para o topo da faixa ----
   Ele marcava a entrada do marinho. Com a faixa no meio, no rodape ele
   passaria a cortar dois marinhos iguais: sai de la, entra aqui, e os dois
   viram um bloco so. Sem data-art-direction nenhum dos dois tem filete,
   como hoje. */
[data-art-direction="surface-plane"] .cta-band{box-shadow:inset 0 1px 0 rgba(200,169,106,.22);}
[data-art-direction="surface-plane"] .site-footer{box-shadow:none;}

/* ---- Fluxo em gradiente: a faixa anda junto com o rodape ---- */
[data-navy-flow="logo"] .cta-band{
  --ink-soft:var(--nf-text-soft);    /* 4,85:1 sobre o azul da logo */
  --ink-muted:var(--nf-text-muted);  /* 4,62:1 */
  background-color:var(--nf-navy);
  background-image:var(--nf-flow);
  background-size:200% 200%;
  background-position:100% 100%;
  background-repeat:no-repeat;
  animation:nf-flow var(--nf-dur) linear infinite;}
@media (prefers-reduced-motion:reduce){
  [data-navy-flow="logo"] .cta-band{animation:none !important;}
}

/* ---- Campo em shader: a faixa vira janela, como o rodape ----
   Ela esta em fluxo normal e nada pinta atras dela, entao ve o campo direto:
   nao precisa de canvas espelho. */
html[data-navy-field="shader"][data-field-engine="webgl"] .cta-band{
  background-color:transparent;
  background-image:none;
  animation:none;}

/* =========================================================================
   RODAPE MAIS BAIXO — so o .site-footer, so acima de 920px
   Camada localizada e reversivel. Remova data-footer-height="compacta" do
   <html> para voltar a altura anterior. Nenhuma regra acima foi tocada.
   A altura da grade e ditada pela coluna Services (titulo + 5 links), entao
   o ganho vem do respiro externo e do ritmo dessa lista. O logo (210x60) e a
   faixa .cta-band ficam como estao. A 1440px: ~428px > ~335px (-22%).
   padding 64/32 > 40/20, titulo>lista 18 > 12, linha dos links 6 > 3,
   grade>copyright 44 > 28, filete>texto 24 > 18.
   ========================================================================= */
@media (min-width:921px){
  [data-footer-height="compacta"] .site-footer{padding:40px 0 20px;}
  [data-footer-height="compacta"] .site-footer h4{margin-bottom:12px;}
  [data-footer-height="compacta"] .site-footer li{padding:3px 0;}
  [data-footer-height="compacta"] .footer-bottom{margin-top:28px;padding-top:18px;}
}

/* =========================================================================
   PLACA RASANTE — a fisica do botao deixa de depender do fundo
   Camada localizada e reversivel. Remova data-btn-plate="rasante" do <html>
   para voltar ao contato unico de hoje. Nenhuma regra acima foi tocada.

   O problema medido: --cta-fill (L1494) e --nf-blue (L1353) sao o mesmo
   #1F6F8B. Quando a onda do campo marinho chega ao quadro claro, a placa do
   CTA fica a 1,00:1 do fundo e o filete #B08A3E cai para 1,77:1. E a sombra
   de contato herdada, rgba(7,27,46,...), e quase o #0C283E do quadro
   escuro: ela some junto. Foi calibrada para papel, nao para marinho.

   Preto puro no lugar do navy nao e um agravo estetico. Sobre areia
   #ECE4D7 as duas sao a mesma sombra (navy .20 da 1,51:1, preto .20 da
   1,59:1); sobre o campo azul a curva do navy satura em 1,27:1 e a do preto
   continua subindo. O projeto ja tinha chegado nisso a mao em L1205, no
   unico botao que hoje vive sobre superficie escura. Esta camada generaliza
   aquela correcao.

   A correcao nao troca a cor da placa. Separa o trabalho em duas sombras de
   dominios opostos:
     aresta e pe  inset, medidos contra o PROPRIO preenchimento. Nao
                  dependem do fundo: valem em qualquer quadro dos 24s.
     contato      outset, preto puro, medido contra a superficie.
   As duas estao em antifase. Placa #1F6F8B nos 4 quadros do ciclo:
     quadro     placa/campo   aresta .72   contato .38
     #0C283E      2,67:1       10,10:1       1,18:1
     #143E58      1,99:1        7,54:1       1,38:1
     #1A5671      1,42:1        5,37:1       1,61:1
     #1F6F8B      1,00:1        3,79:1       1,84:1
   Onde o preenchimento morre o contato esta no maximo, porque o quadro
   claro do campo e justamente o que aceita sombra. E a aresta nunca desce
   de 3,79:1: o pior caso e o quadro em que placa e campo sao o mesmo hex, e
   ali ela sozinha ja passa os 3:1 da WCAG 1.4.11. O valor .72 e o
   --sp-edge de L555, que a surface-plane ja usa nas placas claras.

   Tres niveis de peso, por compromisso:
     1 conversao   .btn--gold e #btnSubmit: aresta cheia, pe, contato e
                   projecao. A unica que se desloca (1px) no hover.
     2 secundaria  .btn--primary e .btn--petrol: aresta media e contato
                   curto, sem pe e sem deslocamento. So a luz muda.
     3 fantasma    .btn--ghost e .btn--onDark: so a linha. Nao sao placas,
                   sao tracos na superficie; nunca projetam.
   O gesto de hover pertence a luz rasante: a aresta clareia e a projecao
   alonga. O objeto quase nao anda. Sem overshoot (--ease-settle tem os dois
   controles em y<=1), sem bounce, sem loop.

   Nenhuma regra desta camada declara "animation": o shorthand apagaria o
   nf-flow que .btn--primary recebe em L1387. Tudo aqui e transition,
   box-shadow, border-color e um transform de 1px.
   Nenhuma regra desta camada declara "background" nem "color": os ajustes
   de texto de .mobile-nav .btn--gold (L1147) e .site-footer .btn--gold
   (L1149-1150) seguem valendo sem disputa, e o preenchimento continua
   vindo de L1467-1476.
   ========================================================================= */
html[data-btn-plate="rasante"]{
  /* ---- inset: medidos contra o PROPRIO preenchimento, nunca contra o fundo ---- */
  --bp-lip:inset 0 1px 0 rgba(255,255,255,.72);      /* 3,79:1 no quadro #1F6F8B */
  --bp-lip-hi:inset 0 1px 0 rgba(255,255,255,.84);   /* 4,53:1 */
  --bp-lip-2:inset 0 1px 0 rgba(255,255,255,.42);    /* 3,00:1 no petroleo #0B4C62 */
  --bp-lip-2-hi:inset 0 1px 0 rgba(255,255,255,.56); /* 4,13:1 */
  --bp-lip-3:inset 0 1px 0 rgba(255,255,255,.22);    /* 2,01:1 sobre #0C283E */
  --bp-lip-3-hi:inset 0 1px 0 rgba(255,255,255,.30); /* 2,62:1 */
  --bp-foot:inset 0 -1px 0 rgba(0,0,0,.42);          /* 1,97:1 contra o azul da placa */
  /* ---- outset: preto puro, porque navy some sobre navy ---- */
  --bp-contact:0 1px 0 rgba(0,0,0,.38);              /* 2,57:1 areia / 1,84:1 azul */
  --bp-contact-2:0 1px 0 rgba(0,0,0,.30);            /* 2,07:1 areia / 1,61:1 azul */
  --bp-hair:0 1px 0 rgba(0,0,0,.12);                 /* 1,31:1 no papel (hoje 1,23:1) */
  --bp-cast:0 10px 16px -12px rgba(0,0,0,.58);
  --bp-cast-hi:0 16px 22px -14px rgba(0,0,0,.66);
  --bp-cast-sm:0 6px 10px -8px rgba(0,0,0,.52);
  --bp-cast-sm-hi:0 10px 14px -10px rgba(0,0,0,.60);
  --bp-cast-2:0 7px 11px -9px rgba(0,0,0,.50);
  --bp-cast-2-hi:0 11px 15px -10px rgba(0,0,0,.56);
  --bp-press:inset 0 1px 3px rgba(0,0,0,.44);        /* 2,03:1 no azul */
  /* borda do .btn--onDark: rgba(255,255,255,.34) de L103 da 1,97:1 no quadro
     #1F6F8B, abaixo dos 3:1 da 1.4.11. .58 e o minimo que passa (3,03:1);
     no quadro escuro sobe para 6,01:1. */
  --bp-line:rgba(255,255,255,.58);
  --bp-line-hi:rgba(255,255,255,.80);
}

/* ---- Especificidade desta camada, uma vez so ----
   "html[data-btn-plate]" vale (0,1,1). O elemento html nao e decoracao: e o
   componente C que desempata contra as camadas anteriores, que nunca usam
   seletor de tipo. Somado a cada alvo:
     :is(.btn--gold,#btnSubmit)        (1,1,1) vence [data-cta-plate] :is(...) (1,1,0)
     ...:is(:hover,:focus-visible)     (1,2,1) vence ...:hover  (1,2,0)
     ...:active                        (1,2,1) vence ...:active (1,2,0)
     :is(.btn--primary,.btn--petrol)   (0,2,1) vence [data-art-direction] .btn (0,2,0)
     #floorcare :is(.btn--petrol,...)  (1,2,1) vence [data-palette] #floorcare .btn--petrol (1,2,0)
     #floorcare ...:is(:hover,:focus)  (1,3,1) vence [data-palette] #floorcare .btn--petrol:hover (1,3,0)
     .btn:active / #floorcare .btn:active                     idem, pelo C
   Todos os empates em (A,B) caem no C=1 e, na duvida, na ordem: esta e a
   ultima camada do arquivo. Nenhum !important foi necessario. */

/* ---- Todos: a lista de transicao volta inteira ----
   "transition" e shorthand: redeclarar substitui a lista de L571-573, entao
   as cinco propriedades sao reescritas. So os tempos da sombra e do
   deslocamento mudam — a luz leva 200ms com --ease-settle, o objeto leva
   120ms, como o .compare__knob de L845-846. O fallback em --ease-settle nao
   e zelo: ele e declarado em html[data-art-direction] (L802), e um var() sem
   valor invalidaria o shorthand inteiro e zeraria TODAS as transicoes do
   botao se a direcao de arte fosse removida. */
html[data-btn-plate="rasante"] .btn{
  transition:
    background-color var(--t-btn) var(--ease),
    border-color var(--t-btn) var(--ease),
    color var(--t-btn) var(--ease),
    box-shadow var(--t-state) var(--ease-settle,var(--ease)),
    transform 120ms var(--ease);}

/* =========== NIVEL 1 — CONVERSAO: .btn--gold e #btnSubmit ===========
   O :is com #btnSubmit leva tudo a especificidade de id, como L1467 ja
   fazia. Vale tambem como triagem: #btnSubmit e .btn--petrol na marcacao
   (index.html L562), entao ele tambem casa a regra de nivel 2 abaixo — mas
   com A=0. O id vence, e ele fica no nivel que o papel dele pede.
   O anel de .5px de L1471 e reconduzido aqui: sem ele o filete voltaria de
   1,5px para 1px. O fallback --champagne evita que remover data-cta-plate
   invalide a box-shadow inteira e deixe a placa sem sombra nenhuma.
   A aresta vem ANTES do anel de proposito: sombras inset pintam na ordem,
   a primeira por cima. O topo passa a ser 1px de borda ouro + 1px de luz,
   e nao 1,5px de ouro. Troca medida: 3,79:1 de luz no pior quadro contra
   1,77:1 de ouro no mesmo quadro. Os outros tres lados seguem em 1,5px. */
html[data-btn-plate="rasante"] :is(.btn--gold,#btnSubmit){
  box-shadow:
    var(--bp-lip),
    inset 0 0 0 .5px var(--cta-line,var(--champagne)),
    var(--bp-foot),
    var(--bp-contact),
    var(--bp-cast);}

/* Hover e foco recebem exatamente a mesma resposta de luz: a aresta sobe de
   3,79:1 para 4,53:1, a projecao alonga e o filete passa ao ouro de hover.
   Nao ha troca de cor de placa aqui — o background continua em L1473. */
html[data-btn-plate="rasante"] :is(.btn--gold,#btnSubmit):is(:hover,:focus-visible){
  border-color:var(--cta-line-hover,var(--champagne));
  box-shadow:
    var(--bp-lip-hi),
    inset 0 0 0 .5px var(--cta-line-hover,var(--champagne)),
    var(--bp-foot),
    var(--bp-contact),
    var(--bp-cast-hi);}

/* O afundamento de L1479-1480 em preto puro: 2,03:1 contra o azul da placa
   (o valor navy de la dava 1,65:1). O translateY(1px) segue vindo de L578. */
html[data-btn-plate="rasante"] :is(.btn--gold,#btnSubmit):active{
  box-shadow:
    inset 0 0 0 .5px var(--cta-line-hover,var(--champagne)),
    var(--bp-press);}

/* .btn--sm: os CTAs do cabecalho (index.html L39) e do rodape (L631) sao
   placas de 42px. Projecao proporcional, e que nao encoste na base da barra
   de 80px do cabecalho. */
html[data-btn-plate="rasante"] :is(.btn--gold,#btnSubmit).btn--sm{
  box-shadow:
    var(--bp-lip),
    inset 0 0 0 .5px var(--cta-line,var(--champagne)),
    var(--bp-foot),
    var(--bp-contact),
    var(--bp-cast-sm);}
html[data-btn-plate="rasante"] :is(.btn--gold,#btnSubmit).btn--sm:is(:hover,:focus-visible){
  box-shadow:
    var(--bp-lip-hi),
    inset 0 0 0 .5px var(--cta-line-hover,var(--champagne)),
    var(--bp-foot),
    var(--bp-contact),
    var(--bp-cast-sm-hi);}

/* =========== NIVEL 2 — ACAO SECUNDARIA: .btn--primary e .btn--petrol ===========
   Aresta media e contato curto, sem pe e sem projecao longa: a placa esta
   assentada, nao levantada. Nenhum deslocamento — a diferenca entre este
   nivel e o de cima e justamente quem sai do plano.
   .btn--primary carrega animation:nf-flow (L1387) e um gradiente de 200%
   que roda em 24s: nada aqui toca background nem animation. A aresta .42
   da 3,82:1 no vale do gradiente (#0C283E) e 2,27:1 na crista (#1F6F8B) —
   ela respira junto com a onda, que e o comportamento correto para o unico
   botao que e, ele proprio, campo marinho. */
html[data-btn-plate="rasante"] :is(.btn--primary,.btn--petrol){
  box-shadow:var(--bp-lip-2),var(--bp-contact-2),var(--bp-cast-2);}
html[data-btn-plate="rasante"] :is(.btn--primary,.btn--petrol):is(:hover,:focus-visible){
  box-shadow:var(--bp-lip-2-hi),var(--bp-contact-2),var(--bp-cast-2-hi);}

/* =========== NIVEL 3 — FANTASMA E NAVEGACAO: .btn--ghost e .btn--onDark ===========
   Nao sao placas: sao tracos na superficie. Nenhuma projecao, em nenhum
   estado. O unico gesto e a linha do topo clarear.
   O .btn--ghost mantem o --sp-edge de L576 (sobre papel ele e um brilho de
   1,1:1, nao uma aresta) e so troca o fio navy .10 por preto .12: 1,31:1
   no papel contra 1,23:1 de hoje, e agora ele tambem existe sobre marinho. */
html[data-btn-plate="rasante"] .btn--ghost{
  box-shadow:var(--sp-edge),var(--bp-hair);}
html[data-btn-plate="rasante"] .btn--ghost:is(:hover,:focus-visible){
  box-shadow:var(--sp-edge),var(--bp-hair);}

/* O .btn--onDark e o unico da familia cujo limite e so a borda, e ela nao
   passa a WCAG 1.4.11 no quadro claro: rgba(255,255,255,.34) de L103 da
   1,97:1 sobre #1F6F8B. Subindo para .58 ela vai a 3,03:1 la e a 6,01:1 no
   quadro escuro. E a mudanca mais visivel desta camada em repouso: os
   "Call" ficam com contorno mais firme sobre o campo. */
html[data-btn-plate="rasante"] .btn--onDark{
  border-color:var(--bp-line);
  box-shadow:var(--bp-lip-3);}
html[data-btn-plate="rasante"] .btn--onDark:is(:hover,:focus-visible){
  border-color:var(--bp-line-hi);
  box-shadow:var(--bp-lip-3-hi);}

/* =========== #floorcare: a placa escura tem override proprio ===========
   [data-palette="atelie-operacional"] #floorcare .btn--petrol (L1203) e
   :hover (L1206) valem (1,2,0) e (1,3,0) — id + atributo. O #floorcare
   explicito aqui leva estas a (1,2,1) e (1,3,1) e o C desempata. Eles ja
   usam preto puro (L1205), que e a conclusao desta camada: aqui so entram a
   aresta de nivel 2 e a resposta de luz. As cores de L1203-1210 ficam.
   A aresta .42 da 2,77:1 contra o #10566E do sp-petrol-plate da logo. */
html[data-btn-plate="rasante"] #floorcare :is(.btn--petrol,.btn--ghost){
  box-shadow:var(--bp-lip-2),var(--bp-contact-2),var(--bp-cast-2);}
html[data-btn-plate="rasante"] #floorcare :is(.btn--petrol,.btn--ghost):is(:hover,:focus-visible){
  box-shadow:var(--bp-lip-2-hi),var(--bp-contact-2),var(--bp-cast-2-hi);}
/* vence [data-palette="atelie-operacional"] #floorcare .btn:active (L1211) */
html[data-btn-plate="rasante"] #floorcare .btn:active{
  box-shadow:var(--bp-press);}

/* =========== O DESLOCAMENTO — o unico transform novo do arquivo ===========
   Mesma porta do .compare:hover de L842: hover real e desktop. Abaixo de
   921px, em toque ou com motionMQ invalido, ele nem existe — so a luz muda.
   1px, sem overshoot, sem retorno elastico. :is(:hover,:focus-visible)
   garante que teclado e mouse recebam a MESMA resposta, inclusive esta. */
@media (hover:hover) and (min-width:921px){
  html[data-btn-plate="rasante"] :is(.btn--gold,#btnSubmit):is(:hover,:focus-visible){
    transform:translateY(-1px);}
}
/* A regra global de L520-525 so encurta a transicao para 1ms: o 1px ainda
   saltaria. Aqui ele sai. Mesma especificidade da regra acima (1,2,1) e
   ordem posterior: sem !important, ao contrario de L798. */
@media (prefers-reduced-motion:reduce){
  html[data-btn-plate="rasante"] :is(.btn--gold,#btnSubmit):is(:hover,:focus-visible){
    transform:none;}
}

/* =========== FOCO — a placa responde, o anel continua inteiro ===========
   O outline de 3px de L66 nao e removido, reduzido nem trocado por sombra:
   ele e o que a WCAG le. Acima, :focus-visible so foi somado a cada estado
   de hover, entao a placa responde igual aos dois. Aqui so a COR do anel.
   .cta-band (index.html L587) nasceu depois de L67 e nao entrou na lista:
   o anel dela ainda e var(--petrol), #16617A na brand-tones, que cai para
   1,16:1 sobre o quadro #1A5671 e 1,22:1 sobre #1F6F8B. E onde a lista ja
   alcanca, o --champagne #CBB68D chega a 2,87:1 no quadro claro — 0,13
   abaixo dos 3:1. --champagne-lite #D8C49C leva a 3,32:1, e a 8,85:1 no
   quadro escuro. Mesma familia do ouro, so um degrau acima. */
html[data-btn-plate="rasante"]
  :is(.site-header,.mobile-nav,.site-footer,.cta-band) :focus-visible{
  outline-color:var(--champagne-lite,var(--champagne));}

/* =========== MOBILE — a barra nao e uma placa pequena ===========
   Abaixo de 921px o botao e barra de 100% (.mobile-nav L460, .acc-body
   L487) ou item de coluna densa. Uma barra nao tem silhueta para projetar:
   a projecao vira uma mancha do lado inferior de toda a largura e o pe
   interno vira um filete preto de ponta a ponta, o mesmo motivo que tirou o
   sp-dark-foot do .hero__card em L1522-1526. A familia inteira cai para
   "costura na superficie": aresta e contato de 1px, mais nada.
   Cada nivel e repetido com o SEU seletor: um ".btn" generico aqui valeria
   (0,2,1) e perderia para o nivel 1, que tem A=1. */
@media (max-width:920px){
  html[data-btn-plate="rasante"] :is(.btn--gold,#btnSubmit),
  html[data-btn-plate="rasante"] :is(.btn--gold,#btnSubmit).btn--sm{
    box-shadow:
      var(--bp-lip),
      inset 0 0 0 .5px var(--cta-line,var(--champagne)),
      var(--bp-contact);}
  html[data-btn-plate="rasante"] :is(.btn--gold,#btnSubmit):is(:hover,:focus-visible),
  html[data-btn-plate="rasante"] :is(.btn--gold,#btnSubmit).btn--sm:is(:hover,:focus-visible){
    box-shadow:
      var(--bp-lip-hi),
      inset 0 0 0 .5px var(--cta-line-hover,var(--champagne)),
      var(--bp-contact);}
  html[data-btn-plate="rasante"] :is(.btn--primary,.btn--petrol){
    box-shadow:var(--bp-lip-2),var(--bp-contact-2);}
  html[data-btn-plate="rasante"] :is(.btn--primary,.btn--petrol):is(:hover,:focus-visible){
    box-shadow:var(--bp-lip-2-hi),var(--bp-contact-2);}
  html[data-btn-plate="rasante"] #floorcare :is(.btn--petrol,.btn--ghost){
    box-shadow:var(--bp-lip-2),var(--bp-contact-2);}
  html[data-btn-plate="rasante"] #floorcare :is(.btn--petrol,.btn--ghost):is(:hover,:focus-visible){
    box-shadow:var(--bp-lip-2-hi),var(--bp-contact-2);}
}

/* =========================================================================
   ESCALA EDITORIAL — hierarquia tipografica
   Camada localizada e reversivel. Remova data-type-scale="editorial" do
   <html> para voltar ao estado anterior. Nenhuma regra acima foi tocada.
   Somente tipografia e cor de texto: nada aqui altera grid, superficie,
   movimento ou interacao. Unica excecao de espacamento: 16px entre H2 e
   lead quando sao irmaos, porque colados eles se leem como um bloco so.
   Tres vozes, tres niveis:
     Newsreader  capitulo: H1, todo H2, titulo do impacto, citacoes
     Barlow      componente: H3/H4 dentro de paineis, pilares, FAQ, form
     Manrope     leitura: lead, corpo, rotulos
   Escala 1440 / 390: H1 72/38, H2 54/31, H3 30/24, H4 21/19, lead 21/18,
   corpo 17/16 (inalterado), rotulo 12/12.
   Corrige duas inversoes: no mobile o H2 de secao (26) ficava abaixo do
   .impact h3 (27); e .quote__kind renderizava a 16px porque .quote p
   (0,1,1) vencia .quote__kind (0,1,0), e o rotulo gritava mais que a
   citacao. O prefixo html[...] soma o tipo e vence as camadas anteriores
   sem !important; todo var() leva fallback porque --f-editorial vive em
   html[data-art-direction].
   ========================================================================= */
html[data-type-scale="editorial"]{
  --ts-serif:var(--f-editorial,'Newsreader',Georgia,'Times New Roman',serif);
  --ts-lead:#22384B;       /* lead acima do corpo (#3A4D5E): 7,8:1 sobre #DDCEBA */
  --ts-rule:#B08A3E;       /* filete dos rotulos: o mesmo ouro da borda dos CTAs */
  --ts-rule-dark:#D8C49C;  /* champagne-lite: #B08A3E cai a 1,7:1 no azul da logo */
}

/* ---- H1: o hero passa a dominar. max-width:16ch acompanha o corpo,
   entao a quebra continua em 3 linhas ---- */
html[data-type-scale="editorial"] #heroTitle{
  font-size:clamp(38px,5vw,72px);line-height:1.02;letter-spacing:-.02em;}

/* ---- H2: uma voz so em todas as aberturas de capitulo ---- */
html[data-type-scale="editorial"] .h2{
  font-family:var(--ts-serif);font-weight:500;letter-spacing:-.012em;text-wrap:balance;
  font-size:clamp(31px,3.75vw,54px);line-height:1.06;}

/* ---- H3: titulos de componente, um tamanho so ---- */
html[data-type-scale="editorial"] :is(.h3,.pillar h3,legend,.impact h3){
  font-size:30px;line-height:1.15;}
html[data-type-scale="editorial"] :is(.h3,.pillar h3,legend){letter-spacing:-.01em;}

/* ---- H4: blocos dentro de componentes ---- */
html[data-type-scale="editorial"] :is(.plan__block h3,.trust strong,.faq__btn,.aside h3){
  font-size:21px;line-height:1.25;}

/* ---- Lead: maior e mais escuro que o corpo ----
   A cor so vale nas secoes claras: .cta-band e #floorcare sao escuras e
   mantem os tons claros delas; o .hero__lead recebe so o tamanho. */
html[data-type-scale="editorial"] :is(.lead,.hero__lead){
  font-size:clamp(18px,1.46vw,21px);line-height:1.52;}
html[data-type-scale="editorial"] :is(#services,#planning,#approach,#team,#coverage,#quote) .lead{
  color:var(--ts-lead);}
html[data-type-scale="editorial"] .h2 + .lead{margin-top:16px;}

/* ---- Rotulo de capitulo: caps espacadas precedidas de filete ----
   inline-block, nao flex: se o rotulo quebra (eyebrow do hero no mobile)
   o filete acompanha so a primeira linha. h4.label e dt.label sao
   rotulos de componente e ficam como estao. */
html[data-type-scale="editorial"] :is(p.label,.hero__eyebrow){
  font-size:12px;letter-spacing:.16em;}
html[data-type-scale="editorial"] :is(p.label,.hero__eyebrow)::before{
  content:"";display:inline-block;width:28px;height:1px;margin-right:12px;
  vertical-align:.32em;background:var(--ts-rule);}
html[data-type-scale="editorial"] :is(.hero,#floorcare) :is(p.label,.hero__eyebrow)::before{
  background:var(--ts-rule-dark);}

/* ---- Depoimentos: a citacao e o conteudo do card, o rotulo e meta ---- */
html[data-type-scale="editorial"] .quote .quote__kind{
  font-size:12px;letter-spacing:.14em;line-height:1.5;}
html[data-type-scale="editorial"] .quote p:not(.quote__kind){
  font-family:var(--ts-serif);font-weight:500;font-size:19px;line-height:1.45;
  letter-spacing:-.005em;color:var(--navy,#0C283E);}

/* ---- Mobile: H1, H2 e lead resolvem pelo clamp ---- */
@media (max-width:920px){
  html[data-type-scale="editorial"] :is(.h3,.pillar h3,legend,.impact h3){font-size:24px;}
  html[data-type-scale="editorial"] :is(.plan__block h3,.trust strong,.faq__btn,.aside h3){font-size:19px;}
  html[data-type-scale="editorial"] .quote p:not(.quote__kind){font-size:18px;}
  /* .hero antes: :is(p.label,...) acima vale (0,2,2) e venceria (0,2,1) */
  html[data-type-scale="editorial"] .hero .hero__eyebrow{letter-spacing:.12em;}
}

/* =========================================================================
   BARALHO DE CAPITULOS — o mobile deixa de ser uma pilha de faixas
   Camada localizada e reversivel. Remova data-mobile-deck="baralho" do <html>
   para voltar ao mobile chapado de hoje. Nenhuma regra acima foi tocada.
   Tudo aqui vive dentro de @media (max-width:920px), inclusive o bloco de
   tokens: acima de 920px esta camada nao existe.
   As dezesseis camadas anteriores tratavam a pagina inteira ou o desktop em
   particular, e o telefone acumulou tres defasagens medidas:
     - o CTA de conversao desaparecia: .main-nav,.header-actions eram
       display:none na L466, entao em toda a rolagem nao havia caminho visivel
       para "Request a Quote", so dentro do menu fechado;
     - nao havia movimento: .sp-motion e aplicada pelo JS so acima de 920px
       (main.js L103), entao os cinco gestos nao valiam aqui;
     - --section-y:46px valia igual para as nove secoes, com H1 a 38px e H2 a
       31px depois da Escala Editorial, e no #quote o resumo aparecia ACIMA do
       formulario: a pessoa via a lista vazia antes de preencher.
   O conceito: as sete secoes claras viram cartas opacas sobre uma mesa
   marinha; #floorcare e #ready continuam bandas de sangria, janelas abertas
   para a mesa. Ritmo em dois tempos: placa, placa, placa, abertura.
   A MESA E O CAMPO QUE JA EXISTIA. .nf-field e position:fixed em z-index -1 e
   desenha no telefone, mas shouldAnimate() (main.js L1033) exige motionMQ,
   entao abaixo de 921px ele pinta UM quadro, parado em phase 0 — o comentario
   da main.js L713 diz isso. Nao e limitacao, e o que o conceito pede: no
   quadro parado os dois extremos do ciclo aparecem ao mesmo tempo no ESPACO
   (marinho #0C283E no canto superior esquerdo, azul da logo #1F6F8B na faixa
   anti-diagonal, marinho de novo embaixo a direita) e, por ser fixo a
   viewport, a diagonal fica ancorada na TELA: a carta rola, a diagonal nao,
   e cada capitulo chega sobre um tom diferente. Custo de pintura: zero, o
   canvas ja desenhava.
   O tom de cada carta e EXATAMENTE o tom que a secao tinha, so muda de
   elemento: nenhum contraste de texto se move. --ink #0C283E, --ink-soft
   #3A4D5E e --ink-muted #516475 seguem sobre os mesmos seis fundos.
   Especificidade: o alvo mais duro e o fundo das sete secoes, em
   [data-palette="atelie-operacional"] #services (L1191), que vale (1,1,0).
   O prefixo html[data-mobile-deck] soma o tipo e chega a (1,1,1), vencendo
   pelo C — o mesmo truque documentado em L1926. Zero !important na camada.
   As regras do campo areia (L1736-1771) valem (1,2,1) e venceriam, mas estao
   atras de [data-sand-engine="webgl"], que nunca e escrito no celular
   (live() exige wideMQ, main.js L1410): aqui elas nao existem.
   ========================================================================= */
@media (max-width:920px){

  html[data-mobile-deck="baralho"]{
    --dk-margin:16px;        /* recuo lateral da carta, igual dos dois lados */
    --dk-radius:16px;
    --dk-vale:16px;          /* padding vertical da secao = o vale de campo */
    --dk-vale-banda:24px;    /* onde o vale encontra uma banda de sangria */
    --dk-pad-y:26px;         /* ar interno vertical da carta */

    /* A silhueta da carta, na licao da Placa Rasante (L1845): inset medido
       contra o PROPRIO preenchimento, portanto independente de onde a carta
       cai no campo; outset em PRETO PURO, porque rgba(7,27,46,.x) desaparece
       sobre --nf-navy #0C283E (1,06:1), o erro que L1853 documenta.
       Aqui o diagnostico e o oposto do da Placa Rasante: o preenchimento
       nunca morre. Carta contra os quatro tons de --nf-flow, pior caso
       #E8DECF do #quote: 11,36 / 8,49 / 6,04 / 4,26:1. Com a granulacao do
       shader (LOOK.grain 0.08, +-10/255) o azul mais claro possivel e
       #297995, e ali ainda sao 3,70:1 — acima dos 3:1 da WCAG 1.4.11 em
       qualquer ponto da tela. A vinheta (0.10) escurece justamente as bordas
       da viewport, onde a carta toca a margem: ajuda.
       O que esta errado e o vocabulario herdado da camada 1: --sp-edge
       (L572, branco .72) sobre uma carta quase branca rende 1,14:1 no mineral
       e 1,04:1 no paper. A crista nao existe, e nao ha crista aqui. */
    --dk-fio:inset 0 0 0 1px rgba(12,40,62,.52);
    --dk-contact:0 1px 0 rgba(0,0,0,.38);
    --dk-cast:0 16px 24px -16px rgba(0,0,0,.58);
  }

  /* ---- O piso da mesa: a camada nao depende de estado de runtime ----
     Sem isto, num telefone sem WebGL data-field-engine nunca e escrito, a
     mesa cai no --paper #FBF8F2 do body (L67) e a carta #E6E5DF colapsa a
     1,20:1: o baralho desaparece. Com isto a mesa e marinho chapado
     (11,36 a 14,27:1 contra as cartas) e o shader, quando existe, pinta por
     cima. L1601-1602 declaram o mesmo valor com mais especificidade, entao
     nao ha disputa. */
  html[data-mobile-deck="baralho"]{background-color:var(--nf-navy,#0C283E);}
  html[data-mobile-deck="baralho"] body{background:transparent;}

  /* ---- As sete secoes claras deixam de ser faixa e passam a ser campo ----
     position:relative nao e decoracao: hoje, no celular, nenhuma delas tem
     position (a unica declaracao esta em L1738, atras do gate do sand-engine),
     entao cada .sf-host{position:absolute;inset:0} resolve contra o bloco
     contendo inicial — sete caixas do tamanho da viewport ancoradas na origem
     do documento. Nada pinta (o host nao tem fundo e o espelho e
     visibility:hidden), mas e armadilha para o que vier depois. Verificado que
     nenhum absoluto interno re-ancora: .rail (L192), .pillars (L283) e
     .panel__photo (L215) ja tem ancestral posicionado proprio.
     isolation:isolate NAO entra. L1739 existe em par com a rede de seguranca
     background-color:var(--sf-sand) de L1745, e so e necessaria quando um
     filho negativo precisa pintar acima de um fundo pintado da secao. Com a
     secao transparente nao ha fundo para vencer, e isolar custaria sete
     contextos de empilhamento e inverteria a intencao da camada: a mesa tem
     de ficar atras de tudo. */
  html[data-mobile-deck="baralho"]
    :is(#services,#planning,#approach,#team,#impact,#coverage,#quote){
    position:relative;
    background-color:transparent;
    background-image:none;
    box-shadow:none;              /* a aresta interna do #planning (L1198) */
    padding:var(--dk-vale) 0;}

  /* ---- A carta ----
     O fio e box-shadow inset, nao border: mantem os 20px de padding intactos
     (borda da carta ate o texto = 16 + 20 = 36px) e escapa do arredondamento
     de border-width que L1470 ja documenta.
     A extensao horizontal das sombras e obrigatoriamente negativa
     (24/2 - 16 = -4px): body{overflow-x:hidden} (L68) faz do body um
     scrollport no eixo x, e qualquer sombra passando da margem de 16px seria
     recortada na borda da tela.
     Sem overflow na carta: a grade e o fio sao background-image e inset, ja
     recortados pelo border-radius, e overflow cortaria o outline de foco dos
     controles (L74: 3px mais 2px de offset). O controle mais externo esta a
     20px da aresta e os botoes width:100% ficam com 15px de folga. */
  html[data-mobile-deck="baralho"]
    :is(#services,#planning,#approach,#team,#impact,#coverage,#quote) > .wrap{
    margin:0 var(--dk-margin);
    padding:var(--dk-pad-y) 20px;
    border-radius:var(--dk-radius);
    box-shadow:var(--dk-fio),var(--dk-contact),var(--dk-cast);}

  /* ---- O tom e a grade de cada capitulo, movidos da secao para a carta ----
     Copiados sem mudanca dos lugares onde vivem hoje no celular: os .bg-* da
     camada 1 (L713-719) e os overrides por id da camada 4 (L1191-1256).
     As grades ficam com o periodo original por fidelidade. Registrado: numa
     carta de 358px o periodo de 116px deixa so tres linhas visiveis, e
     reduzi-lo para 58px e um ajuste de uma linha se o efeito tiver de existir
     na largura da carta. As linhas medem 1,04 a 1,06:1 sobre o proprio tom:
     sao textura, nunca contraste. #impact e #coverage nunca tiveram grade. */
  html[data-mobile-deck="baralho"] #services > .wrap{
    background-color:var(--mineral,#E6E5DF);
    background-image:repeating-linear-gradient(90deg,rgba(7,27,46,.028) 0 1px,rgba(0,0,0,0) 1px 116px);}
  html[data-mobile-deck="baralho"] #planning > .wrap{
    background-color:var(--mineral-soft,#EFEEE9);
    background-image:repeating-linear-gradient(0deg,rgba(7,27,46,.022) 0 1px,rgba(0,0,0,0) 1px 100px);}
  html[data-mobile-deck="baralho"] #approach > .wrap{
    background-color:var(--paper,#FBF8F2);
    background-image:
      repeating-linear-gradient(90deg,rgba(14,39,64,.03) 0 1px,rgba(0,0,0,0) 1px 116px),
      repeating-linear-gradient(0deg,rgba(14,39,64,.024) 0 1px,rgba(0,0,0,0) 1px 116px);}
  html[data-mobile-deck="baralho"] #team > .wrap{
    background-color:var(--sand,#ECE4D7);
    background-image:repeating-linear-gradient(90deg,rgba(7,27,46,.028) 0 1px,rgba(0,0,0,0) 1px 116px);}
  html[data-mobile-deck="baralho"] #impact > .wrap{
    background-color:var(--ivory,#F4EFE6);}
  html[data-mobile-deck="baralho"] #coverage > .wrap{
    background-color:var(--paper,#FBF8F2);}
  html[data-mobile-deck="baralho"] #quote > .wrap{
    background-color:var(--sand-deep,#E8DECF);
    background-image:repeating-linear-gradient(90deg,rgba(7,27,46,.028) 0 1px,rgba(0,0,0,0) 1px 116px);}

  /* ---- Vale entre cartas e as quatro juncoes com as bandas ----
     Vale normal: 16 + 16 = 32px. O --dk-cast morre 12px abaixo da carta
     (16 + 24/2 - 16), deixando 20px de campo limpo no meio do vale.
     Junto das bandas o vale sobe para 24px: #floorcare carrega um filete de
     ouro no topo e um fio preto na base (L1344) e a .cta-band carrega o
     filete champanhe (L1803), e o gate do shader nao desfaz nenhum dos dois.
     Com 16px a sombra da carta pousaria em cima do filete. --section-y nao e
     tocado: ele tambem governa as duas bandas. */
  html[data-mobile-deck="baralho"] #services{padding-top:var(--dk-vale-banda);}
  html[data-mobile-deck="baralho"] #planning{padding-bottom:var(--dk-vale-banda);}
  html[data-mobile-deck="baralho"] #approach{padding-top:var(--dk-vale-banda);}
  html[data-mobile-deck="baralho"] #quote{padding-bottom:var(--dk-vale-banda);}

  /* ---- A abertura de capitulo fecha o ar interno ----
     O vale agora separa os capitulos, entao o espaco abaixo do cabecalho pode
     diminuir. Coerente com H2 31px/1,06 e lead 18px/1,52 da camada 16. */
  html[data-mobile-deck="baralho"] :is(#services,#approach,#quote) .sec-head{margin-bottom:22px;}
  html[data-mobile-deck="baralho"] #planning .plan__head{margin-bottom:22px;}

  /* ---- Paineis dentro de paineis ----
     Regra de decisao: dentro de uma carta, so mantem moldura propria a
     superficie que carrega um papel tonal diferente. Mantem-se .aside
     (marinho com nf-flow), .impact (painel sage), .accordion (superficie de
     controle), .team__photo, .serves li e .step-pill. Perdem a moldura as
     tres abaixo, que sem isso ficariam com texto a 56px da borda da tela.
     O achatamento do #impact .quote e o julgamento mais discutivel da camada:
     quatro cartoes brancos empilhados dentro de uma carta de marfim viram
     citacoes separadas por filete. Para reverter so isto, apague o bloco do
     #impact .quote e o gap:0 do #impact .quotes. */
  html[data-mobile-deck="baralho"] #quote .card,
  html[data-mobile-deck="baralho"] #approach .process{
    background:transparent;border:0;border-radius:0;box-shadow:none;padding:0;}
  html[data-mobile-deck="baralho"] #approach .process{
    overflow:visible;border-top:1px solid var(--line);}
  /* a costura branca vertical de cada item (L723) viraria um risco solto */
  html[data-mobile-deck="baralho"] #approach .process li{box-shadow:none;}
  html[data-mobile-deck="baralho"] #impact .quotes{gap:0;}
  html[data-mobile-deck="baralho"] #impact .quote{
    background:transparent;border:0;border-radius:0;box-shadow:none;
    padding:20px 0;border-bottom:1px solid var(--line);}
  html[data-mobile-deck="baralho"] #impact .quote:last-child{
    border-bottom:0;padding-bottom:0;}

  /* ---- O CTA volta ao cabecalho ----
     Orcamento em 390px, 350px uteis: logo 134 (L1555) + 8 + Quote ~81 + 8 +
     Menu ~97 = 328px, 22px de folga. Em <=380px a logo cai a 118 e sobram 36.
     Com o gap:14px de hoje (L464) dariam 340px, apertado.
     .nav-toggle{margin-left:auto} (L467) existe porque ele e hoje o unico item
     a direita; sem zerar isso, DUAS margin-left:auto dividem a sobra entre si
     e abre vao entre a logo e o Quote E entre o Quote e o Menu.
     O "Call Now" fica so no menu: o rotulo completo "Request a Quote" daria um
     botao de ~161px e estouraria a barra em 408px, por isso o span .btn__long
     sai daqui. O aria-label no HTML preserva o nome acessivel completo.
     A sombra do botao nesta barra ja estava resolvida em L2106. */
  html[data-mobile-deck="baralho"] .header-bar{gap:8px;}
  html[data-mobile-deck="baralho"] .header-actions{display:flex;margin-left:auto;}
  html[data-mobile-deck="baralho"] .nav-toggle{margin-left:0;}
  html[data-mobile-deck="baralho"] .header-actions .btn--onDark{display:none;}
  html[data-mobile-deck="baralho"] .btn__long{display:none;}

  /* ---- Hero em tela cheia ----
     68px e a altura real da barra no celular (L464); --header-h continua 80px
     e nao serve aqui. A linha vh fica antes da dvh como fallback.
     Orcamento em 390x844, 776px disponiveis: 40 + 39 (eyebrow em 2 linhas) +
     16 + 116 (H1 38px/1,02 em 3 linhas) + 20 + 110 (lead em 4 linhas) + 80
     (acoes) + 34 (gap) + 128 (a faixa) + 60 = 643px, com 133px de folga.
     A altura e deterministica: stabiliseHero() (main.js L256) reserva o maximo
     entre as tres cenas, entao este calculo e o pior caso, nao a media. */
  html[data-mobile-deck="baralho"] .hero{
    min-height:calc(100vh - 68px);
    min-height:calc(100dvh - 68px);}

  /* ---- A placa de credenciais vira faixa de rolagem ----
     Quatro itens empilhados custavam 342px de altura; em faixa custam 128px
     (14 de padding + 40 da linha do contador + 12 + 48 da faixa + 14), e os
     214px liberados sao o que deixa o H1 dominar acima da dobra.
     A altura da faixa e deterministica em 48px — max(32 do disco, 26 da
     linha) + 16 de padding — porque white-space:nowrap impede a segunda linha.
     Em 350px de carta aparecem 1,4 itens: o segundo espia e a faixa se
     anuncia como rolavel sem precisar de seta.
     overflow-y:hidden e explicito: com visible no outro eixo a computacao
     viraria auto e o strip ganharia rolagem vertical parasita. */
  /* min-width:0 nao e detalhe: o .hero__card e item de um grid de uma coluna
     (L457) e 1fr resolve para minmax(auto,1fr), cujo minimo automatico e o
     min-content do item. Com a faixa em white-space:nowrap esse min-content
     vale 816px, entao o track inteiro se expandia e o eyebrow, o lead e a
     propria faixa saiam pela direita, cortados por body{overflow-x:hidden}
     (L68) — medido. Zerando o minimo automatico, o track volta aos 350px e o
     overflow-x:auto da faixa passa a fazer o trabalho dela. */
  html[data-mobile-deck="baralho"] .hero__card{padding:14px 0;min-width:0;}
  html[data-mobile-deck="baralho"] .hero__count{padding:0 18px 15px;}
  html[data-mobile-deck="baralho"] .cred{
    display:flex;margin-top:12px;
    overflow-x:auto;overflow-y:hidden;
    scroll-snap-type:x mandatory;overscroll-behavior-x:contain;
    -webkit-overflow-scrolling:touch;scrollbar-width:none;}
  html[data-mobile-deck="baralho"] .cred::-webkit-scrollbar{display:none;}
  html[data-mobile-deck="baralho"] .cred li{
    flex:0 0 auto;white-space:nowrap;gap:10px;font-size:15px;
    padding:8px 18px;border-bottom:0;
    border-right:1px solid var(--hc-rule,rgba(12,40,62,.18));
    scroll-snap-align:start;}
  html[data-mobile-deck="baralho"] .cred li:last-child{border-right:0;}
  html[data-mobile-deck="baralho"] .cred__ico{width:32px;height:32px;}
  /* o <ul> ganhou tabindex no HTML, senao a faixa e inalcancavel por teclado
     (WCAG 2.1.1): os li nao tem nada focavel dentro. O anel herdado de L75
     seria champanhe sobre a placa osso; o azul da logo, que ja e a borda da
     placa, da 3,2:1. offset negativo para o anel nao sair da carta. */
  html[data-mobile-deck="baralho"] .cred:focus-visible{
    outline-color:var(--hc-line,#1F6F8B);outline-offset:-3px;}

  /* ---- #quote: o resumo passa para depois do formulario ----
     .quote-grid ja e uma coluna no celular (L506) e display:grid faz dos
     filhos itens de grid, entao order aplica. Ninguem declara order no
     arquivo. Nota de acessibilidade, no espirito de L1163 e L2086: order muda
     a ordem VISUAL e nao a de foco (WCAG 2.4.3). Os dois links da .aside
     (tel: e mailto:) seguem recebendo foco antes do formulario. Aceitavel
     porque a .aside nao tem controle de formulario e "Your selection so far"
     continua fazendo sentido como preambulo na ordem do DOM. A alternativa,
     mover o <aside> no HTML e usar order:-1 acima de 921px, so transferiria o
     desalinhamento para o desktop. */
  html[data-mobile-deck="baralho"] #quote .card{order:1;}
  html[data-mobile-deck="baralho"] #quote .aside{order:2;}
}

/* ---- Onde a tela e alta, o H1 cresce ----
   3 linhas a 44px/1,02 custam 18px a mais: 661px dos 776 disponiveis em 844.
   Em 667 nao cabe, por isso o gate por altura. Em 44px a coluna de 350px ainda
   da ~17 caracteres por linha e o titulo de 51 continua em 3 linhas.
   Empate de especificidade com L2157: os dois valem (1,1,1) e quem decide e a
   ordem, que e o motivo de esta camada ficar no fim do arquivo. */
@media (max-width:920px) and (min-height:760px){
  html[data-mobile-deck="baralho"] #heroTitle{font-size:44px;}
}

/* ---- Telas curtas: a escada de concessoes do hero ----
   Em 390x667 sobram 599px e o hero pede 643: faltam 44. A escada devolve 50,
   nesta ordem de prejuizo crescente. alignHeroActions() (main.js L274)
   reescreve o margin-top inline dos botoes, mas o valor vem do actionsGap
   medido em L260, entao a reducao daqui e respeitada sem tocar no JS.
   Se ainda estourar, a escada continua: .cred__ico 32->28, padding do card
   14->10, lead line-height 1,52->1,45. O padding-bottom do .hero__inner NUNCA
   desce de 46px (14 do bottom dos dots + 24 do alvo + 8 de folga), senao o
   texto encosta na navegacao do carrossel. */
@media (max-width:920px) and (max-height:720px){
  html[data-mobile-deck="baralho"] .hero__inner{padding-top:24px;gap:22px;}
  html[data-mobile-deck="baralho"] .hero h1{margin:10px 0 14px;}
  html[data-mobile-deck="baralho"] .hero__actions{margin-top:20px;}
}

/* =========================================================================
   AS ENTRADAS VEM DA ROLAGEM, NAO DO RELOGIO
   Parte da mesma camada: sai com data-mobile-deck. Reusa os @keyframes da
   camada 2 (L828-835) sem redefinir nenhum.
   Quatro verificacoes que moldaram a escrita:
   1. L888 (animation-play-state:paused em secao que nao entrou) nao pode
      interferir: .sp-motion so e aplicada com motionMQ, >=921px (main.js L106)
      e removida no change (L115). Nao existe viewport em que (max-width:920px)
      e .sp-motion coexistam. A classe is-in continua sendo marcada aqui, e
      continua inofensiva.
   2. O @media (prefers-reduced-motion:reduce) da L537 NAO cobre isto. Ele
      forca animation-duration:1ms, e numa progress timeline a duracao e
      IGNORADA: o progresso vem da rolagem. Sem o gate explicito abaixo, quem
      pede movimento reduzido receberia a animacao inteira.
   3. Degradacao: sem suporte a animation-timeline o @supports descarta o bloco
      todo e as cartas ficam estaticas, exatamente como o mobile de hoje. O
      "both" cuida do resto: os @keyframes de L828-835 so tem "from", entao o
      100% implicito e o estilo do proprio elemento — a logica do backwards
      de L809.
   4. animation-timeline e animation-range vem DEPOIS do shorthand animation,
      que reseta os dois. Mesmo cuidado de L1891 e L2017.
   Faixas em px, nao em porcentagem: a faixa "entry" tem o comprimento do
   proprio elemento, entao entry 5% a 55% numa carta de 2000px se arrastaria
   por 1000px de rolagem. Em px a entrada custa a mesma distancia para a carta
   e para um li.
   sp-seat fica de fora por duas razoes: o "from" dele tem lista de tres
   sombras, e interpolar box-shadow exige listas do mesmo tamanho e o mesmo
   padrao inset/outset — casa com a carta (fio+contato+cast) e nao casa com
   #impact .quote nem com .accordion; e box-shadow nao compoe no compositor,
   entao sete cartas repintando por quadro de rolagem num telefone e o custo
   errado. Fica sp-rise, que e so opacity e transform. Mesma de-escalacao
   mobile de L2096.
   Zero nth-child. As ~40 regras de animation-delay do desktop (L941-L1017)
   existem porque um relogio precisa de escalonamento manual; com view() cada
   li tem a sua propria faixa e a cascata e a geometria.
   Tres exclusoes deliberadas:
     .aside   carrega animation:nf-flow 24s infinite (L1404), que roda no
              celular; declarar animation nela apagaria o fluxo, o problema
              que L1450 resolveu com lista dupla. Como ela agora e o ultimo
              bloco do #quote, nao ter entrada e coerente.
     controles .chip, .btn, .step-pill, .faq__btn e .dot ficam de fora por
              L844: respondem a pessoa, nunca sozinhos.
     as bandas #floorcare e #ready nao animam. Uma janela nao se distribui na
              mesa, e e esse contraste que faz o baralho ser baralho.
   ========================================================================= */
@supports (animation-timeline:view()){
@media (max-width:920px) and (prefers-reduced-motion:no-preference){

  /* a carta e distribuida na mesa */
  html[data-mobile-deck="baralho"]
    :is(#services,#planning,#approach,#team,#impact,#coverage,#quote) > .wrap{
    --sp-rise:14px;
    animation:sp-rise 1s var(--ease-settle,var(--ease)) both;
    animation-timeline:view();
    animation-range:entry 32px entry 260px;}

  /* o filete do rotulo de capitulo se desenha (o ::before de L2189) */
  html[data-mobile-deck="baralho"]
    :is(#services,#planning,#approach,#team,#impact,#coverage,#quote) p.label::before{
    transform-origin:0 50%;
    animation:sp-trace 1s var(--ease-machine,var(--ease)) both;
    animation-timeline:view();
    animation-range:entry 64px entry 240px;}

  html[data-mobile-deck="baralho"]
    :is(#services,#planning,#approach,#team,#impact,#coverage,#quote) .h2{
    --sp-rise:8px;
    animation:sp-rise 1s var(--ease-settle,var(--ease)) both;
    animation-timeline:view();
    animation-range:entry 64px entry 300px;}

  html[data-mobile-deck="baralho"]
    :is(#services,#planning,#approach,#team,#coverage) .lead{
    animation:sp-fade 1s var(--ease-settle,var(--ease)) both;
    animation-timeline:view();
    animation-range:entry 80px entry 320px;}

  /* corpo de cada capitulo: cada elemento tem o SEU view(), entao a cascata
     nasce da posicao de cada um, sem delay declarado em lugar nenhum */
  html[data-mobile-deck="baralho"] #services .accordion,
  html[data-mobile-deck="baralho"] #approach .pillar,
  html[data-mobile-deck="baralho"] #impact .quote,
  html[data-mobile-deck="baralho"] #impact .impact,
  html[data-mobile-deck="baralho"] #quote .card{
    --sp-rise:10px;
    animation:sp-rise 1s var(--ease-settle,var(--ease)) both;
    animation-timeline:view();
    animation-range:entry 48px entry 260px;}

  html[data-mobile-deck="baralho"] #team .trust li{
    --sp-rise:6px;
    animation:sp-rise 1s var(--ease-settle,var(--ease)) both;
    animation-timeline:view();
    animation-range:entry 32px entry 200px;}

  html[data-mobile-deck="baralho"] #planning .plan__block h3,
  html[data-mobile-deck="baralho"] #team .team__photo,
  html[data-mobile-deck="baralho"] #coverage .cov__facts > div,
  html[data-mobile-deck="baralho"] #coverage .serves li{
    animation:sp-fade 1s var(--ease-settle,var(--ease)) both;
    animation-timeline:view();
    animation-range:entry 32px entry 220px;}

  /* o filete dos pilares se traca, como em L982 no desktop */
  html[data-mobile-deck="baralho"] #approach .pillars__rule{
    transform-origin:0 50%;
    animation:sp-trace 1s var(--ease-machine,var(--ease)) both;
    animation-timeline:view();
    animation-range:entry 48px entry 280px;}
}}

/* =========================================================================
   SELETOR E INDICE CORRIDO — o menu e o rodape do mobile encolhem
   Camada localizada e reversivel. Remova data-mobile-chrome="seletor-indice"
   do <html> para voltar ao menu e ao rodape do Baralho de Capitulos. Nenhuma
   regra acima foi tocada. Tudo vive dentro de @media (max-width:920px), menos
   o .nav-scrim{display:none} logo abaixo, que so deixa o veu inerte.
   Medido a 390x844 antes desta camada:
     - o menu aberto tinha ~535px e a pagina seguia rolando por tras dele;
     - "Request a Quote" e "Call" do menu tinham o texto colado na borda:
       .mobile-nav a{display:block;padding:13px 0} (L475) vale (0,1,1) e
       vence o .btn (0,1,0), zerando o padding lateral e a centralizacao;
     - o Call perdia a base: .mobile-nav .btn{border-bottom:0} (L477), e o
       .btn--onDark e o unico da familia cujo limite e so a borda. O ouro
       escapava porque o border de [data-cta-plate] vale (1,1,0);
     - o rodape tinha 1064px, mais que uma tela inteira.
   O menu vira um SELETOR: a mesma lista, numa janela de 4 linhas de 44px
   que encaixa cada item no centro, aberta ja no capitulo atual (markChapter,
   main.js secao Mobile nav). Alvo ~267px. O rodape vira INDICE CORRIDO:
   logo | ligar | e-mail | Quote numa linha, espelho do cabecalho, e os
   servicos em texto corrido. Saem no mobile a tagline (repetia o copyright),
   a coluna Company (repetia o menu) e o aviso de preview. Alvo <333px, meia
   tela de 390x667.
   Especificidade: o prefixo html[data-mobile-chrome] soma o tipo, o mesmo
   truque de L1926. Dois !important, e so eles: u-mb-18 e u-mt-12 (L550-553)
   reproduzem a precedencia de inline, e nada sem !important os vence.
   ========================================================================= */
.nav-scrim{display:none;}

@media (max-width:920px){

  /* ---- O menu: limite de altura ----
     Em tela deitada ou baixa o painel nunca passa do fim da viewport e rola
     por dentro. openCollapse() mede scrollHeight do .collapse, que ja respeita
     este teto, entao a animacao de altura continua certa. */
  html[data-mobile-chrome="seletor-indice"] .mobile-nav .collapse__inner{
    padding:10px var(--pad) 18px;
    max-height:calc(100vh - 68px);
    max-height:calc(100dvh - 68px);
    overflow-y:auto;
    overscroll-behavior:contain;}

  /* ---- O seletor ----
     176px = 4 linhas de 44: com o item atual no centro ficam uma linha
     inteira acima, uma abaixo e MEIA linha em cada ponta, esmaecida pela
     mascara. A meia linha fantasma e o que anuncia a rolagem, sem seta.
     Com 154px (3,5 linhas) a lasca era de 11px e a mascara de 22px a apagava
     por inteiro: a janela parecia uma lista fechada de tres itens.
     position:relative faz da lista o offsetParent dos links, que e a conta
     de centralizar do markChapter. overscroll-behavior:contain impede que o
     fim da lista puxe a pagina, que esta travada logo abaixo. */
  html[data-mobile-chrome="seletor-indice"] .nav-list{
    position:relative;
    display:flex;flex-direction:column;
    height:176px;
    overflow-y:auto;overflow-x:hidden;
    scroll-snap-type:y mandatory;
    overscroll-behavior:contain;
    scrollbar-width:none;
    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 30px,#000 calc(100% - 30px),transparent 100%);
            mask-image:linear-gradient(to bottom,transparent 0,#000 30px,#000 calc(100% - 30px),transparent 100%);}
  html[data-mobile-chrome="seletor-indice"] .nav-list::-webkit-scrollbar{display:none;}
  /* 66 = (176 - 44) / 2: o primeiro e o ultimo item tambem chegam ao centro.
     Pseudo-elementos e nao padding, porque o padding do fim do eixo nem
     sempre conta como area rolavel. */
  html[data-mobile-chrome="seletor-indice"] .nav-list::before,
  html[data-mobile-chrome="seletor-indice"] .nav-list::after{content:"";flex:0 0 66px;}
  /* o divisor de cada linha continua vindo de L475 e L1418 */
  html[data-mobile-chrome="seletor-indice"] .nav-list a{
    flex:0 0 44px;height:44px;
    display:flex;align-items:center;gap:12px;
    padding:0;
    scroll-snap-align:center;}
  /* capitulo atual: o filete dos rotulos da Escala Editorial (L2189) */
  html[data-mobile-chrome="seletor-indice"] .nav-list a[aria-current="location"]{color:#fff;}
  html[data-mobile-chrome="seletor-indice"] .nav-list a[aria-current="location"]::before{
    content:"";flex:0 0 20px;height:1px;
    background:var(--champagne-lite,#D9C49A);}

  /* ---- Quote | Call lado a lado, e o conserto dos dois ----
     A cor da base do Call ja vem do Rasante (L2043, (0,2,1) vence o
     border-bottom:0 de L477 na cor); faltavam largura e estilo. No ouro e
     redundante e inofensivo. */
  html[data-mobile-chrome="seletor-indice"] .nav-actions{
    display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:14px;}
  html[data-mobile-chrome="seletor-indice"] .mobile-nav .btn{
    display:flex;width:auto;margin-top:0;
    padding:12px 14px;min-height:48px;
    border-bottom-style:solid;border-bottom-width:1px;}
  /* o numero completo continua no aria-label do link */
  html[data-mobile-chrome="seletor-indice"] .nav-tel{display:none;}

  /* ---- A pagina fica travada sob um veu ----
     A trava esta no BODY, nao no html. Com html{overflow:hidden} o overflow
     do body deixa de propagar para a viewport, o body{overflow-x:hidden} de
     L68 vira scroll container de verdade, e o cabecalho sticky passa a grudar
     no body, que nao rola: ele sai da tela junto com o topo do documento.
     No body o valor propaga e a viewport e que deixa de rolar.
     O veu fica em z-index 99, logo abaixo do cabecalho sticky (100, L118),
     entao o menu pendurado nele pinta por cima. touch-action:none impede que
     um arrasto comecado no veu role a pagina onde o overflow nao basta. */
  html[data-mobile-chrome="seletor-indice"].nav-open body{overflow:hidden;}
  html[data-mobile-chrome="seletor-indice"] .nav-scrim{
    display:block;position:fixed;inset:0;z-index:99;
    background:rgba(7,27,46,.56);
    touch-action:none;
    opacity:0;visibility:hidden;
    transition:opacity var(--t-panel) var(--ease),visibility 0s linear var(--t-panel);}
  html[data-mobile-chrome="seletor-indice"].nav-open .nav-scrim{
    opacity:1;visibility:visible;
    transition:opacity var(--t-panel) var(--ease);}

  /* ---- O rodape: indice corrido ----
     Linha 1 espelha o cabecalho: logo a esquerda, acoes a direita.
     Orcamento em 390, 350px uteis: 134 + 8 + 44 + 4 + 44 + 8 + ~81 = 323.
     Em <=380 a logo cai a 118 e em 360 sobram 13 de 320.
     display:contents em .ft-brand e .ft-contact faz da logo, da lista de
     contato e do botao itens diretos da grade. Sao <div> sem papel
     semantico, entao nada se perde na arvore de acessibilidade. */
  html[data-mobile-chrome="seletor-indice"] .site-footer{padding:22px 0 16px;}
  html[data-mobile-chrome="seletor-indice"] .footer-grid{
    grid-template-columns:minmax(0,1fr) auto auto;
    column-gap:8px;row-gap:14px;
    align-items:center;}
  html[data-mobile-chrome="seletor-indice"] :is(.ft-brand,.ft-contact){display:contents;}
  html[data-mobile-chrome="seletor-indice"] :is(.ft-brand p,.ft-company,.ft-contact h4,.ft-preview){display:none;}
  /* !important: u-mb-18 (L553) */
  html[data-mobile-chrome="seletor-indice"] .site-footer .logo--footer{
    grid-area:1/1;width:134px;height:39px;margin-bottom:0 !important;}

  /* ligar e e-mail viram botoes de icone de 44px, o alvo de toque minimo.
     O texto fica a font-size 0 e o nome acessivel vem do aria-label. Os
     tracos sao os mesmos da .aside do #quote (index.html L431-432).
     O icone e absoluto e centrado por inset+margin:auto: como item de grade
     ele dividia a caixa com o texto invisivel, que tambem vira item, e subia
     6px do centro (medido). */
  html[data-mobile-chrome="seletor-indice"] .ft-contact ul{grid-area:1/2;display:flex;gap:4px;}
  html[data-mobile-chrome="seletor-indice"] .ft-contact li{padding:0;}
  html[data-mobile-chrome="seletor-indice"] .ft-contact li a{
    position:relative;display:block;
    width:44px;height:44px;
    border:1px solid rgba(233,238,241,.28);
    border-radius:var(--r-control);
    font-size:0;line-height:0;
    transition:border-color var(--t-btn) var(--ease);}
  html[data-mobile-chrome="seletor-indice"] .ft-contact li a::before{
    content:"";position:absolute;inset:0;margin:auto;width:18px;height:18px;
    background-color:var(--nf-text-muted,#E2E9EE);
    -webkit-mask:var(--ic) center/contain no-repeat;
            mask:var(--ic) center/contain no-repeat;
    transition:background-color var(--t-btn) var(--ease);}
  html[data-mobile-chrome="seletor-indice"] .ft-contact a[href^="tel:"]{
    --ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 4h4l2 5-2.5 1.5a11 11 0 005 5L15 13l5 2v4a1 1 0 01-1 1A16 16 0 014 5a1 1 0 011-1z'/%3E%3C/svg%3E");}
  html[data-mobile-chrome="seletor-indice"] .ft-contact a[href^="mailto:"]{
    --ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='14' rx='2'/%3E%3Cpath d='M3 7l9 6 9-6'/%3E%3C/svg%3E");}
  html[data-mobile-chrome="seletor-indice"] .ft-contact li a:is(:hover,:focus-visible){
    border-color:var(--champagne-lite,#D9C49A);}
  html[data-mobile-chrome="seletor-indice"] .ft-contact li a:is(:hover,:focus-visible)::before{
    background-color:var(--champagne-lite,#D9C49A);}

  /* !important: u-mt-12 (L550). O rotulo curto e o mesmo do cabecalho;
     .ft-long e classe propria porque .btn__long ja some no mobile pelo
     baralho (L2419), e esta camada tem de sair sozinha. O rotulo inteiro vai
     num <span> externo: o .btn e inline-flex com gap:8px (L99), e um span
     solto viraria item flex, somando 8px entre "a" e "Quote" no desktop. */
  html[data-mobile-chrome="seletor-indice"] .ft-contact .btn{grid-area:1/3;margin-top:0 !important;}
  html[data-mobile-chrome="seletor-indice"] .ft-long{display:none;}

  /* servicos em texto corrido: o separador mora dentro do li anterior, entao
     o "·" nunca abre linha; o espaco do codigo-fonte entre os li completa o
     respiro a direita e e o unico ponto de quebra. O texto alternativo vazio
     tira o ponto da leitura de tela onde a sintaxe existe. */
  html[data-mobile-chrome="seletor-indice"] .ft-services{
    grid-column:1/-1;grid-row:2;
    border-top:1px solid var(--nf-line,rgba(233,238,241,.16));
    padding-top:14px;}
  html[data-mobile-chrome="seletor-indice"] .ft-services h4{
    font-size:12px;line-height:16px;letter-spacing:.16em;
    color:var(--champagne-lite,#D9C49A);
    margin-bottom:6px;}
  html[data-mobile-chrome="seletor-indice"] .ft-services li{
    display:inline;padding:0;white-space:nowrap;line-height:28px;}
  html[data-mobile-chrome="seletor-indice"] .ft-services li:not(:last-child)::after{
    content:"\00B7";
    content:"\00B7" / "";
    margin:0 .2em 0 .45em;
    color:rgba(217,196,154,.7);}

  html[data-mobile-chrome="seletor-indice"] .footer-bottom{margin-top:16px;padding-top:12px;gap:0;}
  html[data-mobile-chrome="seletor-indice"] .footer-bottom p{font-size:12.5px;line-height:1.5;}
}
@media (max-width:380px){
  html[data-mobile-chrome="seletor-indice"] .mobile-nav .btn{padding:12px 10px;}
  html[data-mobile-chrome="seletor-indice"] .site-footer .logo--footer{width:118px;height:34px;}
}

/* =========================================================================
   ANCORAS DE COMPATIBILIDADE — os enderecos do design anterior
   Camada localizada e reversivel. Remova este bloco e os dois <span> do
   index.html para voltar so aos ids da versao nova.
   O site anterior publicava #residential e #areas. Campanhas e links externos
   ainda apontam para la, e os dois ids sumiram: residential virou um item do
   rail de #services, e areas virou #coverage. Os <span class="sr-only"> antes
   dessas duas secoes devolvem o endereco.
   O scroll-margin de L77 (main section[id],#faq,#planning) nao os alcanca,
   porque nenhum dos dois e <section>: sem esta regra o cabecalho sticky de
   80px cobriria o topo da secao ao chegar pela ancora.
   ========================================================================= */
#residential,#areas{scroll-margin-top:96px;}
@media (max-width:920px){
  #residential,#areas{scroll-margin-top:80px;}
}

/* =========================================================================
   AVISO DE FALHA DO ENVIO — o quarto estado do formulario
   O #quote tinha tres estados: o formulario, o "enviando" e o "recebido".
   Com o envio virando POST real para /api/quote existe um quarto: a rede caiu,
   a funcao respondeu erro, a chave do provedor nao esta configurada. Este bloco
   e o unico lugar onde ele aparece.
   Vermelho, nao champanhe: o .notice ao lado dele e informativo e usa o filete
   dourado; confundir os dois faria a falha passar por recado. --danger sobre
   #FCF7F6 da 7,4:1, o mesmo par que .field.has-error ja usa em L500.
   Escondido por padrao, como .status (L490): o JS liga com .is-on.
   ========================================================================= */
.form-error{display:none;margin-bottom:26px;padding:18px 22px;
  background:#FCF7F6;border-left:3px solid var(--danger);
  border-radius:0 var(--r-control) var(--r-control) 0;}
.form-error.is-on{display:block;}
.form-error__title{font-family:var(--f-head);font-size:19px;font-weight:600;
  line-height:1.25;color:var(--danger);margin-bottom:8px;}
.form-error p{font-size:15px;line-height:1.55;color:var(--ink-soft);}
.form-error a{font-weight:700;color:var(--danger);text-underline-offset:3px;}
[data-art-direction="surface-plane"] .form-error{box-shadow:var(--sp-groove);}
