/* ═══════════════════════════════════════════════════════════════════════
   Averya — chat agent widget.
   Scoped to .avc*  — nothing here leaks into the rest of the site.

   PERF LAW (learned on this site, twice): backdrop-filter on MANY elements
   is the scroll-jank source, because the GPU re-samples the backdrop every
   frame. So blur lives on exactly four fixed surfaces — the launcher, the
   panel, its header and its composer. Message bubbles, which multiply, are
   near-opaque paint-once fills.
   ═══════════════════════════════════════════════════════════════════════ */

.avc {
  --avc-w: 384px;
  --avc-r: 26px;
  --avc-edge: 20px;
  --avc-ink: var(--ink, #1d1d1f);
  --avc-ink-soft: var(--ink-soft, #3c3c3c);
  --avc-ink-muted: var(--ink-muted, #6e6e73);
  --avc-blue: var(--primary, #2563EB);
  --avc-blue-lift: #3b89ff;
  --avc-live: #00b71d;
  --avc-hair: rgba(14, 24, 60, .10);
  --avc-ease: cubic-bezier(.32, .72, 0, 1);
  --avc-z: 2147481000;

  font-family: var(--font-body, 'Heebo', system-ui, sans-serif);
}

/* ───────────────────────── launcher ───────────────────────── */
/* 48×48, bottom-LEFT — swapped with the accessibility launcher (2026-07-27,
   owner request): chat owns the left corner, accessibility owns the right
   edge (boot.js mirrors the a11y widget). Physically left in both languages. */
.avc-fab {
  position: fixed;
  left: var(--avc-edge);
  bottom: calc(var(--avc-edge) + env(safe-area-inset-bottom, 0px));
  /* 56px, a step above the 48px accessibility tab — the owner wants HER seen:
     the face runs edge to edge and the glass reads as a thin ring around it. */
  width: 56px;
  height: 56px;
  padding: 0;
  border: .5px solid rgba(255, 255, 255, .75);
  border-radius: 50%;
  cursor: pointer;
  display: grid;
  place-items: center;
  overflow: visible;
  z-index: var(--avc-z);
  -webkit-tap-highlight-color: transparent;

  /* Liquid-glass ring around the assistant's face — the face itself is the
     invitation, the glass ring keeps it in the site's material language. */
  background:
    linear-gradient(180deg, rgba(255, 255, 255, .92) 0%, rgba(244, 248, 255, .80) 100%);
  -webkit-backdrop-filter: blur(16px) saturate(180%);
  backdrop-filter: blur(16px) saturate(180%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .95),
    0 6px 20px rgba(14, 26, 74, .18),
    0 1px 3px rgba(14, 26, 74, .10);
  transition:
    transform .34s var(--avc-ease),
    box-shadow .34s var(--avc-ease);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .avc-fab { background: #fff; }
}

.avc-fab:hover {
  transform: translateY(-2px) scale(1.05);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .95),
    0 10px 28px rgba(37, 99, 235, .30),
    0 0 0 6px rgba(37, 99, 235, .10);
}
.avc-fab:active { transform: translateY(0) scale(.97); }
.avc-fab:focus-visible { outline: 2px solid var(--avc-blue); outline-offset: 3px; }

/* Face ↔ close glyph cross-swap. Both are stacked in the same grid cell. */
.avc-fab-face,
.avc-fab-x {
  grid-area: 1 / 1;
  transition: opacity .3s var(--avc-ease), transform .38s var(--avc-ease);
}
.avc-fab-face {
  width: 52px;
  height: 52px;
  border-radius: 50%;
  object-fit: cover;
  display: block;
}
.avc-fab-x {
  width: 19px;
  height: 19px;
  color: var(--avc-ink);
  opacity: 0;
  transform: rotate(-90deg) scale(.6);
}
.avc.is-open .avc-fab-face { opacity: 0; transform: rotate(90deg) scale(.6); }
.avc.is-open .avc-fab-x    { opacity: 1; transform: rotate(0) scale(1); }
.avc.is-open .avc-fab-bub  { opacity: 0; transform: scale(.4); }

/* Tiny chat-bubble badge — the "this is a chat" affordance on top of the face. */
.avc-fab-bub {
  position: absolute;
  bottom: -3px;
  inset-inline-end: -3px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  color: #fff;
  background: linear-gradient(160deg, var(--avc-blue-lift), var(--avc-blue) 65%);
  border: 2px solid #fff;
  box-shadow: 0 3px 8px rgba(37, 99, 235, .35);
  pointer-events: none;
  transition: opacity .3s var(--avc-ease), transform .3s var(--avc-ease);
}
.avc-fab-bub svg { width: 10px; height: 10px; display: block; }

/* One-shot attention ring. Fires once per session after the visitor has
   settled, then never again — the site has a standing rule against looping
   pulse motion, and an always-throbbing button is exactly that. */
.avc-fab::after {
  content: '';
  position: absolute;
  inset: -1px;
  border-radius: 50%;
  border: 2px solid var(--avc-blue);
  opacity: 0;
  pointer-events: none;
}
.avc-fab.is-nudge::after { animation: avc-ring 1.5s var(--avc-ease) 2; }
@keyframes avc-ring {
  from { opacity: .55; transform: scale(1); }
  to   { opacity: 0;   transform: scale(1.55); }
}

/* Unread/greeting dot — a state marker, not decoration. */
.avc-fab-dot {
  position: absolute;
  top: 1px;
  right: 1px;
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--avc-live);
  border: 2px solid #fff;
  opacity: 0;
  transform: scale(.4);
  transition: opacity .3s var(--avc-ease), transform .3s var(--avc-ease);
}
.avc.has-badge:not(.is-open) .avc-fab-dot { opacity: 1; transform: scale(1); }

/* ───────────────────────── panel ───────────────────────── */
.avc-panel {
  position: fixed;
  left: var(--avc-edge);
  bottom: calc(var(--avc-edge) + 56px + 14px + env(safe-area-inset-bottom, 0px));
  width: var(--avc-w);
  max-width: calc(100vw - 2 * var(--avc-edge));
  height: min(620px, calc(100vh - var(--avc-edge) * 2 - 90px));
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border: .5px solid rgba(255, 255, 255, .70);
  border-radius: var(--avc-r);
  z-index: calc(var(--avc-z) - 1);

  background:
    linear-gradient(180deg, rgba(255, 255, 255, .90) 0%, rgba(248, 250, 255, .84) 100%);
  -webkit-backdrop-filter: blur(34px) saturate(190%);
  backdrop-filter: blur(34px) saturate(190%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .95),
    0 26px 70px rgba(12, 22, 66, .26),
    0 4px 14px rgba(12, 22, 66, .10);

  opacity: 0;
  transform: translateY(14px) scale(.95);
  transform-origin: 0% 100%;
  pointer-events: none;
  transition:
    opacity .3s var(--avc-ease),
    transform .42s var(--avc-ease),
    visibility .42s;
  visibility: hidden;
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .avc-panel { background: #fbfcff; }
}
.avc.is-open .avc-panel {
  opacity: 1;
  transform: translateY(0) scale(1);
  pointer-events: auto;
  visibility: visible;
}

/* The "liquid" in liquid glass: a soft brand aurora bled behind the top of
   the panel, under the blur. Static — it costs one paint, not a frame loop. */
.avc-panel::before {
  content: '';
  position: absolute;
  inset-inline: -20%;
  top: -140px;
  height: 300px;
  pointer-events: none;
  background:
    radial-gradient(46% 60% at 30% 100%, rgba(37, 99, 235, .22), transparent 70%),
    radial-gradient(40% 55% at 74% 88%, rgba(6, 182, 212, .16), transparent 72%);
  filter: blur(14px);
}

/* ── header ── */
.avc-head {
  position: relative;
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 14px 16px;
  border-bottom: .5px solid var(--avc-hair);
  background: linear-gradient(180deg, rgba(255, 255, 255, .66), rgba(255, 255, 255, .30));
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
}

.avc-avatar {
  position: relative;
  flex: 0 0 auto;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: var(--icon-glass-light, linear-gradient(135deg, rgba(37, 99, 235, .20), rgba(37, 99, 235, .05)));
  border: 1px solid rgba(255, 255, 255, .70);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .60);
}
.avc-avatar img {
  width: 100%;
  height: 100%;
  border-radius: 50%;
  object-fit: cover;
  display: block;
}

/* Generating state: one slow ring on the avatar. Ties the whole panel's
   "it is working" signal to a single element instead of scattering spinners. */
.avc-avatar::after {
  content: '';
  position: absolute;
  inset: -3px;
  border-radius: 50%;
  border: 1.5px solid var(--avc-blue);
  opacity: 0;
}
.avc.is-busy .avc-avatar::after { animation: avc-ring 1.4s var(--avc-ease) infinite; }

.avc-id { flex: 1 1 auto; min-width: 0; line-height: 1.25; }
.avc-title {
  display: block;
  font-family: var(--font-ui, 'Rubik', sans-serif);
  font-weight: 700;
  font-size: 14.5px;
  letter-spacing: -.01em;
  color: var(--avc-ink);
}
.avc-status {
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 11.5px;
  font-weight: 500;
  color: var(--avc-ink-muted);
  font-style: normal;
}
.avc-status i {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--avc-live);
  box-shadow: 0 0 0 2px rgba(0, 183, 29, .18);
  flex: 0 0 auto;
}

.avc-x {
  flex: 0 0 auto;
  width: 32px;
  height: 32px;
  display: grid;
  place-items: center;
  padding: 0;
  border: .5px solid var(--avc-hair);
  border-radius: 50%;
  background: rgba(255, 255, 255, .55);
  color: var(--avc-ink-soft);
  cursor: pointer;
  transition: background .2s, color .2s, transform .2s var(--avc-ease);
}
.avc-x:hover { background: #fff; color: var(--avc-ink); transform: scale(1.06); }
.avc-x:focus-visible { outline: 2px solid var(--avc-blue); outline-offset: 2px; }

/* ── message log ── */
.avc-log {
  position: relative;
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  padding: 16px 16px 8px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  scrollbar-width: thin;
  scrollbar-color: rgba(14, 24, 60, .18) transparent;
}
.avc-log::-webkit-scrollbar { width: 6px; }
.avc-log::-webkit-scrollbar-thumb {
  background: rgba(14, 24, 60, .16);
  border-radius: 99px;
}

/* ── intro block ── */
.avc-intro { padding: 4px 2px 2px; }
.avc-hello {
  font-family: var(--font-display, 'Assistant', sans-serif);
  font-weight: 800;
  font-size: 19px;
  line-height: 1.3;
  letter-spacing: -.02em;
  color: var(--avc-ink);
  margin: 0 0 5px;
}
.avc-hello em {
  font-style: normal;
  background: var(--em-gradient, linear-gradient(115deg, #2563EB, #3b89ff 38%, #9dc0ff 60%, #1D4FD7));
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
}
.avc-sub {
  margin: 0 0 13px;
  font-size: 13px;
  line-height: 1.55;
  color: var(--avc-ink-muted);
}
.avc-chips { display: flex; flex-wrap: wrap; gap: 7px; }
.avc-chip {
  font-family: inherit;
  font-size: 12.5px;
  font-weight: 500;
  color: var(--avc-blue);
  padding: 8px 13px;
  border: .5px solid rgba(37, 99, 235, .28);
  border-radius: 99px;
  background: rgba(255, 255, 255, .70);
  cursor: pointer;
  transition: transform .22s var(--avc-ease), background .22s, box-shadow .22s;
}
.avc-chip:hover {
  transform: translateY(-2px);
  background: #fff;
  box-shadow: 0 5px 14px rgba(37, 99, 235, .16);
}
.avc-chip:focus-visible { outline: 2px solid var(--avc-blue); outline-offset: 2px; }

/* ── bubbles ── */
.avc-msg {
  display: flex;
  max-width: 100%;
  animation: avc-in .34s var(--avc-ease) both;
}
@keyframes avc-in {
  from { opacity: 0; transform: translateY(7px) scale(.985); }
  to   { opacity: 1; transform: none; }
}
.avc-msg--me { justify-content: flex-end; }
.avc-msg--bot { justify-content: flex-start; }

.avc-bubble {
  max-width: 85%;
  padding: 10px 14px;
  font-size: 14px;
  line-height: 1.62;
  overflow-wrap: break-word;
  word-break: break-word;
}
/* The tail notch sits on the corner nearest its own speaker. Logical radii, so
   it lands correctly in both directions without a dir override: "me" is aligned
   to the inline-end (left in RTL, right in LTR) and the bot to the inline-start. */
.avc-msg--me .avc-bubble {
  color: #fff;
  background: linear-gradient(160deg, var(--avc-blue-lift), var(--avc-blue) 62%, #1D4FD7);
  border-radius: 18px;
  border-end-end-radius: 5px;
  box-shadow: 0 4px 14px rgba(37, 99, 235, .26);
}
.avc-msg--bot .avc-bubble {
  color: var(--avc-ink);
  /* Deliberately near-opaque, not glass: bubbles multiply, blur does not scale. */
  background: rgba(255, 255, 255, .90);
  border: .5px solid var(--avc-hair);
  border-radius: 18px;
  border-end-start-radius: 5px;
  box-shadow: 0 3px 12px rgba(14, 26, 74, .07);
}

/* Placeholder text of a voice note, until the model returns the transcript. */
.avc-bubble.is-voice { opacity: .72; font-style: italic; }

/* Screen-reader mirror of the finished answer (the typing bubble is
   aria-hidden, so tokens are not announced one by one). */
.avc-sr {
  position: absolute;
  width: 1px; height: 1px;
  margin: -1px; padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

.avc-bubble strong { font-weight: 700; }
.avc-bubble p { margin: 0; }
.avc-bubble p + p { margin-top: .6em; }
.avc-bubble ul { margin: .5em 0 0; padding-inline-start: 1.05em; }
.avc-bubble li { margin-bottom: .28em; }
.avc-bubble li::marker { color: var(--avc-blue); }

/* Thinking → answering is ONE element, not a spinner that gets replaced:
   the bubble arrives already present, wearing a gradient-swept word, and the
   word is simply overwritten by the first token. The site already speaks in
   gradient-clipped kinetic type, so this reads as the same family. */
.avc-think {
  display: inline-block;
  font-weight: 600;
  background: linear-gradient(100deg,
      rgba(29, 29, 31, .26) 20%,
      var(--avc-blue) 42%,
      var(--avc-blue-lift) 52%,
      rgba(29, 29, 31, .26) 74%);
  background-size: 260% 100%;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
  animation: avc-sweep 1.5s linear infinite;
}
@keyframes avc-sweep {
  from { background-position: 140% 0; }
  to   { background-position: -140% 0; }
}

.avc-caret {
  display: inline-block;
  width: 2px;
  height: 1.02em;
  margin-inline-start: 2px;
  vertical-align: -.16em;
  border-radius: 1px;
  background: var(--avc-blue);
  animation: avc-blink 1s steps(2, start) infinite;
}
@keyframes avc-blink { 50% { opacity: 0; } }

/* Whitelisted destination button. The model can only name a slug; the href
   comes from a fixed map in JS, so a hallucinated or injected URL cannot
   become a live link. */
.avc-go {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 10px;
  padding: 8px 14px;
  font-family: var(--font-ui, 'Rubik', sans-serif);
  font-size: 12.5px;
  font-weight: 600;
  color: #fff;
  text-decoration: none;
  border-radius: 99px;
  background: linear-gradient(160deg, var(--avc-blue-lift), var(--avc-blue) 65%);
  box-shadow: 0 4px 13px rgba(37, 99, 235, .28);
  transition: transform .22s var(--avc-ease), box-shadow .22s;
}
.avc-go:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(37, 99, 235, .34); }
.avc-go svg { flex: 0 0 auto; }
:dir(rtl) .avc-go svg { transform: scaleX(-1); }

.avc-err {
  align-self: center;
  max-width: 92%;
  text-align: center;
  font-size: 12.5px;
  line-height: 1.55;
  color: #8a2b2b;
  background: rgba(255, 236, 236, .85);
  border: .5px solid rgba(160, 40, 40, .18);
  border-radius: 14px;
  padding: 9px 13px;
}

/* ── composer ── */
.avc-compose {
  position: relative;
  flex: 0 0 auto;
  display: flex;
  align-items: flex-end;
  gap: 8px;
  padding: 10px 12px calc(10px + env(safe-area-inset-bottom, 0px));
  border-top: .5px solid var(--avc-hair);
  background: linear-gradient(0deg, rgba(255, 255, 255, .78), rgba(255, 255, 255, .42));
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
}

.avc-input {
  flex: 1 1 auto;
  min-width: 0;
  height: 40px;
  max-height: 108px;
  padding: 10px 14px;
  font-family: inherit;
  font-size: 14px;
  line-height: 1.4;
  color: var(--avc-ink);
  background: rgba(255, 255, 255, .82);
  border: .5px solid var(--avc-hair);
  border-radius: 20px;
  resize: none;
  overflow-y: auto;
  transition: border-color .2s, box-shadow .2s;
}
.avc-input::placeholder { color: var(--avc-ink-muted); opacity: .75; }
.avc-input:focus {
  outline: none;
  border-color: rgba(37, 99, 235, .45);
  box-shadow: 0 0 0 3px rgba(37, 99, 235, .12);
}

.avc-btn {
  flex: 0 0 auto;
  width: 40px;
  height: 40px;
  display: grid;
  place-items: center;
  padding: 0;
  border-radius: 50%;
  border: .5px solid var(--avc-hair);
  background: rgba(255, 255, 255, .82);
  color: var(--avc-ink-soft);
  cursor: pointer;
  transition: transform .22s var(--avc-ease), background .2s, color .2s, box-shadow .2s, opacity .2s;
}
.avc-btn:hover:not(:disabled) { background: #fff; color: var(--avc-ink); transform: scale(1.06); }
.avc-btn:focus-visible { outline: 2px solid var(--avc-blue); outline-offset: 2px; }
.avc-btn:disabled { opacity: .42; cursor: default; }

.avc-send {
  color: #fff;
  border-color: transparent;
  background: linear-gradient(160deg, var(--avc-blue-lift), var(--avc-blue) 65%);
  box-shadow: 0 4px 13px rgba(37, 99, 235, .26);
}
.avc-send:hover:not(:disabled) {
  color: #fff;
  background: linear-gradient(160deg, var(--avc-blue-lift), var(--avc-blue) 55%);
  box-shadow: 0 7px 18px rgba(37, 99, 235, .34);
}
.avc-send:disabled { background: rgba(120, 132, 160, .30); box-shadow: none; }
:dir(rtl) .avc-send svg { transform: scaleX(-1); }

.avc-mic.is-live { color: #fff; background: #d92c2c; border-color: transparent; }

/* ── recording bar: replaces the composer contents in place ── */
.avc-rec {
  display: none;
  flex: 1 1 auto;
  align-items: center;
  gap: 10px;
  min-width: 0;
  height: 40px;
  padding-inline: 12px;
  border: .5px solid rgba(217, 44, 44, .28);
  border-radius: 20px;
  background: rgba(255, 245, 245, .88);
}
.avc.is-rec .avc-rec { display: flex; }
.avc.is-rec .avc-input { display: none; }

/* flex-basis 0 + min-width 0, NOT width:100%. A canvas carries an intrinsic
   300px width, and `flex:1 1 auto; width:100%` made that the flex base size —
   the bar overflowed and the timer printed on top of the cancel button. */
.avc-wave { flex: 1 1 0; min-width: 0; height: 22px; display: block; }
.avc-time {
  flex: 0 0 auto;
  font-family: var(--font-mono, ui-monospace, monospace);
  font-size: 12px;
  font-variant-numeric: tabular-nums;
  color: #9b2b2b;
}
.avc-reclabel {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 11.5px;
  font-weight: 600;
  color: #9b2b2b;
}
.avc-reclabel i {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: #d92c2c;
  animation: avc-blink 1.1s steps(2, start) infinite;
}

/* ── mobile: full-height sheet ── */
.avc-scrim {
  position: fixed;
  inset: 0;
  background: rgba(8, 16, 50, .34);
  -webkit-backdrop-filter: blur(2px);
  backdrop-filter: blur(2px);
  opacity: 0;
  pointer-events: none;
  z-index: calc(var(--avc-z) - 2);
  transition: opacity .3s var(--avc-ease);
}

@media (max-width: 640px) {
  .avc-panel {
    left: 0;
    bottom: 0;
    width: 100%;
    max-width: 100%;
    height: min(92vh, calc(100vh - 34px));
    border-radius: 22px 22px 0 0;
    transform: translateY(100%) scale(1);
    transform-origin: 50% 100%;
    transition: transform .44s var(--avc-ease), opacity .26s var(--avc-ease), visibility .44s;
  }
  .avc.is-open .avc-panel { transform: translateY(0); }
  .avc.is-open .avc-scrim { opacity: 1; pointer-events: auto; }
  /* A 48px circle floating over an open full-height sheet is just clutter —
     the header's own close button owns dismissal on phones. */
  .avc.is-open .avc-fab { opacity: 0; pointer-events: none; transform: scale(.7); }
  .avc-bubble { max-width: 88%; font-size: 14.5px; }
  /* Grab handle + drag surface for the swipe-down-to-close gesture.
     touch-action:none keeps the browser from claiming the vertical pan. */
  .avc-head { padding: 19px 14px 13px; touch-action: none; }
  .avc-head::after {
    content: '';
    position: absolute;
    top: 6px;
    left: 50%;
    transform: translateX(-50%);
    width: 40px;
    height: 4px;
    border-radius: 99px;
    background: rgba(14, 24, 60, .18);
  }
  /* iOS zooms any input under 16px on focus, which drags the whole sheet. */
  .avc-input { font-size: 16px; height: 42px; }
  .avc-btn, .avc-rec { height: 42px; }
  .avc-btn { width: 42px; }
}

/* Left-edge stack (final, 2026-07-27): the accessibility launcher sits 12px
   ABOVE this button on the same side (anchored by boot.js). While the chat is
   OPEN, the whole accessibility widget host fades out — its z-index tops the
   panel, so it would float over the conversation otherwise. Opacity and
   pointer-events both inherit through the shadow boundary, so styling the
   host element from out here is enough; averya-chat.js toggles the class. */
#a11y-widget-host { transition: opacity .25s cubic-bezier(.32, .72, 0, 1); }
html.avc-open #a11y-widget-host { opacity: 0; pointer-events: none; }

/* Short landscape phones: the sheet would cover everything. */
@media (max-height: 420px) {
  .avc-panel { height: calc(100vh - 12px); }
}

/* ── reduced motion: keep every state legible, drop the movement ── */
@media (prefers-reduced-motion: reduce) {
  .avc-fab,
  .avc-panel,
  .avc-msg,
  .avc-chip,
  .avc-btn,
  .avc-go,
  .avc-x {
    transition-duration: .01ms !important;
    animation: none !important;
  }
  .avc-panel { transform: none; }
  .avc.is-open .avc-panel { transform: none; }
  .avc-think {
    animation: none;
    -webkit-text-fill-color: currentColor;
    color: var(--avc-ink-muted);
    background: none;
  }
  .avc-caret { animation: none; }
  .avc-fab.is-nudge::after { animation: none; }
  .avc.is-busy .avc-avatar::after { animation: none; opacity: .5; }
  .avc-reclabel i { animation: none; }
}

/* ── forced-colours / high contrast ── */
@media (forced-colors: active) {
  .avc-fab, .avc-panel, .avc-bubble, .avc-btn { border: 1px solid CanvasText; }
  .avc-think { -webkit-text-fill-color: CanvasText; color: CanvasText; }
}

/* Print: a floating chat has no place on paper. */
@media print { .avc { display: none !important; } }
