/* Floating page feedback widget (page-feedback.js). Mounted on <body> for
   signed-in, non-guest users only. Colors come from --hui-* tokens alone. */
.fb-root{font:13px/1.5 var(--hui-sans);color:var(--hui-text)}
.fb-root svg.fb-i{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex:none}
.fb-root button{font:inherit}

/* ---------- floating button ---------- */
.fb-fab{position:fixed;right:24px;bottom:24px;z-index:110;width:44px;height:44px;padding:0;border-radius:50%;border:1px solid var(--hui-border);background:var(--hui-surface);color:var(--hui-text);box-shadow:var(--hui-popover-shadow);display:grid;place-items:center;cursor:pointer;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;transition:background .16s,border-color .16s,color .16s,transform 90ms,opacity .2s,box-shadow .2s,bottom .3s var(--hui-ease-flow)}
.fb-fab:hover{border-color:color-mix(in srgb,var(--hui-accent) 35%,var(--hui-border));color:var(--hui-accent)}
.fb-fab:active{transform:scale(.94)}
.fb-fab:focus-visible{outline:2px solid color-mix(in srgb,var(--hui-accent) 55%,transparent);outline-offset:3px}
.fb-fab .fb-g{position:absolute;display:grid;place-items:center;transition:opacity .22s var(--hui-ease-flow),transform .32s var(--hui-ease-flow)}
.fb-fab .fb-g-close{opacity:0;transform:rotate(-90deg) scale(.6)}
.fb-fab[aria-expanded="true"] .fb-g-chat{opacity:0;transform:rotate(90deg) scale(.6)}
.fb-fab[aria-expanded="true"] .fb-g-close{opacity:1;transform:none}
.fb-fab .fb-bubble{transform-origin:6px 18px}
.fb-fab:hover .fb-bubble{animation:fbBubble .9s var(--hui-ease-flow)}
@keyframes fbBubble{0%{transform:scale(1)}35%{transform:scale(.88) rotate(-6deg)}70%{transform:scale(1.04)}100%{transform:none}}
.fb-fab.is-hidden{opacity:0;pointer-events:none;transform:scale(.8)}
.fb-fab.dragging{z-index:116;cursor:grabbing;color:var(--hui-accent);border-color:color-mix(in srgb,var(--hui-accent) 35%,var(--hui-border));box-shadow:0 22px 50px color-mix(in srgb,var(--hui-text) 22%,transparent),var(--hui-popover-shadow);transition:transform .14s var(--hui-ease-flow),background .16s,box-shadow .2s,color .16s}
.fb-fab.dragging .fb-bubble{animation:none}
.fb-fab.returning{transition:transform .55s var(--hui-ease-flow),box-shadow .3s}
.fb-fab.trashed{z-index:116;opacity:0;pointer-events:none;transition:transform .32s var(--hui-ease-flow),opacity .26s ease}
.fb-fab.gone{display:none}
.fb-fab.back{animation:fbBack .5s var(--hui-ease-flow)}
@keyframes fbBack{from{opacity:0;transform:scale(.4)}}
.fb-root.fb-lift .fb-fab{bottom:76px}
.fb-root.fb-lift .fb-panel{bottom:132px}

/* ---------- trash target ---------- */
.fb-scrim{position:fixed;inset:auto 0 0 0;height:200px;z-index:114;pointer-events:none;background:linear-gradient(to top,color-mix(in srgb,var(--hui-text) 9%,transparent),transparent);opacity:0;transition:opacity .25s ease}
.fb-scrim.show{opacity:1}
.fb-trash{position:fixed;left:50%;bottom:28px;z-index:115;display:grid;justify-items:center;gap:8px;pointer-events:none;opacity:0;transform:translate(-50%,28px);transition:opacity .2s ease,transform .45s var(--hui-ease-flow)}
.fb-trash.show{opacity:1;transform:translate(-50%,0)}
.fb-trash-label{font-size:12px;color:var(--hui-muted);padding:3px 10px;border-radius:999px;background:color-mix(in srgb,var(--hui-surface) 88%,transparent);border:1px solid var(--hui-border-soft);transition:color .2s}
.fb-bin{width:60px;height:60px;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--hui-surface) 92%,transparent);border:1px solid var(--hui-border);color:var(--hui-muted);box-shadow:var(--hui-popover-shadow);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:transform .32s var(--hui-ease-flow),background .2s,color .2s,border-color .2s,box-shadow .2s}
.fb-bin svg.fb-i{width:24px;height:24px}
.fb-bin .lid{transform-origin:5px 7px;transition:transform .3s var(--hui-ease-flow)}
.fb-trash.hot .fb-bin{transform:scale(1.18);color:var(--hui-error);background:color-mix(in srgb,var(--hui-error) 12%,var(--hui-surface));border-color:color-mix(in srgb,var(--hui-error) 40%,transparent);box-shadow:0 0 0 6px color-mix(in srgb,var(--hui-error) 10%,transparent),var(--hui-popover-shadow)}
.fb-trash.hot .lid{transform:translateY(-1.5px) rotate(-20deg)}
.fb-trash.hot .fb-trash-label{color:var(--hui-error)}
.fb-trash.eat .fb-bin{animation:fbEat .42s var(--hui-ease-flow)}
@keyframes fbEat{0%{transform:scale(1.18)}45%{transform:scale(1.3)}100%{transform:scale(1)}}

/* ---------- inverse capsules: hidden toast and pick bar ---------- */
.fb-toast,.fb-pickbar{position:fixed;left:50%;display:flex;align-items:center;gap:10px;padding:7px 8px 7px 14px;border-radius:999px;background:var(--hui-text);color:var(--hui-surface);font-size:12px;box-shadow:var(--hui-popover-shadow);opacity:0;pointer-events:none}
.fb-toast{bottom:28px;z-index:117;gap:12px;transform:translate(-50%,16px);transition:opacity .2s,transform .42s var(--hui-ease-flow)}
.fb-pickbar{top:16px;z-index:113;transform:translate(-50%,-14px);transition:opacity .2s,transform .4s var(--hui-ease-flow)}
.fb-toast.show,.fb-pickbar.show{opacity:1;pointer-events:auto;transform:translate(-50%,0)}
.fb-toast button,.fb-pickbar button{font-size:12px;border:0;border-radius:999px;padding:3px 10px;background:color-mix(in srgb,var(--hui-surface) 16%,transparent);color:inherit;cursor:pointer;transition:background .16s}
.fb-toast button:hover,.fb-pickbar button:hover{background:color-mix(in srgb,var(--hui-surface) 26%,transparent)}
.fb-pickbar kbd{font:11px var(--hui-mono);padding:1px 6px;border-radius:6px;background:color-mix(in srgb,var(--hui-surface) 18%,transparent)}

/* ---------- card ---------- */
.fb-panel{position:fixed;right:24px;bottom:80px;z-index:110;width:384px;max-width:calc(100vw - 32px);background:var(--hui-surface);border:1px solid var(--hui-border);border-radius:22px;box-shadow:var(--hui-popover-shadow);overflow:hidden;transform-origin:calc(100% - 22px) calc(100% + 34px);opacity:0;transform:translateY(10px) scale(.94);pointer-events:none;visibility:hidden;transition:opacity .18s ease,transform .22s ease,visibility 0s linear .22s,bottom .3s var(--hui-ease-flow)}
.fb-panel.open{opacity:1;transform:none;pointer-events:auto;visibility:visible;transition:opacity .22s var(--hui-ease-flow),transform .42s var(--hui-ease-flow),visibility 0s,bottom .3s var(--hui-ease-flow)}
.fb-panel::before{content:"";position:absolute;inset:0 0 auto 0;height:132px;pointer-events:none;background:radial-gradient(120% 90% at 0% 0%,color-mix(in srgb,var(--hui-accent) 14%,transparent) 0%,transparent 60%),radial-gradient(90% 80% at 100% 0%,color-mix(in srgb,var(--hui-accent) 7%,transparent) 0%,transparent 70%)}
.fb-head{position:relative;display:flex;align-items:flex-start;gap:12px;padding:20px 18px 14px}
.fb-mark{width:36px;height:36px;border-radius:12px;flex:none;display:grid;place-items:center;color:var(--hui-accent);background:var(--hui-surface);border:1px solid color-mix(in srgb,var(--hui-accent) 18%,var(--hui-border));box-shadow:0 2px 8px color-mix(in srgb,var(--hui-accent) 12%,transparent)}
.fb-mark svg.fb-i{width:19px;height:19px}
.fb-mark .spark{transform-origin:18px 6px}
.fb-panel.open .fb-mark .spark{animation:fbSpark 1.1s .25s var(--hui-ease-flow)}
@keyframes fbSpark{0%{transform:scale(1);opacity:1}40%{transform:scale(.6) rotate(-20deg);opacity:.4}100%{transform:none;opacity:1}}
.fb-head-text{flex:1;min-width:0;padding-top:1px}
.fb-title{display:block;margin:0;font-size:15px;font-weight:600;letter-spacing:.01em;color:var(--hui-text)}
.fb-subtitle{display:flex;align-items:center;gap:6px;margin-top:3px;color:var(--hui-muted);font-size:12px}
.fb-subtitle i{width:6px;height:6px;border-radius:50%;flex:none;background:var(--hui-success);box-shadow:0 0 0 3px color-mix(in srgb,var(--hui-success) 16%,transparent);animation:fbBreath 2.4s ease-in-out infinite}
@keyframes fbBreath{50%{box-shadow:0 0 0 5px color-mix(in srgb,var(--hui-success) 6%,transparent)}}
.fb-icon-btn{width:30px;height:30px;padding:0;border-radius:50%;border:1px solid transparent;background:transparent;color:var(--hui-muted);display:grid;place-items:center;cursor:pointer;transition:background .16s,color .16s,transform 90ms}
.fb-icon-btn:hover{background:color-mix(in srgb,var(--hui-text) 6%,transparent);color:var(--hui-text)}
.fb-icon-btn:active{transform:scale(.94)}
.fb-icon-btn:focus-visible{outline:none;box-shadow:var(--hui-focus-ring)}
.fb-icon-btn:hover svg.fb-x{animation:fbSpinX .43s var(--hui-ease-flow)}
@keyframes fbSpinX{50%{transform:rotate(90deg) scale(.9)}}
.fb-body{position:relative;padding:0 18px 14px;display:grid;gap:10px}
.fb-body>*,.fb-foot{opacity:0;transform:translateY(6px);transition:opacity .3s var(--hui-ease-flow),transform .45s var(--hui-ease-flow)}
.fb-panel.open .fb-body>*,.fb-panel.open .fb-foot{opacity:1;transform:none}
.fb-panel.open .fb-body>*:nth-child(2){transition-delay:40ms}
.fb-panel.open .fb-foot{transition-delay:80ms}

/* ---------- composer (ChatComposer) ---------- */
.fb-composer{position:relative;border:1px solid color-mix(in srgb,var(--hui-border-strong) 75%,transparent);border-radius:18px;background:var(--hui-surface);box-shadow:0 2px 10px color-mix(in srgb,var(--hui-text) 3%,transparent);transition:border-color .16s,box-shadow .16s}
.fb-composer:focus-within{border-color:color-mix(in srgb,var(--hui-accent) 45%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--hui-accent) 8%,transparent)}
.fb-composer.drag{border-color:var(--hui-accent);border-style:dashed;box-shadow:0 0 0 4px color-mix(in srgb,var(--hui-accent) 10%,transparent)}
.fb-drop-hint{position:absolute;inset:0;border-radius:18px;display:grid;place-items:center;background:color-mix(in srgb,var(--hui-accent-soft) 90%,transparent);color:var(--hui-accent);font-weight:500;opacity:0;pointer-events:none;transition:opacity .16s}
.fb-composer.drag .fb-drop-hint{opacity:1}
.fb-field{padding:14px 16px 2px}
.fb-root textarea.fb-text{display:block;width:100%;margin:0;border:0;outline:0;box-shadow:none;background:transparent;color:var(--hui-text);font:inherit;font-size:14px;line-height:1.7;padding:0;min-height:96px;max-height:180px;resize:none;overflow-y:auto;caret-color:var(--hui-accent)}
.fb-root textarea.fb-text:focus{border:0;box-shadow:none;outline:0}
.fb-root textarea.fb-text::placeholder{color:color-mix(in srgb,var(--hui-muted) 75%,transparent)}
.fb-atts{display:flex;flex-wrap:wrap;gap:8px;padding:0 16px;max-height:0;overflow:visible;transition:max-height .35s var(--hui-ease-flow),padding .35s var(--hui-ease-flow)}
.fb-atts.has{max-height:140px;padding:8px 16px 4px}
.fb-thumb{position:relative;width:56px;height:56px;border-radius:12px;border:1px solid var(--hui-border);background:var(--hui-soft) center/cover no-repeat;animation:fbPop .36s var(--hui-ease-flow)}
.fb-thumb.leave{animation:fbUnpop .2s ease forwards}
@keyframes fbPop{from{opacity:0;transform:scale(.7)}}
@keyframes fbUnpop{to{opacity:0;transform:scale(.7)}}
.fb-thumb button{position:absolute;top:-6px;right:-6px;width:18px;height:18px;border-radius:50%;border:1px solid var(--hui-border);background:var(--hui-surface);color:var(--hui-muted);display:grid;place-items:center;padding:0;cursor:pointer;opacity:0;transform:scale(.6);transition:opacity .16s,transform .22s var(--hui-ease-flow),color .16s}
.fb-thumb:hover button,.fb-thumb button:focus-visible{opacity:1;transform:none}
.fb-thumb button:hover{color:var(--hui-error)}
.fb-thumb button svg.fb-i{width:10px;height:10px}
.fb-toolbar{display:flex;align-items:center;gap:2px;min-height:50px;padding:6px 8px 8px}
.fb-tool{height:32px;padding:0 10px;border-radius:999px;border:1px solid transparent;background:transparent;color:var(--hui-muted);font-size:12px;display:inline-flex;align-items:center;gap:6px;cursor:pointer;transition:background .16s,color .16s,transform 90ms}
.fb-tool[hidden]{display:none}
.fb-tool svg.fb-i{width:16px;height:16px}
.fb-tool:hover{background:var(--hui-soft);color:var(--hui-text)}
.fb-tool:active{transform:scale(.96)}
.fb-tool:focus-visible{outline:none;box-shadow:var(--hui-focus-ring)}
.fb-tool:hover .sun{animation:fbSun .55s ease}
@keyframes fbSun{50%{fill:currentColor}}
.fb-tool .arms{transform-origin:12px 12px}
.fb-tool:hover .arms{animation:fbAim .5s var(--hui-ease-flow)}
@keyframes fbAim{50%{transform:scale(.82)}}
.fb-count{color:var(--hui-tertiary);font-size:11px}
.fb-submit{margin-left:auto;height:34px;padding:0 14px 0 16px;border-radius:999px;border:1px solid transparent;background:var(--hui-accent);color:var(--hui-on-accent);font-size:13px;font-weight:600;display:inline-flex;align-items:center;gap:6px;cursor:pointer;box-shadow:0 4px 12px color-mix(in srgb,var(--hui-accent) 28%,transparent);transition:background .16s,box-shadow .2s,color .16s,transform 90ms,border-color .16s}
.fb-submit:hover:enabled{background:var(--hui-accent-hover);box-shadow:0 6px 16px color-mix(in srgb,var(--hui-accent) 34%,transparent)}
.fb-submit:active:enabled{transform:scale(.96)}
.fb-submit:focus-visible{outline:2px solid color-mix(in srgb,var(--hui-accent) 55%,transparent);outline-offset:3px}
.fb-submit:disabled{background:var(--hui-soft);color:color-mix(in srgb,var(--hui-muted) 70%,transparent);border-color:var(--hui-border);box-shadow:none;cursor:not-allowed}
.fb-submit svg.fb-i{width:15px;height:15px;transition:transform .3s var(--hui-ease-flow)}
.fb-submit:hover:enabled .fb-arrow{transform:translateX(2px)}
.fb-submit .fb-spin{display:none;animation:fbRot .9s linear infinite}
.fb-submit.busy .fb-arrow{display:none}
.fb-submit.busy .fb-spin{display:block}
.fb-submit.busy,.fb-submit.busy:disabled{background:var(--hui-accent);color:var(--hui-on-accent);border-color:transparent;opacity:.85;cursor:progress}
@keyframes fbRot{to{transform:rotate(360deg)}}

/* ---------- element chip, error, footer ---------- */
.fb-el{display:grid;grid-template-rows:0fr;transition:grid-template-rows .38s var(--hui-ease-flow)}
.fb-el.has{grid-template-rows:1fr}
.fb-el>div{overflow:hidden;min-height:0}
.fb-el-chip{display:flex;align-items:center;gap:10px;padding:9px 8px 9px 12px;border-radius:14px;background:var(--hui-accent-soft);color:var(--hui-accent);border:1px solid color-mix(in srgb,var(--hui-accent) 12%,transparent)}
.fb-el-chip>svg.fb-i{width:16px;height:16px}
.fb-el-tx{flex:1;min-width:0}
.fb-el-tx b{display:block;font-size:12px;font-weight:500;color:var(--hui-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fb-el-tx code{display:block;font:11px/1.5 var(--hui-mono);color:var(--hui-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:none;padding:0}
.fb-el-chip .fb-icon-btn{width:26px;height:26px;color:var(--hui-accent)}
.fb-el-chip .fb-icon-btn:hover{background:color-mix(in srgb,var(--hui-accent) 10%,transparent);color:var(--hui-accent)}
.fb-el-chip .fb-icon-btn svg.fb-i{width:15px;height:15px}
.fb-err{color:var(--hui-error);font-size:12px;max-height:0;overflow:hidden;transition:max-height .3s var(--hui-ease-flow)}
.fb-err.show{max-height:40px}
.fb-foot{border-top:1px solid var(--hui-border-soft);background:color-mix(in srgb,var(--hui-soft) 60%,var(--hui-surface))}
.fb-ctx-row{display:flex;align-items:center;gap:8px;width:100%;padding:10px 18px;border:0;background:transparent;color:var(--hui-muted);font-size:12px;cursor:pointer;text-align:left;transition:color .16s}
.fb-ctx-row:hover{color:var(--hui-text)}
.fb-ctx-row:focus-visible{outline:none;box-shadow:inset var(--hui-focus-ring)}
.fb-ctx-row svg.fb-pin{width:14px;height:14px;color:var(--hui-tertiary)}
.fb-ctx-sum{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fb-ctx-row svg.fb-chev{width:14px;height:14px;transition:transform .3s var(--hui-ease-flow)}
.fb-foot.open .fb-chev{transform:rotate(180deg)}
.fb-ctx-more{display:grid;grid-template-rows:0fr;transition:grid-template-rows .38s var(--hui-ease-flow)}
.fb-foot.open .fb-ctx-more{grid-template-rows:1fr}
.fb-ctx-more>div{overflow:hidden;min-height:0}
.fb-ctx-more dl{margin:0 18px 12px;display:grid;grid-template-columns:56px 1fr;gap:5px 12px;font-size:12px;max-height:180px;overflow:auto}
.fb-ctx-more dt{color:var(--hui-tertiary)}
.fb-ctx-more dd{margin:0;color:var(--hui-text);word-break:break-all;font-family:var(--hui-mono);font-size:11.5px}

/* ---------- success state ---------- */
.fb-done{position:absolute;inset:0;z-index:2;background:var(--hui-surface);display:grid;place-content:center;justify-items:center;gap:10px;text-align:center;opacity:0;pointer-events:none;transition:opacity .25s var(--hui-ease-flow)}
.fb-done.show{opacity:1;pointer-events:auto}
.fb-ring{width:56px;height:56px;border-radius:50%;background:color-mix(in srgb,var(--hui-success) 12%,transparent);color:var(--hui-success);display:grid;place-items:center;transform:scale(.6);transition:transform .5s var(--hui-ease-flow)}
.fb-done.show .fb-ring{transform:none}
.fb-ring svg.fb-i{width:28px;height:28px;stroke-width:2}
.fb-ring path{stroke-dasharray:1;stroke-dashoffset:1}
.fb-done.show .fb-ring path{animation:fbCheckDraw .6s .12s var(--hui-ease-flow) forwards}
@keyframes fbCheckDraw{to{stroke-dashoffset:0}}
.fb-done b{font-size:15px}
.fb-done small{color:var(--hui-muted);font-size:12px}

/* ---------- element picking ---------- */
.fb-hl{position:fixed;z-index:112;pointer-events:none;border:1.5px solid var(--hui-accent);border-radius:8px;background:color-mix(in srgb,var(--hui-accent) 8%,transparent);box-shadow:0 0 0 4px color-mix(in srgb,var(--hui-accent) 10%,transparent);opacity:0;transition:top .16s var(--hui-ease-flow),left .16s var(--hui-ease-flow),width .16s var(--hui-ease-flow),height .16s var(--hui-ease-flow),opacity .15s}
.fb-hl.show{opacity:1}
.fb-hl span{position:absolute;left:-1.5px;top:-24px;padding:2px 8px;border-radius:6px;background:var(--hui-accent);color:var(--hui-on-accent);font:11px/1.6 var(--hui-mono);white-space:nowrap}
body.fb-picking,body.fb-picking *:not(.fb-root *){cursor:crosshair!important}

@media (max-width:1000px){
  .fb-fab{right:16px;bottom:16px}
  .fb-panel{right:16px;bottom:70px;width:calc(100vw - 32px)}
  .fb-root.fb-lift .fb-fab{bottom:68px}
  .fb-root.fb-lift .fb-panel{bottom:122px}
}
@media (prefers-reduced-motion: reduce){
  .fb-root *,.fb-root *::before,.fb-root *::after{animation:none!important;transition:none!important}
  .fb-ring path{stroke-dashoffset:0}
}
