/* C0135 +home-assistant. AIM AI uses the same particle orb as the Home hero. */
.home-assistant{
  position:fixed;right:24px;bottom:max(24px,env(safe-area-inset-bottom));z-index:45;
  width:72px;height:72px;pointer-events:none;
  opacity:0;visibility:hidden;transform:translateY(8px) scale(.96);
  transition:opacity var(--t-slow) var(--ease),transform var(--t-slow) var(--ease),visibility 0s linear var(--t-slow);
}
.home-assistant[data-hero-passed="true"][data-suspended="false"]{
  opacity:1;visibility:visible;transform:none;transition-delay:0s;
}
.home-assistant[data-suspended="true"]{opacity:0;visibility:hidden;transform:translateY(8px) scale(.96)}
.assistant-launcher{
  position:relative;display:grid;place-items:center;width:72px;height:72px;padding:0;
  overflow:visible;border:0;border-radius:50%;background:transparent;box-shadow:none;
  cursor:pointer;pointer-events:auto;
  transition:opacity var(--t-base) var(--ease),transform var(--t-base) var(--ease);
}
.assistant-launcher:hover{box-shadow:none;transform:translateY(-2px) scale(1.04)}
.assistant-launcher:active{transform:translateY(0) scale(.98)}
.assistant-launcher:focus-visible{outline:3px solid rgba(37,99,235,.28);outline-offset:4px}
.assistant-launcher .orb-assistant{pointer-events:none}
.assistant-launcher svg.orb-assistant{inset:0;width:100%;height:100%}
.assistant-launcher canvas.orb-assistant{inset:-25%;width:150%;height:150%}
.assistant-panel{
  position:absolute;right:0;bottom:0;display:flex;flex-direction:column;width:min(432px,calc(100vw - 32px));
  height:calc(85dvh - 40.8px);overflow:hidden;border:1px solid var(--line-2);border-radius:24px;
  background:var(--paper);box-shadow:var(--lift-dialog);pointer-events:none;
  opacity:0;transform:translate3d(0,12px,0) scale(.985);transform-origin:bottom right;
  transition:opacity var(--t-slow) var(--ease),transform var(--t-slow) var(--ease);
}
.assistant-panel[hidden]{display:none}
.home-assistant[data-open="true"] .assistant-panel{pointer-events:auto;opacity:1;transform:none}
.assistant-head{
  display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:72px;padding:16px 16px 16px 20px;flex:none;
  border-bottom:1px solid var(--line);background:var(--paper);
}
.assistant-identity{display:flex;align-items:center;gap:12px;min-width:0}
.assistant-identity>span{display:grid;gap:1px;min-width:0}
.assistant-head strong{color:var(--ink);font-size:16px;line-height:1.35;font-weight:600}
.assistant-head small{color:var(--quiet);font-size:12px;line-height:1.35;letter-spacing:.04em;text-transform:uppercase}
.assistant-avatar{display:block;width:32px;height:32px;flex:none;object-fit:contain}
.assistant-close{
  display:grid;place-items:center;width:40px;height:40px;padding:0;flex:none;border:1px solid var(--line);
  border-radius:50%;background:var(--paper);color:var(--body);cursor:pointer;
  transition:background var(--t-base) var(--ease),border-color var(--t-base) var(--ease),color var(--t-base) var(--ease);
}
.assistant-close:hover{border-color:var(--blue-line);background:var(--ice);color:var(--blue-deep)}
.assistant-close svg{width:18px;height:18px}
.assistant-messages{
  display:flex;flex:1;flex-direction:column;gap:18px;min-height:0;padding:24px;
  overflow-y:auto;overscroll-behavior:contain;background:var(--paper);
}
.assistant-message{color:var(--body);font-size:15px;line-height:1.55}
.assistant-message[data-kind="assistant"],.assistant-message[data-kind="pending"]{
  display:grid;grid-template-columns:32px minmax(0,1fr);align-items:start;gap:12px;width:100%;max-width:100%;
}
.assistant-message[data-kind="user"]{
  align-self:flex-end;max-width:84%;padding:11px 16px;border-radius:22px 22px 4px 22px;
  background:var(--ink);color:#fff;
}
.assistant-message-body{display:grid;justify-items:start;gap:10px;min-width:0}
.assistant-message p{margin:0}
.assistant-action{
  display:inline-flex;align-items:center;justify-content:center;min-height:40px;padding:0 16px;border:1px solid var(--blue);
  border-radius:999px;background:var(--blue);color:#fff;font-size:14px;line-height:1;font-weight:600;text-decoration:none;
  transition:background var(--t-base) var(--ease),border-color var(--t-base) var(--ease),transform var(--t-base) var(--ease);
}
.assistant-action:hover{border-color:var(--blue-deep);background:var(--blue-deep);transform:translateY(-1px)}
.assistant-action:active{transform:translateY(0) scale(.98)}
.assistant-action:focus-visible{outline:3px solid rgba(37,99,235,.28);outline-offset:3px}
/* C0164 +assistant-live. The waiting state, drawn only while a live answer is in
   flight. It occupies the height of a one-line message so the column does not jump
   when the answer replaces it, and it carries no text: the wait is announced once
   through a visually hidden status, not through the message live region. */
.assistant-wait{display:flex;align-items:center;gap:5px;width:max-content;min-height:40px;padding:0 14px;border:1px solid var(--line);border-radius:18px;background:var(--shell)}
.assistant-wait i{
  width:6px;height:6px;border-radius:50%;background:var(--quiet);opacity:.45;
  animation:assistant-wait 1.25s ease-in-out infinite;
}
.assistant-wait i:nth-child(2){animation-delay:.16s}
.assistant-wait i:nth-child(3){animation-delay:.32s}
.assistant-compose{
  display:grid;grid-template-columns:minmax(0,1fr) 44px;gap:8px;margin:0 20px 20px;padding:8px 8px 8px 16px;flex:none;
  border:1px solid var(--line-2);border-radius:24px;background:var(--paper);
  transition:border-color var(--t-base) var(--ease),box-shadow var(--t-base) var(--ease);
}
.assistant-compose:focus-within{border-color:var(--blue);box-shadow:var(--ring)}
.assistant-compose input{
  width:100%;height:44px;padding:0;border:0;background:transparent;color:var(--ink);font:inherit;font-size:16px;line-height:1;
}
.assistant-compose input::placeholder{color:var(--quiet)}
.assistant-compose input:focus{outline:0}
.assistant-compose button{
  display:grid;place-items:center;width:44px;height:44px;padding:0;border:1px solid var(--blue);border-radius:50%;
  background:var(--blue);color:#fff;cursor:pointer;transition:background var(--t-base) var(--ease),border-color var(--t-base) var(--ease);
}
.assistant-compose button:hover{border-color:var(--blue-deep);background:var(--blue-deep)}
.assistant-compose button svg{width:20px;height:20px}
@keyframes assistant-wait{0%,60%,100%{opacity:.28;transform:translateY(0)}30%{opacity:.85;transform:translateY(-2px)}}
@media (max-width:520px){
  .home-assistant{right:16px;bottom:max(16px,env(safe-area-inset-bottom));width:64px;height:64px}
  .assistant-launcher{width:64px;height:64px}
  .assistant-panel{right:0;bottom:0;height:calc(85dvh - 27.2px);border-radius:18px}
  .assistant-head{min-height:64px;padding:12px 12px 12px 16px}
  .assistant-messages{padding:20px}
  .assistant-compose{margin:0 16px 16px;padding:8px 8px 8px 14px}
}
@media (prefers-reduced-motion:reduce){
  .home-assistant,.assistant-launcher,.assistant-panel{animation:none;transition:none}
  /* The waiting state still has to read as waiting, so it holds a steady opacity
     rather than disappearing along with its animation. */
  .assistant-wait i{animation:none;opacity:.55}
}
@media print{.home-assistant{display:none}}
