/* fabric 2.0 — stage 1: the stitch (presence + greeting). One geometry,
   expression through curvature, glow and travel only. No bounce, ever. */
#fab{position:fixed;right:22px;bottom:22px;z-index:60;width:48px;height:48px;
  display:grid;place-items:center;cursor:pointer;-webkit-tap-highlight-color:transparent}
@media (max-width:640px){#fab{right:16px;bottom:calc(16px + env(safe-area-inset-bottom,0px))}}
#fab svg{width:40px;height:22px;overflow:visible}
#fab .fb-bloom{stroke:#3D5AFE;stroke-width:6;filter:blur(6px);opacity:.35}
#fab .fb-core{stroke:#EAF0FF;stroke-width:2.1;filter:drop-shadow(0 0 4px rgba(99,150,255,.8))}
#fab path{fill:none;stroke-linecap:round;transition:transform .45s cubic-bezier(.4,0,.2,1)}
#fab[data-state="dozing"] path{animation:fabBreathe 6s ease-in-out infinite}
#fab[data-state="attentive"] path{transform:rotate(-8deg) translateY(-2px);animation:fabBreathe 3.2s ease-in-out infinite}
#fab[data-state="withdrawn"]{opacity:.25}
#fab[data-state="withdrawn"] path{animation:none}
#fab.fab-rest path{animation:none !important}
#fab .fb-mark{position:absolute;bottom:100%;right:0;margin-bottom:4px;font-family:'Space Grotesk',system-ui,sans-serif;
  font-size:9.5px;letter-spacing:.3em;text-transform:lowercase;color:rgba(140,170,230,.85);
  opacity:0;transition:opacity .3s;pointer-events:none;white-space:nowrap}
#fab:hover .fb-mark{opacity:1}
@keyframes fabBreathe{0%,100%{opacity:.45}50%{opacity:.95}}
@media (prefers-reduced-motion:reduce){#fab path{animation:none !important;transition:opacity .3s !important}}

/* the flying proxy for the greeting dash ritual */
#fab-fly{position:fixed;z-index:71;pointer-events:none;transition:all .8s cubic-bezier(.5,0,.15,1)}
#fab-fly svg{width:40px;height:22px;overflow:visible}
#fab-fly path{fill:none;stroke-linecap:round}

/* the panel — grows out of the stitch; a guest, never a modal */
#fab-panel{position:fixed;right:18px;bottom:76px;z-index:70;width:min(340px,calc(100vw - 32px));
  background:rgba(5,23,64,.88);border:1px solid rgba(237,239,246,.16);border-radius:16px;
  backdrop-filter:blur(14px);box-shadow:0 18px 60px rgba(0,0,0,.45);
  padding:16px 16px 14px;transform-origin:bottom right;
  transform:scale(.6);opacity:0;pointer-events:none;transition:transform .35s cubic-bezier(.2,.8,.2,1),opacity .3s}
#fab-panel.on{transform:none;opacity:1;pointer-events:auto}
@media (max-width:640px){#fab-panel{right:12px;bottom:calc(72px + env(safe-area-inset-bottom,0px))}}
#fab-panel .fp-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:10px}
#fab-panel .fp-name{font-family:'Bodoni Moda',Didot,serif;font-size:19px;color:#EEF0F7;letter-spacing:.01em}
#fab-panel .fp-x{background:none;border:0;color:rgba(237,239,246,.5);font-size:15px;cursor:pointer;padding:4px;line-height:1}
#fab-panel .fp-x:hover{color:#EEF0F7}
#fab-panel .fp-log{max-height:min(300px,38vh);overflow-y:auto;margin-bottom:11px;display:flex;flex-direction:column;gap:8px;
  -webkit-overflow-scrolling:touch;scrollbar-width:thin}
#fab-panel .fp-b{font-family:'Space Grotesk',system-ui,sans-serif;font-size:13.5px;line-height:1.5;
  padding:8px 12px;border-radius:12px;max-width:88%}
#fab-panel .fp-b-f{color:rgba(237,240,247,.94);background:rgba(237,239,246,.07);align-self:flex-start;border-bottom-left-radius:4px}
#fab-panel .fp-b-u{color:#EEF0F7;background:rgba(99,150,255,.18);align-self:flex-end;border-bottom-right-radius:4px}
#fab-panel .fp-think{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:10px;letter-spacing:.14em;
  color:rgba(140,170,230,.7);padding:2px 4px;animation:fabBreathe 1.6s ease-in-out infinite}
#fab-panel .fp-inrow{display:flex;gap:8px;margin-top:10px}
#fab-panel .fp-in{flex:1;background:rgba(237,239,246,.06);border:1px solid rgba(237,239,246,.2);border-radius:12px;
  color:#EEF0F7;font-family:'Space Grotesk',system-ui,sans-serif;font-size:14px;padding:11px 13px;outline:none}
#fab-panel .fp-in:focus{border-color:rgba(143,160,255,.6)}
#fab-panel .fp-in::placeholder{color:rgba(237,240,247,.4)}
#fab-panel .fp-send{width:42px;border-radius:12px;border:1px solid rgba(237,239,246,.22);background:rgba(99,150,255,.2);
  color:#EEF0F7;font-size:16px;cursor:pointer}
#fab[data-state="listening"] path{transform:rotate(-10deg) translateY(-3px);animation:fabBreathe 2.2s ease-in-out infinite}
#fab[data-state="thinking"] .fb-core{stroke-dasharray:26 9;animation:fabThread 1.15s linear infinite}
#fab[data-state="thinking"] .fb-bloom{opacity:.5}
@keyframes fabThread{to{stroke-dashoffset:-35}}
#fab.ack .fb-core{animation:fabFlare .5s ease}
#fab.ack .fb-bloom{animation:fabFlare .5s ease}
@keyframes fabFlare{0%,100%{opacity:1}45%{opacity:1;filter:drop-shadow(0 0 12px rgba(160,210,255,.95))}}
#fab-panel .fp-chips{display:flex;flex-wrap:wrap;gap:8px}
#fab-panel .fp-chip{font-family:'Space Grotesk',system-ui,sans-serif;font-size:12.5px;color:#EEF0F7;
  background:rgba(237,239,246,.08);border:1px solid rgba(237,239,246,.22);border-radius:99px;
  padding:10px 16px;min-height:40px;cursor:pointer;transition:background .2s,border-color .2s}
#fab-panel .fp-chip:hover{background:rgba(237,239,246,.16);border-color:rgba(237,239,246,.4)}

/* the greeting bubble — homepage, once ever */
#fab-greet{position:fixed;right:18px;bottom:76px;z-index:70;width:min(320px,calc(100vw - 32px));
  background:rgba(5,23,64,.9);border:1px solid rgba(237,239,246,.16);border-radius:16px;
  backdrop-filter:blur(14px);box-shadow:0 18px 60px rgba(0,0,0,.45);padding:18px 18px 15px;
  transform-origin:bottom right;transform:scale(.6);opacity:0;pointer-events:none;
  transition:transform .4s cubic-bezier(.2,.8,.2,1),opacity .35s}
#fab-greet.on{transform:none;opacity:1;pointer-events:auto}
@media (max-width:640px){#fab-greet{right:12px;bottom:calc(72px + env(safe-area-inset-bottom,0px))}}
#fab-greet .fg-line{font-family:'Bodoni Moda',Didot,serif;font-size:19px;color:#EEF0F7;line-height:1.4;min-height:1.4em}
#fab-greet .fg-line .fg-dash{opacity:0;transition:opacity .25s}
#fab-greet .fg-line .fg-dash.on{opacity:1}
#fab-greet .fg-sub{font-family:'Space Grotesk',system-ui,sans-serif;font-size:13px;line-height:1.5;
  color:rgba(237,240,247,.85);margin-top:8px;min-height:1.5em}
#fab-greet .fp-chips{margin-top:13px}

/* ==== stage 4 — the walkthrough: caption bar, progress thread, seam light ==== */
#fab-cap{position:fixed;left:50%;bottom:calc(18px + env(safe-area-inset-bottom));transform:translateX(-50%) translateY(14px);
  width:min(560px,calc(100vw - 28px));z-index:9600;opacity:0;transition:opacity .4s ease,transform .4s ease;
  background:rgba(3,16,43,.78);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border:1px solid rgba(237,239,246,.14);border-radius:14px;padding:10px 14px 12px;pointer-events:auto}
#fab-cap.on{opacity:1;transform:translateX(-50%) translateY(0)}
#fab-cap .fc-bar{display:flex;gap:5px;margin-bottom:8px}
#fab-cap .fc-seg{flex:1;height:2px;border-radius:1px;background:rgba(237,239,246,.18);cursor:pointer;transition:background .3s ease}
#fab-cap .fc-seg.done{background:var(--fab-seam,#63b8ff)}
#fab-cap .fc-txt{font-family:'Bodoni Moda',serif;font-size:16px;line-height:1.5;color:#EEF0F7;min-height:24px;letter-spacing:.01em}
#fab-cap .fc-side{display:flex;justify-content:space-between;align-items:center;margin-top:6px}
#fab-cap .fc-skip{background:none;border:none;color:rgba(237,239,246,.55);font:11px ui-monospace,Menlo,monospace;
  letter-spacing:.08em;cursor:pointer;padding:4px 6px}
#fab-cap .fc-skip:hover{color:#EEF0F7}
#fab-cap .fc-esc{font:9px ui-monospace,Menlo,monospace;color:rgba(237,239,246,.35);letter-spacing:.06em}
#fab-cap .fc-chips{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
/* the stitch during the walkthrough */
#fab.fab-guiding{pointer-events:none}
#fab.fab-dimmed svg{opacity:.06;transition:opacity 1.1s ease}
#fab.fab-seamlit .fb-core{stroke:var(--fab-seam,#63b8ff)}
#fab.fab-seamlit .fb-bloom{stroke:var(--fab-seam,#63b8ff);filter:drop-shadow(0 0 6px var(--fab-seam,#63b8ff))}
body.fab-touring #fab-panel{display:none}
@media (prefers-reduced-motion: reduce){
  #fab-cap{transition:opacity .2s ease}
  #fab.fab-dimmed svg{transition:none}
}

/* ==== S116 — compact, text-only fabric + the step-back balloon ==== */
#fab-panel{max-width:300px;padding:10px 12px 12px}
#fab-panel .fp-log{max-height:min(38vh,300px)}
#fab-panel .fp-b{font-size:12.5px;line-height:1.5;padding:8px 11px}
#fab-panel .fp-in{font-size:13px;padding:9px 11px}
#fab-panel .fp-name{font-size:15px}
#fab-greet{max-width:300px}
#fab-greet .fg-line{font-size:19px}
#fab-greet .fg-sub{font-size:12.5px}
#fab-balloon{position:fixed;z-index:9550;right:calc(18px + env(safe-area-inset-right));
  bottom:calc(78px + env(safe-area-inset-bottom));max-width:230px;
  font-family:'Space Grotesk',-apple-system,sans-serif;font-size:12px;line-height:1.45;color:#EEF0F7;
  background:rgba(3,16,43,.88);border:1px solid rgba(99,184,255,.35);border-radius:12px 12px 3px 12px;
  padding:9px 12px;opacity:0;transform:translateY(6px);transition:opacity .4s ease,transform .4s ease;
  box-shadow:0 0 12px rgba(99,184,255,.18);pointer-events:none}
#fab-balloon.on{opacity:1;transform:translateY(0)}
@media (max-width:700px){ #fab-balloon{right:auto;left:50%;transform:translate(-50%,6px)}
  #fab-balloon.on{transform:translate(-50%,0)} }
