/* Floating feedback button (FAB) + its pop-up (html.layout feedbackWidget +
   public/app/feedback.js). Round brand-filled button bottom-right on every
   authenticated app page; opens the ui.dialog-shaped #feedback-dialog (styled by
   09-badges-overlays .modal-overlay/.modal-dialog). Border-first, no card shadow —
   the brand fill is the only signature (marque Orchidée seule chromie). */
.fab-feedback {
  position: fixed; right: 20px; bottom: 20px; z-index: 55;
  width: 52px; height: 52px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--brand-grad); color: #fff; border: 0; cursor: pointer;
  -webkit-appearance: none; appearance: none;
}
/* Shorthand : retire le dégradé de base .ic (fond dégradé du FAB → glyphe blanc). */
.fab-feedback .ic { width: 24px; height: 24px; background: #fff; }
.fab-feedback:hover { filter: brightness(1.06); }
.fab-feedback:focus-visible { outline: 2px solid var(--brand); outline-offset: 3px; }

/* Lift the toast stack clear of the FAB: both live bottom-right, and toasts only
   render on layout() pages, which always carry the FAB → never strands one elsewhere. */
.toasts { bottom: 84px; }

/* Pop-up body: the textarea fills the modal width (override the global 60ch cap, too
   narrow here) + a quiet hint under it. */
.feedback-form .field { width: 100%; }
.feedback-form textarea { max-width: none; width: 100%; }
.feedback-hint { margin: 8px 0 0; color: var(--muted); font-size: var(--fs-13); }

/* The async submit has no server round-trip to render a .flash-error banner, so a
   failure surfaces as a toast — the sole red toast variant (errors stay banners elsewhere). */
.toast-error { border-left-color: var(--bad); }
.toast-error .toast-ic { color: var(--bad); }

/* Never print the floating chrome (a normal app page sent to the printer). */
@media print { .fab-feedback, #feedback-dialog { display: none !important; } }
