/* V4 · Precision motion. Original CSS, no remote libraries, no repeating animation.
   Visual references: Aceternity Shimmer / Hover Border Gradient, Uiverse button gallery.
   Full attribution and decisions are recorded in developer/DESIGN_SOURCES.md. */
:root{--motion-ease:cubic-bezier(.22,1,.36,1)}
/* Architectural CTA: quiet at rest, rolling label + single satin light pass on interaction. */
.motion-button.button{
  --button-surface:#172e34;--button-ink:#fff;--button-edge:#284249;--button-wash:#399bb0;
  position:relative;isolation:isolate;overflow:hidden;justify-content:center;gap:10px;
  border:1px solid var(--button-edge);border-radius:9px;background:var(--button-surface);color:var(--button-ink);
  box-shadow:0 3px 7px #1029300a,inset 0 1px 0 #ffffff0c;
  transition:transform .28s var(--motion-ease),box-shadow .35s ease,border-color .35s ease;
  -webkit-touch-callout:default;touch-action:manipulation;
}
.motion-button.button--lime,.hero-actions .motion-button.button--dark{
  --button-surface:#bbdc67;--button-ink:#152a25;--button-edge:#b6d760;--button-wash:#daf6a1;
  background:var(--button-surface);color:var(--button-ink);border-color:var(--button-edge);
}
.motion-button.button--outline{
  --button-surface:#fafcf9;--button-ink:#213c42;--button-edge:#b9cec4;--button-wash:#d1eadf;
}
.hero-actions .motion-button.button--outline,.motion-button.button--outline-light{
  --button-surface:#19333b;--button-ink:#fff;--button-edge:#637f85;--button-wash:#3d717b;
  background:var(--button-surface);color:var(--button-ink);border-color:var(--button-edge);
}
.motion-button.button--whatsapp{--button-surface:#195c42;--button-ink:#fff;--button-edge:#287757;--button-wash:#439174}
.motion-button.button::before{
  content:'';position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:radial-gradient(ellipse at var(--button-x,80%) var(--button-y,50%),var(--button-wash),transparent 72%);
  opacity:0;transition:opacity .35s ease;
}
.motion-button.button::after{
  content:'';position:absolute;left:13px;right:13px;bottom:0;height:2px;pointer-events:none;
  background:linear-gradient(90deg,transparent,#b9e579 25%,#48b3df 75%,transparent);
  opacity:0;transform:scaleX(.4);transform-origin:center;
  transition:opacity .3s ease,transform .55s var(--motion-ease);
}
.button-label{position:relative;display:grid;grid-template-areas:'label';overflow:hidden;min-width:0;max-width:100%;padding-block:2px}
.button-text{grid-area:label;display:block;transition:transform .48s var(--motion-ease),opacity .25s ease;opacity:1;transform:translateY(0)}
.button-text--echo{transform:translateY(130%);opacity:0;pointer-events:none;user-select:none}
.button-shine{position:absolute;inset:-40% -60%;z-index:0;pointer-events:none;background:linear-gradient(110deg,transparent 35%,#ffffff23 50%,transparent 65%);transform:translateX(-100%);opacity:0}
.motion-button>.ui-icon{position:relative;z-index:1;transition:transform .3s var(--motion-ease)}
.motion-button>.button-label{z-index:1}
@keyframes mv-button-sheen{0%{opacity:0;transform:translateX(-65%)}18%{opacity:1}80%{opacity:.7}100%{opacity:0;transform:translateX(65%)}}
@media(hover:hover) and (pointer:fine){
  .motion-button.button:hover{background:var(--button-surface);color:var(--button-ink);border-color:var(--button-edge);transform:translateY(-2px);box-shadow:0 9px 23px #102e351c,inset 0 1px 0 #ffffff20}
  .motion-button.button:hover::before{opacity:.65}
  .motion-button.button:hover::after{opacity:1;transform:scaleX(1)}
  .motion-button:hover .button-text{transform:translateY(-130%);opacity:0}
  .motion-button:hover .button-text--echo{transform:translateY(0);opacity:1}
  .motion-button:hover .button-shine{animation:mv-button-sheen .82s var(--motion-ease) 1}
  .motion-button:hover>.ui-icon{transform:scale(1.06)}
}
.motion-button.button:focus-visible{outline:3px solid #287ab9;outline-offset:4px;box-shadow:0 0 0 2px #f6f6f1}
.motion-button.button:focus-visible::before{opacity:.5}
.motion-button.button:focus-visible::after{opacity:1;transform:scaleX(1)}
.motion-button.button:focus-visible .button-shine{animation:mv-button-sheen .82s var(--motion-ease) 1}
.motion-button.button:active{transform:translateY(0) scale(.98);box-shadow:inset 0 2px 6px #102e3520}
.motion-button.button:active::before{opacity:.75}
.motion-button.button:disabled{opacity:.55;transform:none;box-shadow:none;cursor:not-allowed}
.motion-button:disabled .button-shine{animation:none}
/* Simple text links replace the oversized diagonal glyph with a drawn accent. */
.text-link{position:relative;gap:0;border-bottom-color:#60796766;padding-bottom:10px;overflow:hidden}
.text-link::after{content:'';position:absolute;bottom:0;left:0;width:100%;height:2px;background:linear-gradient(90deg,#6a8f33,#227ca7);transform:scaleX(0);transform-origin:left;transition:transform .38s var(--motion-ease)}
.text-link:hover::after,.text-link:focus-visible::after{transform:scaleX(1)}
.construction-section .text-link::after,.coverage-teaser .text-link::after{background:linear-gradient(90deg,#c2df88,#79c8ef)}
/* Photos are processed files; no runtime blur/contrast filter or synthetic overlay. */
.site-photo>img{filter:none;image-rendering:auto}
/* Pending states are created ONLY by the successfully initialized JS observer.
   The source HTML and no-JS experience always expose every piece of content. */
[data-reveal-state='pending']{opacity:0;transform:translateY(18px)}
[data-reveal-state='shown']{opacity:1}
[data-reveal-state='pending']:focus-within{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto!important}
  .motion-button.button,.motion-button.button::before,.motion-button.button::after,.motion-button .button-text,.motion-button>.ui-icon,.text-link::after{transition:none!important;animation:none!important}
  .motion-button.button:hover,.motion-button.button:active,.motion-button:hover>.ui-icon{transform:none!important}
  .motion-button .button-text{transform:none!important;opacity:1!important}
  .motion-button .button-text--echo,.button-shine{display:none!important}
  [data-reveal-state]{opacity:1!important;transform:none!important;animation:none!important}
}
@media print{
  [data-reveal-state]{opacity:1!important;transform:none!important;animation:none!important}
  .button-text--echo,.button-shine{display:none!important}
  .button-text{opacity:1!important;transform:none!important}
}
