/* ═══════════════════════════════════════════════════════════════════════
   Kaliber site agent — the corner dock only.

   The orb's main home is INLINE on the voice bot page, styled there. This
   file is just the corner version it re-homes to once a session is running
   and the inline one has scrolled out of view.

   No panel, no transcript, no countdown — the orb is the whole interface.
   Tap to start, tap again to stop.

   Its own stylesheet rather than main.css so the feature can be pulled with
   two lines rather than untangled from the site's styles.
   ═══════════════════════════════════════════════════════════════════════ */

.ka-root{
  position:fixed;right:20px;bottom:20px;z-index:180;
  display:flex;flex-direction:column;align-items:flex-end;
  animation:ka-in .32s cubic-bezier(.22,1,.36,1);
}
.ka-root[hidden]{display:none !important}

/* The corner orb's own voice. Without this every failure off the voice page
   was silent and the orb read as a dead button. */
.ka-toast{
  max-width:230px;margin:0 0 10px;padding:9px 13px;align-self:flex-end;
  font-size:13px;line-height:1.4;color:#0E1116;
  background:#fff;border:1px solid rgba(14,17,22,.13);border-radius:12px;
  box-shadow:0 10px 26px rgba(14,17,22,.14);
  animation:ka-in .24s cubic-bezier(.22,1,.36,1);
}
.ka-toast[hidden]{display:none !important}
.ka-toast.is-warn{background:#FFF8EC;border-color:rgba(217,119,6,.30);color:#8A5206}

@keyframes ka-in{
  from{opacity:0;transform:translateY(10px) scale(.86)}
  to{opacity:1;transform:none}
}

/* Orb only — no label. The motion is the affordance. */
.ka-dock{
  display:grid;place-items:center;
  padding:0;border:0;background:transparent;cursor:pointer;
  border-radius:50%;transform-origin:bottom right;
  transition:transform .26s cubic-bezier(.22,1,.36,1);
}
.ka-dock:hover{transform:scale(1.08)}

/* 30% bigger while it is actually speaking. Driven by measured audio, so it
   swells and settles with the voice rather than on a timer. */
.ka-root.is-talking .ka-dock{transform:scale(1.3)}
.ka-root.is-talking .ka-dock:hover{transform:scale(1.34)}
.ka-dock:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(255,122,0,.55)}
.ka-orb{width:84px;height:84px;display:block}

@media (max-width:640px){
  .ka-root{right:12px;bottom:12px}
  .ka-orb{width:68px;height:68px}
  /* only the home page carries .mobile-cta; lift clear so the dock never
     covers the primary "Book a free call" bar */
  body:has(.mobile-cta) .ka-root{bottom:80px}
}

@media (prefers-reduced-motion:reduce){
  .ka-root{animation:none}
  .ka-dock{transition:none}
  .ka-dock:hover{transform:none}
}

/* ── agent spotlight ──────────────────────────────────────────────────
   When the agent takes you to something it also has to POINT at it, or
   the page just moved for no visible reason. Two slow pulses, then it
   releases — a permanent ring would read as a selection state. */
.ka-spot{
  position:relative;
  animation:kaSpot 1.15s cubic-bezier(.22,1,.36,1) 2;
  border-radius:12px;
}
@keyframes kaSpot{
  0%  {box-shadow:0 0 0 0 rgba(255,122,0,.55)}
  70% {box-shadow:0 0 0 12px rgba(255,122,0,0)}
  100%{box-shadow:0 0 0 0 rgba(255,122,0,0)}
}
@media (prefers-reduced-motion:reduce){
  .ka-spot{animation:none;box-shadow:0 0 0 3px rgba(255,122,0,.5)}
}
