.menu { position: absolute; right: 0; bottom: calc(100% + 10px); z-index: 4; display: grid; width: min(100%, 348px); box-sizing: border-box; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; padding: 9px; border: 1px solid rgba(77, 48, 57, 0.09); border-radius: 24px; background: rgba(255, 255, 255, 0.95); box-shadow: 0 22px 54px rgba(74, 45, 55, 0.16), 0 4px 14px rgba(74, 45, 55, 0.08); backdrop-filter: blur(20px); transform-origin: right bottom; } .action { display: flex; min-width: 0; min-height: 76px; flex-direction: column; align-items: center; justify-content: center; gap: 7px; padding: 8px 6px; border: 0; border-radius: 18px; background: #faf7f8; color: #543d45; cursor: pointer; font: inherit; font-size: 12px; font-weight: 850; line-height: 1; text-decoration: none; transition: background 0.18s ease, color 0.18s ease, transform 0.18s ease; } .action:disabled, .action[aria-disabled="true"] { cursor: not-allowed; opacity: 0.48; } .icon { display: grid; width: 38px; height: 38px; place-items: center; border-radius: 14px; } .imageIcon { background: #fff0f4; color: #d94f7c; } .voiceIcon { background: #fff4e8; color: #d87343; } .tipIcon { background: #f7f0e8; color: #986a42; } .action:focus-visible { outline: 3px solid rgba(246, 87, 160, 0.28); outline-offset: 2px; } @media (hover: hover) { .action:not(:disabled):not([aria-disabled="true"]):hover { background: #fff0f5; color: #b83d69; transform: translateY(-1px); } } @media (max-width: 350px) { .menu { gap: 6px; padding: 7px; border-radius: 21px; } .action { min-height: 70px; border-radius: 16px; font-size: 11px; } .icon { width: 35px; height: 35px; } } @media (prefers-reduced-motion: no-preference) { .menu { animation: menuReveal 0.22s cubic-bezier(0.2, 0.8, 0.3, 1) both; } .action { animation: actionReveal 0.25s ease both; } .action:nth-child(2) { animation-delay: 35ms; } .action:nth-child(3) { animation-delay: 70ms; } } @keyframes menuReveal { from { opacity: 0; transform: translateY(7px) scale(0.97); } to { opacity: 1; transform: translateY(0) scale(1); } } @keyframes actionReveal { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } }