/* FireFly assistant: corner drone + Caligo-only chat */
.ff-dock{position:fixed;z-index:95;right:max(12px,env(safe-area-inset-right));bottom:calc(10px + env(safe-area-inset-bottom));
  width:132px;height:122px;opacity:0;pointer-events:none;transform-origin:70% 70%}
.ff-dock.ff-in{opacity:1;pointer-events:auto;transition:opacity 600ms cubic-bezier(.16,1,.3,1)}
.ff-launch{position:absolute;inset:0;padding:0;margin:0;border:0;background:none;cursor:pointer;border-radius:22px;
  -webkit-tap-highlight-color:transparent;color:inherit}
.ff-launch:focus-visible{outline:2px solid #FFB020;outline-offset:2px}
.ff-glow{position:absolute;left:50%;bottom:6px;width:92px;height:26px;margin-left:-46px;border-radius:50%;
  background:radial-gradient(closest-side,rgba(255,120,30,.42),rgba(255,90,20,0));filter:blur(2px);transition:opacity 300ms}
.ff-stage{position:absolute;inset:0;display:block}
.ff-stage canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.ff-still{position:absolute;left:6%;top:40%;width:88%;height:auto;object-fit:contain;animation:ffHover 3.8s ease-in-out infinite;filter:drop-shadow(0 6px 12px rgba(0,0,0,.45))}
.ff-badge{position:absolute;left:35%;top:10%;width:30%;height:auto;animation:ffTurn 9s linear infinite, ffHover 3.8s ease-in-out infinite;filter:drop-shadow(0 0 8px rgba(255,140,40,.55))}
.ff-launch.ff-live .ff-still,.ff-launch.ff-live .ff-badge{display:none}
@keyframes ffHover{0%,100%{translate:0 0}50%{translate:0 -4px}}
@keyframes ffTurn{from{transform:perspective(200px) rotateY(0)}to{transform:perspective(200px) rotateY(360deg)}}
.ff-ping{position:absolute;right:20px;top:22px;width:8px;height:8px;border-radius:50%;background:#39F28C;
  box-shadow:0 0 0 2px rgba(8,9,11,.9),0 0 10px rgba(57,242,140,.8)}
.ff-dock.ff-active .ff-ping{display:none}
.ff-tip{position:absolute;right:100%;bottom:44px;margin-right:2px;white-space:nowrap;padding:8px 12px;border-radius:999px;
  font:600 12px/1 var(--font-display,system-ui);letter-spacing:.01em;color:#0B0C0E;background:#FFB020;
  box-shadow:0 8px 24px rgba(255,140,30,.3);opacity:0;transform:translateX(8px);pointer-events:none;
  transition:opacity 260ms cubic-bezier(.16,1,.3,1),transform 360ms cubic-bezier(.16,1,.3,1)}
.ff-tip::after{content:'';position:absolute;right:-5px;top:50%;margin-top:-5px;border:5px solid transparent;border-right:0;border-left-color:#FFB020}
.ff-dock.ff-tip-on .ff-tip{opacity:1;transform:none}
.ff-dock.ff-flying .ff-tip{display:none}
html.motion-paused .ff-still,html.motion-paused .ff-badge{animation:none}
@media (prefers-reduced-motion:reduce){.ff-still,.ff-badge{animation:none}.ff-dock.ff-in{transition:none}}

/* panel */
.ff-panel{position:fixed;z-index:96;right:max(16px,env(safe-area-inset-right));bottom:calc(138px + env(safe-area-inset-bottom));
  width:min(392px,calc(100vw - 32px));height:min(600px,calc(100svh - 190px));display:flex;flex-direction:column;
  background:rgba(11,12,15,.94);color:#E9ECF1;border:1px solid rgba(255,255,255,.1);border-radius:18px;overflow:hidden;
  box-shadow:0 30px 80px rgba(0,0,0,.55),0 0 0 1px rgba(255,176,32,.06);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
  opacity:0;transform:translateY(14px) scale(.98);transform-origin:90% 100%;
  transition:opacity 220ms cubic-bezier(.16,1,.3,1),transform 320ms cubic-bezier(.16,1,.3,1)}
.ff-panel.open{opacity:1;transform:none}
.ff-panel[hidden]{display:none}
.ff-head{display:flex;align-items:center;gap:12px;padding:14px 14px 12px 16px;border-bottom:1px solid rgba(255,255,255,.07);
  background:linear-gradient(180deg,rgba(255,140,40,.08),transparent)}
.ff-av{flex:none;width:44px;height:44px;border-radius:12px;background:radial-gradient(circle at 50% 70%,rgba(255,120,30,.35),rgba(20,22,26,1) 70%);
  border:1px solid rgba(255,255,255,.08);display:grid;place-items:center;overflow:hidden}
.ff-av img{width:38px;height:auto;object-fit:contain;filter:drop-shadow(0 0 6px rgba(255,140,40,.5))}
.ff-ht{flex:1;min-width:0}
.ff-title{margin:0;font:700 16px/1.2 var(--font-display,system-ui);letter-spacing:-.01em;color:#fff}
.ff-title:focus{outline:none}
.ff-desc{margin:2px 0 0;font:500 11.5px/1.3 var(--font-mono,ui-monospace);letter-spacing:.02em;color:#8E97A5}
.ff-close{flex:none;width:36px;height:36px;border-radius:10px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);
  color:#C5CBD4;display:grid;place-items:center;cursor:pointer;transition:background 160ms,color 160ms}
.ff-close:hover{background:rgba(255,255,255,.08);color:#fff}
.ff-close:focus-visible,.ff-send:focus-visible,.ff-chip:focus-visible,.ff-log:focus-visible{outline:2px solid #FFB020;outline-offset:2px}
.ff-log{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:16px;display:flex;flex-direction:column;gap:10px;scrollbar-width:thin}
.ff-msg{max-width:88%;padding:10px 13px;border-radius:14px;font:400 14px/1.5 var(--font-body,system-ui);word-wrap:break-word;overflow-wrap:anywhere}
.ff-bot{align-self:flex-start;background:#171A1F;border:1px solid rgba(255,255,255,.06);border-top-left-radius:5px;color:#DDE2E9}
.ff-me{align-self:flex-end;background:linear-gradient(135deg,#FF7A2A,#FF5A1F);color:#fff;border-top-right-radius:5px;white-space:pre-wrap}
.ff-bot a{color:#FFC45C;text-decoration:underline;text-underline-offset:2px}
.ff-bot a:hover{color:#FFD88A}
.ff-in{animation:ffMsg 380ms cubic-bezier(.16,1,.3,1) both}
@keyframes ffMsg{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.ff-typing{display:flex;gap:5px;padding:13px 14px}
.ff-typing i{width:6px;height:6px;border-radius:50%;background:#8E97A5;animation:ffDot 1s infinite ease-in-out}
.ff-typing i:nth-child(2){animation-delay:.15s}.ff-typing i:nth-child(3){animation-delay:.3s}
@keyframes ffDot{0%,80%,100%{opacity:.3;transform:none}40%{opacity:1;transform:translateY(-3px)}}
.ff-chips{display:flex;flex-wrap:wrap;gap:6px;padding:0 16px 10px}
.ff-chips[hidden]{display:none}
.ff-chip{font:500 12.5px/1.2 var(--font-body,system-ui);color:#E9ECF1;background:rgba(255,176,32,.08);border:1px solid rgba(255,176,32,.3);
  border-radius:999px;padding:7px 11px;cursor:pointer;transition:background 160ms,border-color 160ms;text-align:left}
.ff-chip:hover{background:rgba(255,176,32,.16);border-color:rgba(255,176,32,.6)}
.ff-form{display:flex;align-items:flex-end;gap:8px;margin:0 12px;padding:8px 8px 8px 14px;border:1px solid rgba(255,255,255,.12);
  border-radius:14px;background:#0E1013;transition:border-color 160ms}
.ff-form:focus-within{border-color:rgba(255,176,32,.6)}
.ff-input{flex:1;min-height:24px;max-height:120px;resize:none;border:0;outline:0;background:none;color:#fff;
  font:400 15px/1.45 var(--font-body,system-ui);padding:4px 0}
.ff-input::placeholder{color:#6F7885}
.ff-send{flex:none;width:36px;height:36px;border-radius:10px;border:0;background:#FF5A1F;color:#fff;display:grid;place-items:center;cursor:pointer;
  transition:background 160ms,opacity 160ms}
.ff-send:hover{background:#FF7A2A}
.ff-send:disabled{opacity:.45;cursor:progress}
.ff-foot{margin:8px 16px 12px;font:400 11px/1.4 var(--font-body,system-ui);color:#737C89}
@media(max-width:599px){
  .ff-dock{width:96px;height:88px}
  .ff-panel{left:8px;right:8px;width:auto;bottom:calc(8px + env(safe-area-inset-bottom));height:min(78svh,640px);border-radius:18px}
  .ff-dock.ff-active{opacity:0;pointer-events:none}
  .ff-msg{font-size:15px}
  .ff-input{font-size:16px}
}
@media (prefers-reduced-motion:reduce){.ff-panel{transition:opacity 1ms}.ff-in{animation:none}.ff-typing i{animation:none}}
@media print{.ff-dock,.ff-panel{display:none!important}}
