:root{
  --fresh-ack:60ms;
  --fresh-reveal:220ms;
  --fresh-settle:480ms;
  --fresh-release:760ms;
  --fresh-quiet:cubic-bezier(.22,1,.36,1);
  --fresh-precise:cubic-bezier(.4,0,.2,1);
  --fresh-emphasis:cubic-bezier(.16,1,.3,1)
}

/* Fresh Brew is an integration layer. Protected Source geometry, colours and
   internal timing remain authoritative in source.css and source.js. */
.hero-translation{min-height:1.4em}
.hero-translation-visual{display:inline-block}
.hero-translation-visual[data-writing=true]:after{
  content:'';
  display:inline-block;
  width:1px;
  height:.9em;
  margin-left:.16em;
  vertical-align:-.04em;
  background:currentColor;
  opacity:.68;
  animation:fresh-cursor 680ms steps(1,end) infinite
}
@keyframes fresh-cursor{50%{opacity:.12}}

/* Acknowledgement is quick; the arrow and underline settle afterwards. */
.solid-link{
  transition:color var(--fresh-ack) var(--fresh-precise),border-color var(--fresh-ack) var(--fresh-precise)
}
.solid-link>span[aria-hidden=true]{
  display:inline-block;
  transition:transform var(--fresh-reveal) var(--fresh-quiet)
}
.solid-link:is(:hover,:focus-visible){border-color:currentColor}
.solid-link:is(:hover,:focus-visible)>span[aria-hidden=true]{transform:translateX(.28rem)}
.site-header nav a,.language-button,.destination-controls button{
  transition:color var(--fresh-ack) var(--fresh-precise),border-color var(--fresh-ack) var(--fresh-precise),opacity var(--fresh-ack) var(--fresh-precise)
}

/* Waiheke enters as one composition: copy becomes readable before the image
   finishes settling. The resting field also prevents a white flash while the
   lazy photograph decodes. */
.waiheke{
  background:
    linear-gradient(115deg,rgba(198,221,220,.22),transparent 48%),
    linear-gradient(290deg,rgba(239,219,179,.18),transparent 62%),
    var(--bone)
}
@media(prefers-reduced-motion:reduce){
  .hero-translation-visual[data-writing=true]:after{display:none;animation:none}
  .waiheke[data-fresh-state] .waiheke-image,
  .waiheke[data-fresh-state] .waiheke-copy,
  .destination-intro[data-fresh-state] *,
  .route-page>section[data-fresh-state]>*{opacity:1;transform:none;transition:none}
  .solid-link>span[aria-hidden=true]{transform:none;transition:none}
}
html[data-motion=reduce] .hero-translation-visual[data-writing=true]:after{display:none;animation:none}
html[data-motion=reduce] .waiheke[data-fresh-state] .waiheke-image,
html[data-motion=reduce] .waiheke[data-fresh-state] .waiheke-copy,
html[data-motion=reduce] .destination-intro[data-fresh-state] *,
html[data-motion=reduce] .route-page>section[data-fresh-state]>*{opacity:1;transform:none;transition:none}

