diff --git a/src/components/agent/pet/renderers/actions/_charge.scss b/src/components/agent/pet/renderers/actions/_charge.scss new file mode 100644 index 00000000..5033d1e5 --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_charge.scss @@ -0,0 +1,100 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab.is-action-charge .agent-assistant-fab__bot { + animation: agent-fab-action-charge-bot 4.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-charge .agent-assistant-fab__antenna { + animation: agent-fab-action-charge-antenna 4.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-charge .agent-assistant-fab__face { + animation: agent-fab-action-charge-face 4.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-charge .agent-assistant-fab__core { + animation: agent-fab-action-charge-core 4.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-charge .agent-assistant-fab__arm--left, +.agent-assistant-fab.is-action-charge .agent-assistant-fab__arm--right { + animation: agent-fab-action-charge-arm 4.8s ease-in-out both; +} + +@keyframes agent-fab-action-charge-bot { + 0%, + 100% { + transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); + } + + 18%, + 42%, + 66% { + transform: translateY(0.1rem) scale(var(--agent-assistant-bot-scale)) + rotate(calc(var(--agent-assistant-robot-tilt) - 2deg)); + } + + 30%, + 54%, + 78% { + transform: translateY(-0.12rem) scale(var(--agent-assistant-bot-scale)) + rotate(calc(var(--agent-assistant-robot-tilt) + 2deg)); + } +} + +@keyframes agent-fab-action-charge-antenna { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); + } + + 30%, + 54%, + 78% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.16rem)) rotate(-20deg) + scale(1.12); + } +} + +@keyframes agent-fab-action-charge-face { + 0%, + 100% { + box-shadow: inset 0 0.1rem 0 rgba(255, 255, 255, 8%); + } + + 20%, + 84% { + box-shadow: + inset 0 0.1rem 0 rgba(255, 255, 255, 8%), + 0 0 0.9rem rgba(166, 118, 255, 56%); + } +} + +@keyframes agent-fab-action-charge-core { + 0%, + 100% { + opacity: 0.78; + transform: scale(1); + } + + 20%, + 40%, + 60%, + 80% { + opacity: 1; + transform: scale(1.32); + } +} + +@keyframes agent-fab-action-charge-arm { + 0%, + 100% { + transform: rotate(0deg); + } + + 22%, + 82% { + transform: translateY(0.12rem) scaleY(0.9); + } +} diff --git a/src/components/agent/pet/renderers/actions/_confused.scss b/src/components/agent/pet/renderers/actions/_confused.scss new file mode 100644 index 00000000..505748ae --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_confused.scss @@ -0,0 +1,101 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab.is-action-confused .agent-assistant-fab__antenna { + animation: agent-fab-action-confused-antenna 3.4s ease-in-out both; +} + +.agent-assistant-fab.is-action-confused .agent-assistant-fab__head { + animation: agent-fab-action-confused-head 3.4s ease-in-out both; +} + +.agent-assistant-fab.is-action-confused .agent-assistant-fab__eye { + animation: + agent-fab-blink 4.8s ease-in-out infinite, + agent-fab-action-confused-eye 0.85s ease-in-out 4; +} + +.agent-assistant-fab.is-action-confused .agent-assistant-fab__arm--left { + animation: agent-fab-action-confused-arm-left 3.4s ease-in-out both; +} + +.agent-assistant-fab.is-action-confused .agent-assistant-fab__arm--right { + animation: agent-fab-action-confused-arm-right 3.4s ease-in-out both; +} + +@keyframes agent-fab-action-confused-antenna { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); + } + + 20% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(58deg); + } + + 48% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(-28deg); + } + + 74% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.06rem)) rotate(42deg); + } +} + +@keyframes agent-fab-action-confused-head { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); + } + + 20% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.06rem)) rotate(-10deg); + } + + 48% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(10deg); + } + + 74% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.03rem)) rotate(-6deg); + } +} + +@keyframes agent-fab-action-confused-eye { + 0%, + 100% { + transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)); + } + + 30% { + transform: translate(0.22rem, -0.16rem); + } + + 60% { + transform: translate(-0.22rem, 0.08rem); + } +} + +@keyframes agent-fab-action-confused-arm-left { + 0%, + 100% { + transform: rotate(17deg); + } + + 24%, + 74% { + transform: translate(-0.12rem, -0.12rem) rotate(88deg); + } +} + +@keyframes agent-fab-action-confused-arm-right { + 0%, + 100% { + transform: rotate(-17deg); + } + + 24%, + 74% { + transform: translate(0.16rem, -0.08rem) rotate(-42deg); + } +} diff --git a/src/components/agent/pet/renderers/actions/_disassemble.scss b/src/components/agent/pet/renderers/actions/_disassemble.scss new file mode 100644 index 00000000..f8c6b55d --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_disassemble.scss @@ -0,0 +1,195 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__bot { + animation: agent-fab-action-disassemble-bot 6.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__antenna { + animation: agent-fab-action-disassemble-antenna 6.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__head { + animation: agent-fab-action-disassemble-head 6.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__body { + animation: agent-fab-action-disassemble-body 6.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__arm--left { + animation: agent-fab-action-disassemble-arm-left 6.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__arm--right { + animation: agent-fab-action-disassemble-arm-right 6.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__leg--left { + animation: agent-fab-action-disassemble-leg-left 6.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__leg--right { + animation: agent-fab-action-disassemble-leg-right 6.2s ease-in-out both; +} + +@keyframes agent-fab-action-disassemble-bot { + /* 34%-70% 让散落状态停留片刻,再用 84% 的轻微过冲表现回装吸附感。 */ + 0%, + 100% { + transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); + } + + 12% { + transform: translateY(-0.08rem) scale(var(--agent-assistant-bot-scale)) rotate(-5deg); + } + + 24%, + 72% { + transform: translateY(0.18rem) scale(var(--agent-assistant-bot-scale)) rotate(0deg); + } + + 86% { + transform: translateY(-0.04rem) scale(var(--agent-assistant-bot-scale)) rotate(3deg); + } +} + +@keyframes agent-fab-action-disassemble-antenna { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); + } + + 16% { + transform: translate(0.02rem, -0.14rem) rotate(44deg); + } + + 32%, + 70% { + transform: translate(0.96rem, 3.42rem) rotate(268deg); + } + + 84% { + transform: translate(-0.05rem, -0.08rem) rotate(8deg); + } +} + +@keyframes agent-fab-action-disassemble-head { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); + } + + 16% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.24rem)) rotate(-8deg); + } + + 32%, + 70% { + transform: translate(-1.18rem, 2.72rem) rotate(-46deg); + } + + 84% { + transform: translate(0.08rem, -0.1rem) rotate(6deg); + } +} + +@keyframes agent-fab-action-disassemble-body { + 0%, + 100% { + transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)); + } + + 18% { + transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) + 0.08rem)) rotate(4deg); + } + + 34%, + 70% { + transform: translate(0.26rem, 1.56rem) rotate(18deg); + } + + 84% { + transform: translate(-0.05rem, -0.08rem) rotate(-5deg); + } +} + +@keyframes agent-fab-action-disassemble-arm-left { + 0%, + 100% { + transform: rotate(17deg); + } + + 18% { + transform: translate(-0.16rem, -0.08rem) rotate(78deg); + } + + 34%, + 70% { + transform: translate(-1.72rem, 1.84rem) rotate(248deg); + } + + 84% { + transform: translate(0.08rem, -0.04rem) rotate(-4deg); + } +} + +@keyframes agent-fab-action-disassemble-arm-right { + 0%, + 100% { + transform: rotate(-17deg); + } + + 18% { + transform: translate(0.16rem, -0.08rem) rotate(-78deg); + } + + 34%, + 70% { + transform: translate(1.58rem, 1.72rem) rotate(-238deg); + } + + 84% { + transform: translate(-0.08rem, -0.04rem) rotate(4deg); + } +} + +@keyframes agent-fab-action-disassemble-leg-left { + 0%, + 100% { + transform: rotate(0deg); + } + + 20% { + transform: translate(-0.12rem, 0.18rem) rotate(34deg); + } + + 34%, + 70% { + transform: translate(-0.98rem, 0.96rem) rotate(112deg); + } + + 84% { + transform: translate(0.07rem, -0.08rem) rotate(-8deg); + } +} + +@keyframes agent-fab-action-disassemble-leg-right { + 0%, + 100% { + transform: rotate(0deg); + } + + 20% { + transform: translate(0.12rem, 0.18rem) rotate(-34deg); + } + + 34%, + 70% { + transform: translate(0.92rem, 1.04rem) rotate(-118deg); + } + + 84% { + transform: translate(-0.07rem, -0.08rem) rotate(8deg); + } +} diff --git a/src/components/agent/pet/renderers/actions/_eye-roll.scss b/src/components/agent/pet/renderers/actions/_eye-roll.scss new file mode 100644 index 00000000..160a49f5 --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_eye-roll.scss @@ -0,0 +1,50 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab.is-action-eye-roll .agent-assistant-fab__head { + animation: agent-fab-action-eye-roll-head 1.9s ease-in-out both; +} + +.agent-assistant-fab.is-action-eye-roll .agent-assistant-fab__eye { + animation: + agent-fab-blink 4.8s ease-in-out infinite, + agent-fab-action-eye-roll 0.95s ease-in-out 2; +} + +@keyframes agent-fab-action-eye-roll-head { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); + } + + 24% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.06rem)) rotate(-6deg); + } + + 52% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(5deg); + } + + 78% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.03rem)) rotate(-3deg); + } +} + +@keyframes agent-fab-action-eye-roll { + 0%, + 100% { + transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)); + } + + 22% { + transform: translate(0.22rem, -0.2rem); + } + + 48% { + transform: translate(0, -0.3rem); + } + + 72% { + transform: translate(-0.22rem, -0.2rem); + } +} diff --git a/src/components/agent/pet/renderers/actions/_faint.scss b/src/components/agent/pet/renderers/actions/_faint.scss new file mode 100644 index 00000000..0354c07a --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_faint.scss @@ -0,0 +1,138 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab.is-action-faint .agent-assistant-fab__bot { + animation: agent-fab-action-faint-bot 4.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-faint .agent-assistant-fab__antenna { + animation: agent-fab-action-faint-antenna 4.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-faint .agent-assistant-fab__head { + animation: agent-fab-action-faint-head 4.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-faint .agent-assistant-fab__body { + animation: agent-fab-action-faint-body 4.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-faint .agent-assistant-fab__arm--left { + animation: agent-fab-action-faint-arm-left 4.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-faint .agent-assistant-fab__arm--right { + animation: agent-fab-action-faint-arm-right 4.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-faint .agent-assistant-fab__leg--left { + animation: agent-fab-action-faint-leg-left 4.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-faint .agent-assistant-fab__leg--right { + animation: agent-fab-action-faint-leg-right 4.8s ease-in-out both; +} + +@keyframes agent-fab-action-faint-bot { + 0%, + 100% { + transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); + } + + 26% { + transform: translateY(-0.1rem) scale(var(--agent-assistant-bot-scale)) rotate(12deg); + } + + 34%, + 86% { + transform: translate(0.58rem, 1.08rem) scale(var(--agent-assistant-bot-scale)) rotate(98deg); + } +} + +@keyframes agent-fab-action-faint-antenna { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); + } + + 34%, + 86% { + transform: translate(0.08rem, 0.02rem) rotate(-18deg); + } +} + +@keyframes agent-fab-action-faint-head { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); + } + + 28% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.04rem)) rotate(9deg); + } + + 34%, + 86% { + transform: translate(0.04rem, 0.02rem) rotate(-3deg); + } +} + +@keyframes agent-fab-action-faint-body { + 0%, + 100% { + transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)); + } + + 34%, + 86% { + transform: translate(0.04rem, 0.02rem) scaleY(0.9); + } +} + +@keyframes agent-fab-action-faint-arm-left { + 0%, + 100% { + transform: rotate(17deg); + } + + 34%, + 86% { + transform: translate(-0.12rem, 0.16rem) rotate(118deg); + } +} + +@keyframes agent-fab-action-faint-arm-right { + 0%, + 100% { + transform: rotate(-17deg); + } + + 34%, + 86% { + transform: translate(0.12rem, 0.16rem) rotate(-118deg); + } +} + +@keyframes agent-fab-action-faint-leg-left { + 0%, + 100% { + transform: rotate(0deg); + } + + 34%, + 86% { + transform: translate(-0.24rem, -0.02rem) rotate(82deg); + } +} + +@keyframes agent-fab-action-faint-leg-right { + 0%, + 100% { + transform: rotate(0deg); + } + + 34%, + 86% { + transform: translate(0.24rem, -0.02rem) rotate(-82deg); + } +} diff --git a/src/components/agent/pet/renderers/actions/_happy-jump.scss b/src/components/agent/pet/renderers/actions/_happy-jump.scss new file mode 100644 index 00000000..71b8a87d --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_happy-jump.scss @@ -0,0 +1,309 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__bot { + animation: agent-fab-action-happy-jump-bot 5.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__antenna { + animation: agent-fab-action-happy-jump-antenna 5.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__head { + animation: agent-fab-action-happy-jump-head 5.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__eye { + animation: agent-fab-action-happy-jump-eye 5.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__smile { + animation: agent-fab-action-happy-jump-smile 5.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__body { + animation: agent-fab-action-happy-jump-body 5.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__arm--left { + z-index: 6; + animation: agent-fab-action-happy-jump-arm-left 5.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__arm--right { + z-index: 6; + animation: agent-fab-action-happy-jump-arm-right 5.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__leg--left { + animation: agent-fab-action-happy-jump-leg-left 5.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__leg--right { + animation: agent-fab-action-happy-jump-leg-right 5.2s ease-in-out both; +} + +@keyframes agent-fab-action-happy-jump-bot { + /* 三段蓄力、起跳、落地,让开心连跳比单纯上下移动更像真人动作。 */ + 0%, + 100% { + transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); + } + + 9%, + 37%, + 65% { + transform: translateY(0.22rem) scale(var(--agent-assistant-bot-scale)) + rotate(calc(var(--agent-assistant-robot-tilt) - 3deg)); + } + + 20%, + 48%, + 76% { + transform: translateY(-0.76rem) scale(var(--agent-assistant-bot-scale)) + rotate(calc(var(--agent-assistant-robot-tilt) + 4deg)); + } + + 29%, + 57%, + 85% { + transform: translateY(0.1rem) scale(var(--agent-assistant-bot-scale)) + rotate(calc(var(--agent-assistant-robot-tilt) - 2deg)); + } + + 92% { + transform: translateY(-0.1rem) scale(var(--agent-assistant-bot-scale)) + rotate(calc(var(--agent-assistant-robot-tilt) + 1deg)); + } +} + +@keyframes agent-fab-action-happy-jump-antenna { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); + } + + 9%, + 37%, + 65% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) + 0.1rem)) rotate(34deg); + } + + 20%, + 48%, + 76% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.2rem)) rotate(-18deg); + } + + 29%, + 57%, + 85% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) + 0.04rem)) rotate(38deg); + } +} + +@keyframes agent-fab-action-happy-jump-head { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); + } + + 9%, + 37%, + 65% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) + 0.1rem)) rotate(-4deg); + } + + 20%, + 48%, + 76% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.16rem)) rotate(7deg); + } + + 29%, + 57%, + 85% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) + 0.04rem)) rotate(-5deg); + } + + 92% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.04rem)) rotate(2deg); + } +} + +@keyframes agent-fab-action-happy-jump-eye { + 0%, + 100% { + border-block-end-width: 0.15rem; + opacity: 1; + transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)) scale(1, 1); + } + + 8%, + 36%, + 64%, + 92% { + border-block-end-width: 0.18rem; + transform: translate(0, -0.06rem) scale(1.08, 0.72); + } + + 20%, + 48%, + 76% { + border-block-end-width: 0.19rem; + transform: translate(0, -0.12rem) scale(1.16, 0.58); + } +} + +@keyframes agent-fab-action-happy-jump-smile { + 0%, + 100% { + opacity: 0; + transform: translateX(-50%) scale(0.72); + } + + 6%, + 90% { + opacity: 1; + } + + 9%, + 37%, + 65% { + transform: translateX(-50%) translateY(0.02rem) scale(0.92, 0.82); + } + + 20%, + 48%, + 76% { + transform: translateX(-50%) translateY(-0.04rem) scale(1.22, 1.08); + } +} + +@keyframes agent-fab-action-happy-jump-body { + 0%, + 100% { + transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)) scaleY(1); + } + + 9%, + 37%, + 65% { + transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) + 0.18rem)) scaleY(0.84) + rotate(-2deg); + } + + 20%, + 48%, + 76% { + transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) - 0.1rem)) scaleY(1.08) + rotate(4deg); + } + + 29%, + 57%, + 85% { + transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) + 0.08rem)) scaleY(0.94) + rotate(-3deg); + } +} + +@keyframes agent-fab-action-happy-jump-arm-left { + 0%, + 100% { + transform: rotate(17deg); + } + + 9%, + 37%, + 65% { + transform: translate(-0.08rem, 0.06rem) rotate(54deg); + } + + 20%, + 48%, + 76% { + transform: translate(-0.24rem, -0.38rem) rotate(152deg); + } + + 29%, + 57%, + 85% { + transform: translate(-0.1rem, -0.02rem) rotate(96deg); + } +} + +@keyframes agent-fab-action-happy-jump-arm-right { + 0%, + 100% { + transform: rotate(-17deg); + } + + 9%, + 37%, + 65% { + transform: translate(0.08rem, 0.06rem) rotate(-54deg); + } + + 20%, + 48%, + 76% { + transform: translate(0.24rem, -0.38rem) rotate(-152deg); + } + + 29%, + 57%, + 85% { + transform: translate(0.1rem, -0.02rem) rotate(-96deg); + } +} + +@keyframes agent-fab-action-happy-jump-leg-left { + 0%, + 100% { + transform: rotate(0deg); + } + + 9%, + 37%, + 65% { + transform: translate(0.08rem, -0.22rem) rotate(82deg); + } + + 20%, + 48%, + 76% { + transform: translate(-0.18rem, 0.08rem) rotate(-32deg); + } + + 29%, + 57%, + 85% { + transform: translate(0.12rem, -0.08rem) rotate(44deg); + } +} + +@keyframes agent-fab-action-happy-jump-leg-right { + 0%, + 100% { + transform: rotate(0deg); + } + + 9%, + 37%, + 65% { + transform: translate(-0.08rem, -0.22rem) rotate(-82deg); + } + + 20%, + 48%, + 76% { + transform: translate(0.18rem, 0.08rem) rotate(32deg); + } + + 29%, + 57%, + 85% { + transform: translate(-0.12rem, -0.08rem) rotate(-44deg); + } +} diff --git a/src/components/agent/pet/renderers/actions/_peek.scss b/src/components/agent/pet/renderers/actions/_peek.scss new file mode 100644 index 00000000..4c53f15e --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_peek.scss @@ -0,0 +1,106 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab.is-action-peek .agent-assistant-fab__bot { + animation: agent-fab-action-peek-bot 2.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-peek .agent-assistant-fab__antenna { + animation: agent-fab-action-peek-antenna 2.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-peek .agent-assistant-fab__head { + animation: agent-fab-action-peek-head 2.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-peek .agent-assistant-fab__eye { + animation: agent-fab-action-peek-eye 2.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-peek .agent-assistant-fab__arm--left { + z-index: 6; + animation: agent-fab-action-peek-arm-left 2.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-peek .agent-assistant-fab__arm--right { + animation: agent-fab-action-peek-arm-right 2.8s ease-in-out both; +} + +@keyframes agent-fab-action-peek-bot { + 0%, + 100% { + transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); + } + + 26%, + 78% { + transform: translateX(-0.48rem) scale(var(--agent-assistant-bot-scale)) + rotate(calc(var(--agent-assistant-robot-tilt) - 8deg)); + } + + 48% { + transform: translateX(-0.58rem) scale(var(--agent-assistant-bot-scale)) + rotate(calc(var(--agent-assistant-robot-tilt) - 11deg)); + } +} + +@keyframes agent-fab-action-peek-antenna { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); + } + + 26%, + 78% { + transform: translate(-0.12rem, -0.06rem) rotate(-12deg); + } +} + +@keyframes agent-fab-action-peek-head { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); + } + + 26%, + 78% { + transform: translate(calc(var(--agent-assistant-head-x) - 0.18rem), calc(var(--agent-assistant-head-y) - 0.04rem)) + rotate(-10deg); + } +} + +@keyframes agent-fab-action-peek-eye { + 0%, + 100% { + transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)); + } + + 26%, + 78% { + transform: translate(-0.18rem, -0.02rem) scale(1.12, 1); + } +} + +@keyframes agent-fab-action-peek-arm-left { + 0%, + 100% { + transform: rotate(17deg); + } + + 26%, + 78% { + transform: translate(-0.24rem, -0.12rem) rotate(116deg); + } +} + +@keyframes agent-fab-action-peek-arm-right { + 0%, + 100% { + transform: rotate(-17deg); + } + + 26%, + 78% { + transform: translate(0.04rem, 0.06rem) rotate(-34deg); + } +} diff --git a/src/components/agent/pet/renderers/actions/_scan.scss b/src/components/agent/pet/renderers/actions/_scan.scss new file mode 100644 index 00000000..0966e14e --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_scan.scss @@ -0,0 +1,84 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab.is-action-scan .agent-assistant-fab__head { + animation: agent-fab-action-scan-head 3.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-scan .agent-assistant-fab__face { + animation: agent-fab-action-scan-face 3.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-scan .agent-assistant-fab__eye { + animation: agent-fab-action-scan-eye 3.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-scan .agent-assistant-fab__core { + animation: agent-fab-action-scan-core 3.2s ease-in-out both; +} + +@keyframes agent-fab-action-scan-head { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); + } + + 24% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(-8deg); + } + + 52% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(8deg); + } + + 78% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.04rem)) rotate(-4deg); + } +} + +@keyframes agent-fab-action-scan-face { + 0%, + 100% { + box-shadow: inset 0 0.1rem 0 rgba(255, 255, 255, 8%); + } + + 18%, + 78% { + box-shadow: + inset 0 0.1rem 0 rgba(255, 255, 255, 8%), + 0 0 0.72rem rgba(114, 255, 240, 48%); + } +} + +@keyframes agent-fab-action-scan-eye { + 0%, + 100% { + transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)); + } + + 18% { + transform: translate(-0.28rem, -0.02rem) scale(1.1, 0.9); + } + + 46% { + transform: translate(0.28rem, -0.02rem) scale(1.1, 0.9); + } + + 74% { + transform: translate(0, -0.18rem) scale(1.18, 0.72); + } +} + +@keyframes agent-fab-action-scan-core { + 0%, + 100% { + opacity: 0.78; + transform: scale(1); + } + + 25%, + 75% { + opacity: 1; + transform: scale(1.24); + } +} diff --git a/src/components/agent/pet/renderers/actions/_shared.scss b/src/components/agent/pet/renderers/actions/_shared.scss new file mode 100644 index 00000000..230de64f --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_shared.scss @@ -0,0 +1,14 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__antenna, +.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__head, +.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__face, +.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__body, +.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__core, +.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__arm, +.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__leg, +.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__eye, +.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__smile { + transition: none; +} diff --git a/src/components/agent/pet/renderers/actions/_shy.scss b/src/components/agent/pet/renderers/actions/_shy.scss new file mode 100644 index 00000000..1e082ef1 --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_shy.scss @@ -0,0 +1,88 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab.is-action-shy .agent-assistant-fab__bot { + animation: agent-fab-action-shy-bot 3s ease-in-out both; +} + +.agent-assistant-fab.is-action-shy .agent-assistant-fab__head { + animation: agent-fab-action-shy-head 3s ease-in-out both; +} + +.agent-assistant-fab.is-action-shy .agent-assistant-fab__eye { + animation: agent-fab-action-shy-eye 3s ease-in-out both; +} + +.agent-assistant-fab.is-action-shy .agent-assistant-fab__arm--left { + z-index: 6; + animation: agent-fab-action-shy-arm-left 3s ease-in-out both; +} + +.agent-assistant-fab.is-action-shy .agent-assistant-fab__arm--right { + z-index: 6; + animation: agent-fab-action-shy-arm-right 3s ease-in-out both; +} + +@keyframes agent-fab-action-shy-bot { + 0%, + 100% { + transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); + } + + 24%, + 78% { + transform: translateX(0.16rem) scale(var(--agent-assistant-bot-scale)) + rotate(calc(var(--agent-assistant-robot-tilt) + 7deg)); + } +} + +@keyframes agent-fab-action-shy-head { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); + } + + 24%, + 78% { + transform: translate(calc(var(--agent-assistant-head-x) + 0.08rem), calc(var(--agent-assistant-head-y) + 0.14rem)) + rotate(10deg); + } +} + +@keyframes agent-fab-action-shy-eye { + 0%, + 100% { + opacity: 1; + transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)) scale(1); + } + + 24%, + 78% { + opacity: 0.78; + transform: translate(0, 0.08rem) scale(0.86, 0.48); + } +} + +@keyframes agent-fab-action-shy-arm-left { + 0%, + 100% { + transform: rotate(17deg); + } + + 24%, + 78% { + transform: translate(0.02rem, -0.16rem) rotate(118deg); + } +} + +@keyframes agent-fab-action-shy-arm-right { + 0%, + 100% { + transform: rotate(-17deg); + } + + 24%, + 78% { + transform: translate(-0.02rem, -0.16rem) rotate(-118deg); + } +} diff --git a/src/components/agent/pet/renderers/actions/_sit.scss b/src/components/agent/pet/renderers/actions/_sit.scss new file mode 100644 index 00000000..815aed41 --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_sit.scss @@ -0,0 +1,116 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab.is-action-sit .agent-assistant-fab__bot { + animation: agent-fab-action-sit-bot 4.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-sit .agent-assistant-fab__head { + animation: agent-fab-action-sit-head 4.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-sit .agent-assistant-fab__body { + animation: agent-fab-action-sit-body 4.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-sit .agent-assistant-fab__arm--left { + animation: agent-fab-action-sit-arm-left 4.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-sit .agent-assistant-fab__arm--right { + animation: agent-fab-action-sit-arm-right 4.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-sit .agent-assistant-fab__leg--left { + z-index: 5; + animation: agent-fab-action-sit-leg-left 4.2s ease-in-out both; +} + +.agent-assistant-fab.is-action-sit .agent-assistant-fab__leg--right { + z-index: 5; + animation: agent-fab-action-sit-leg-right 4.2s ease-in-out both; +} + +@keyframes agent-fab-action-sit-bot { + 0%, + 100% { + transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); + } + + 22%, + 84% { + transform: translateY(0.36rem) scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); + } +} + +@keyframes agent-fab-action-sit-head { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); + } + + 22%, + 84% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) + 0.1rem)) rotate(2deg); + } +} + +@keyframes agent-fab-action-sit-body { + 0%, + 100% { + transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)) scaleY(1); + } + + 22%, + 84% { + transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) + 0.22rem)) scaleY(0.82); + } +} + +@keyframes agent-fab-action-sit-arm-left { + 0%, + 100% { + transform: rotate(17deg); + } + + 22%, + 84% { + transform: translate(0.08rem, 0.22rem) rotate(76deg); + } +} + +@keyframes agent-fab-action-sit-arm-right { + 0%, + 100% { + transform: rotate(-17deg); + } + + 22%, + 84% { + transform: translate(-0.08rem, 0.22rem) rotate(-76deg); + } +} + +@keyframes agent-fab-action-sit-leg-left { + 0%, + 100% { + transform: rotate(0deg); + } + + 22%, + 84% { + transform: translate(0.18rem, -0.18rem) rotate(94deg); + } +} + +@keyframes agent-fab-action-sit-leg-right { + 0%, + 100% { + transform: rotate(0deg); + } + + 22%, + 84% { + transform: translate(-0.18rem, -0.18rem) rotate(-94deg); + } +} diff --git a/src/components/agent/pet/renderers/actions/_sleep.scss b/src/components/agent/pet/renderers/actions/_sleep.scss new file mode 100644 index 00000000..46beafd6 --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_sleep.scss @@ -0,0 +1,144 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab.is-action-sleep .agent-assistant-fab__bot { + animation: agent-fab-action-sleep-bot 5.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-sleep .agent-assistant-fab__antenna { + animation: agent-fab-action-sleep-antenna 5.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-sleep .agent-assistant-fab__head { + animation: agent-fab-action-sleep-head 5.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-sleep .agent-assistant-fab__eye { + animation: agent-fab-action-sleep-eye 5.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-sleep .agent-assistant-fab__body { + animation: agent-fab-action-sleep-body 5.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-sleep .agent-assistant-fab__arm--left { + animation: agent-fab-action-sleep-arm-left 5.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-sleep .agent-assistant-fab__arm--right { + animation: agent-fab-action-sleep-arm-right 5.8s ease-in-out both; +} + +.agent-assistant-fab.is-action-sleep .agent-assistant-fab__leg { + animation: agent-fab-action-sleep-leg 5.8s ease-in-out both; +} + +@keyframes agent-fab-action-sleep-bot { + 0%, + 100% { + transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); + } + + 22%, + 82% { + transform: translateY(0.42rem) scale(var(--agent-assistant-bot-scale)) + rotate(calc(var(--agent-assistant-robot-tilt) - 8deg)); + } + + 46%, + 64% { + transform: translateY(0.36rem) scale(var(--agent-assistant-bot-scale)) + rotate(calc(var(--agent-assistant-robot-tilt) - 10deg)); + } +} + +@keyframes agent-fab-action-sleep-antenna { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); + } + + 22%, + 82% { + opacity: 0.62; + transform: translate(0.1rem, 0.16rem) rotate(78deg) scale(0.78); + } +} + +@keyframes agent-fab-action-sleep-head { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); + } + + 22%, + 82% { + transform: translate(calc(var(--agent-assistant-head-x) - 0.12rem), calc(var(--agent-assistant-head-y) + 0.22rem)) + rotate(-12deg); + } +} + +@keyframes agent-fab-action-sleep-eye { + 0%, + 100% { + border-block-end-width: 0.15rem; + opacity: 1; + transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)) scale(1); + } + + 18%, + 86% { + border-block-end-width: 0.1rem; + opacity: 0.62; + transform: translate(0, 0.1rem) scale(1.18, 0.24); + } +} + +@keyframes agent-fab-action-sleep-body { + 0%, + 100% { + transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)) scaleY(1); + } + + 22%, + 82% { + transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) + 0.26rem)) scaleY(0.78); + } +} + +@keyframes agent-fab-action-sleep-arm-left { + 0%, + 100% { + transform: rotate(17deg); + } + + 22%, + 82% { + transform: translate(0.12rem, 0.2rem) rotate(92deg); + } +} + +@keyframes agent-fab-action-sleep-arm-right { + 0%, + 100% { + transform: rotate(-17deg); + } + + 22%, + 82% { + transform: translate(-0.12rem, 0.2rem) rotate(-92deg); + } +} + +@keyframes agent-fab-action-sleep-leg { + 0%, + 100% { + transform: rotate(0deg); + } + + 22%, + 82% { + opacity: 0.35; + transform: translateY(-0.16rem) scale(0.76); + } +} diff --git a/src/components/agent/pet/renderers/actions/_spin-cheer.scss b/src/components/agent/pet/renderers/actions/_spin-cheer.scss new file mode 100644 index 00000000..03177746 --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_spin-cheer.scss @@ -0,0 +1,130 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab.is-action-spin-cheer .agent-assistant-fab__bot { + animation: agent-fab-action-spin-cheer-bot 3.6s ease-in-out both; +} + +.agent-assistant-fab.is-action-spin-cheer .agent-assistant-fab__antenna { + animation: agent-fab-action-spin-cheer-antenna 3.6s ease-in-out both; +} + +.agent-assistant-fab.is-action-spin-cheer .agent-assistant-fab__head { + animation: agent-fab-action-spin-cheer-head 3.6s ease-in-out both; +} + +.agent-assistant-fab.is-action-spin-cheer .agent-assistant-fab__eye { + animation: agent-fab-action-spin-cheer-eye 3.6s ease-in-out both; +} + +.agent-assistant-fab.is-action-spin-cheer .agent-assistant-fab__smile { + animation: agent-fab-action-spin-cheer-smile 3.6s ease-in-out both; +} + +.agent-assistant-fab.is-action-spin-cheer .agent-assistant-fab__arm--left { + z-index: 6; + animation: agent-fab-action-spin-cheer-arm-left 3.6s ease-in-out both; +} + +.agent-assistant-fab.is-action-spin-cheer .agent-assistant-fab__arm--right { + z-index: 6; + animation: agent-fab-action-spin-cheer-arm-right 3.6s ease-in-out both; +} + +@keyframes agent-fab-action-spin-cheer-bot { + 0%, + 100% { + transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); + } + + 18% { + transform: translateY(0.18rem) scale(var(--agent-assistant-bot-scale)) + rotate(calc(var(--agent-assistant-robot-tilt) - 7deg)); + } + + 48% { + transform: translateY(-0.58rem) scale(var(--agent-assistant-bot-scale)) + rotate(calc(var(--agent-assistant-robot-tilt) + 184deg)); + } + + 78% { + transform: translateY(-0.14rem) scale(var(--agent-assistant-bot-scale)) + rotate(calc(var(--agent-assistant-robot-tilt) + 356deg)); + } +} + +@keyframes agent-fab-action-spin-cheer-antenna { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); + } + + 22%, + 78% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.18rem)) rotate(-28deg); + } +} + +@keyframes agent-fab-action-spin-cheer-head { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); + } + + 22%, + 78% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.12rem)) rotate(8deg); + } +} + +@keyframes agent-fab-action-spin-cheer-eye { + 0%, + 100% { + border-block-end-width: 0.15rem; + transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)) scale(1); + } + + 20%, + 80% { + border-block-end-width: 0.19rem; + transform: translate(0, -0.12rem) scale(1.18, 0.58); + } +} + +@keyframes agent-fab-action-spin-cheer-smile { + 0%, + 100% { + opacity: 0; + transform: translateX(-50%) scale(0.72); + } + + 16%, + 84% { + opacity: 1; + transform: translateX(-50%) translateY(-0.03rem) scale(1.24, 1.08); + } +} + +@keyframes agent-fab-action-spin-cheer-arm-left { + 0%, + 100% { + transform: rotate(17deg); + } + + 20%, + 80% { + transform: translate(-0.28rem, -0.44rem) rotate(148deg); + } +} + +@keyframes agent-fab-action-spin-cheer-arm-right { + 0%, + 100% { + transform: rotate(-17deg); + } + + 20%, + 80% { + transform: translate(0.28rem, -0.44rem) rotate(-148deg); + } +} diff --git a/src/components/agent/pet/renderers/actions/_stretch.scss b/src/components/agent/pet/renderers/actions/_stretch.scss new file mode 100644 index 00000000..395de8c8 --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_stretch.scss @@ -0,0 +1,146 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab.is-action-stretch .agent-assistant-fab__bot { + animation: agent-fab-action-stretch-bot 4.4s ease-in-out both; +} + +.agent-assistant-fab.is-action-stretch .agent-assistant-fab__antenna { + animation: agent-fab-action-stretch-antenna 4.4s ease-in-out both; +} + +.agent-assistant-fab.is-action-stretch .agent-assistant-fab__head { + animation: agent-fab-action-stretch-head 4.4s ease-in-out both; +} + +.agent-assistant-fab.is-action-stretch .agent-assistant-fab__body { + animation: agent-fab-action-stretch-body 4.4s ease-in-out both; +} + +.agent-assistant-fab.is-action-stretch .agent-assistant-fab__arm--left { + z-index: 6; + animation: agent-fab-action-stretch-arm-left 4.4s ease-in-out both; +} + +.agent-assistant-fab.is-action-stretch .agent-assistant-fab__arm--right { + z-index: 6; + animation: agent-fab-action-stretch-arm-right 4.4s ease-in-out both; +} + +.agent-assistant-fab.is-action-stretch .agent-assistant-fab__leg--left { + animation: agent-fab-action-stretch-leg-left 4.4s ease-in-out both; +} + +.agent-assistant-fab.is-action-stretch .agent-assistant-fab__leg--right { + animation: agent-fab-action-stretch-leg-right 4.4s ease-in-out both; +} + +@keyframes agent-fab-action-stretch-bot { + 0%, + 100% { + transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); + } + + 18% { + transform: translateY(0.18rem) scale(var(--agent-assistant-bot-scale)) scaleY(0.92) + rotate(var(--agent-assistant-robot-tilt)); + } + + 44%, + 70% { + transform: translateY(-0.34rem) scale(var(--agent-assistant-bot-scale)) scaleY(1.06) + rotate(calc(var(--agent-assistant-robot-tilt) + 2deg)); + } + + 86% { + transform: translateY(0.08rem) scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); + } +} + +@keyframes agent-fab-action-stretch-antenna { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); + } + + 44%, + 70% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.2rem)) rotate(-24deg); + } +} + +@keyframes agent-fab-action-stretch-head { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); + } + + 44%, + 70% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.28rem)) rotate(5deg); + } +} + +@keyframes agent-fab-action-stretch-body { + 0%, + 100% { + transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)) scaleY(1); + } + + 18% { + transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) + 0.12rem)) scaleY(0.88); + } + + 44%, + 70% { + transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) - 0.08rem)) scaleY(1.12); + } +} + +@keyframes agent-fab-action-stretch-arm-left { + 0%, + 100% { + transform: rotate(17deg); + } + + 44%, + 70% { + transform: translate(-0.24rem, -0.7rem) rotate(168deg); + } +} + +@keyframes agent-fab-action-stretch-arm-right { + 0%, + 100% { + transform: rotate(-17deg); + } + + 44%, + 70% { + transform: translate(0.24rem, -0.7rem) rotate(-168deg); + } +} + +@keyframes agent-fab-action-stretch-leg-left { + 0%, + 100% { + transform: rotate(0deg); + } + + 44%, + 70% { + transform: translate(-0.18rem, 0.02rem) rotate(-18deg); + } +} + +@keyframes agent-fab-action-stretch-leg-right { + 0%, + 100% { + transform: rotate(0deg); + } + + 44%, + 70% { + transform: translate(0.18rem, 0.02rem) rotate(18deg); + } +} diff --git a/src/components/agent/pet/renderers/actions/_wave.scss b/src/components/agent/pet/renderers/actions/_wave.scss new file mode 100644 index 00000000..2b1d327b --- /dev/null +++ b/src/components/agent/pet/renderers/actions/_wave.scss @@ -0,0 +1,87 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab.is-action-wave .agent-assistant-fab__bot { + animation: agent-fab-action-wave-bot 2.3s ease-in-out both; +} + +.agent-assistant-fab.is-action-wave .agent-assistant-fab__head { + animation: agent-fab-action-wave-head 2.3s ease-in-out both; +} + +.agent-assistant-fab.is-action-wave .agent-assistant-fab__arm--left { + z-index: 6; + animation: agent-fab-action-wave-arm-left 2.3s ease-in-out both; + transform-origin: top center; +} + +.agent-assistant-fab.is-action-wave .agent-assistant-fab__arm--right { + animation: agent-fab-action-wave-arm-right 2.3s ease-in-out both; +} + +@keyframes agent-fab-action-wave-bot { + 0%, + 100% { + transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); + } + + 22%, + 66% { + transform: scale(var(--agent-assistant-bot-scale)) rotate(calc(var(--agent-assistant-robot-tilt) - 4deg)); + } +} + +@keyframes agent-fab-action-wave-head { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); + } + + 30%, + 66% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.1rem)) rotate(-4deg); + } +} + +@keyframes agent-fab-action-wave-arm-left { + 0%, + 100% { + transform: rotate(17deg); + } + + 16% { + transform: translate(-0.08rem, -0.06rem) rotate(64deg); + } + + 30% { + transform: translate(-0.26rem, -0.28rem) rotate(132deg); + } + + 44% { + transform: translate(-0.18rem, -0.2rem) rotate(92deg); + } + + 58% { + transform: translate(-0.26rem, -0.28rem) rotate(132deg); + } + + 72% { + transform: translate(-0.1rem, -0.08rem) rotate(64deg); + } + + 88% { + transform: translate(-0.02rem, -0.02rem) rotate(28deg); + } +} + +@keyframes agent-fab-action-wave-arm-right { + 0%, + 100% { + transform: rotate(-17deg); + } + + 30%, + 70% { + transform: rotate(-28deg) translateY(0.06rem); + } +} diff --git a/src/components/agent/pet/renderers/actions/cssRobotActions.scss b/src/components/agent/pet/renderers/actions/cssRobotActions.scss new file mode 100644 index 00000000..fec65132 --- /dev/null +++ b/src/components/agent/pet/renderers/actions/cssRobotActions.scss @@ -0,0 +1,15 @@ +@use './shared'; +@use './wave'; +@use './sit'; +@use './eye-roll'; +@use './faint'; +@use './disassemble'; +@use './happy-jump'; +@use './sleep'; +@use './stretch'; +@use './peek'; +@use './scan'; +@use './charge'; +@use './spin-cheer'; +@use './shy'; +@use './confused'; diff --git a/src/components/agent/pet/renderers/cssRobot.scss b/src/components/agent/pet/renderers/cssRobot.scss index efc4e578..8a61dacb 100644 --- a/src/components/agent/pet/renderers/cssRobot.scss +++ b/src/components/agent/pet/renderers/cssRobot.scss @@ -1,2262 +1,2 @@ -/* stylelint-disable no-descending-specificity */ -/* stylelint-disable no-duplicate-selectors */ - -.agent-assistant-fab__bot, -.agent-assistant-fab__bot span { - box-sizing: border-box; -} - -.agent-assistant-fab__bot { - position: absolute; - display: block; - block-size: 4.7rem; - filter: drop-shadow(0 0.55rem 0.55rem var(--agent-assistant-robot-shadow)); - inline-size: 3.85rem; - inset-block-end: 0.1rem; - inset-inline-end: 1.42rem; - transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); - transform-origin: 50% 72%; - transition: - inset-inline-end 0.24s ease, - filter 0.18s ease, - transform 0.14s ease; -} - -.agent-assistant-fab__antenna { - position: absolute; - z-index: 3; - display: block; - border-radius: 999px; - animation: agent-fab-antenna-idle 3.9s ease-in-out infinite; - background: var(--agent-assistant-robot-outline); - block-size: 0.66rem; - inline-size: 0.18rem; - inset-block-start: 0.72rem; - inset-inline-start: 2.62rem; - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); - transform-origin: bottom center; - transition: - opacity 0.2s ease, - transform 0.22s ease; -} - -.agent-assistant-fab__antenna::after { - position: absolute; - border: 2px solid var(--agent-assistant-robot-outline); - border-radius: 999px; - background: var(--agent-assistant-robot-shell-start); - block-size: 0.38rem; - content: ''; - inline-size: 0.38rem; - inset-block-start: -0.34rem; - inset-inline-start: -0.13rem; -} - -.agent-assistant-fab__head { - position: absolute; - z-index: 4; - display: block; - border: 2px solid var(--agent-assistant-robot-outline); - border-radius: 11px; - animation: agent-fab-head-idle 4.6s ease-in-out infinite; - background: linear-gradient( - 145deg, - var(--agent-assistant-robot-shell-start) 0%, - var(--agent-assistant-robot-shell-end) 100% - ); - block-size: 2.05rem; - box-shadow: - inset 0 -0.2rem 0 rgba(54, 0, 126, 26%), - inset 0.15rem 0.14rem 0 rgba(255, 255, 255, 24%); - inline-size: 2.82rem; - inset-block-start: 1.42rem; - inset-inline-start: 0.88rem; - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)); - transform-origin: 50% 85%; -} - -.agent-assistant-fab__face { - position: absolute; - display: block; - overflow: hidden; - border: 2px solid var(--agent-assistant-robot-outline-soft); - border-radius: 8px; - background: linear-gradient( - 180deg, - var(--agent-assistant-robot-face-start) 0%, - var(--agent-assistant-robot-face-end) 100% - ); - block-size: 1.28rem; - box-shadow: inset 0 0.1rem 0 rgba(255, 255, 255, 8%); - inline-size: 2.1rem; - inset-block-start: 0.33rem; - inset-inline-start: 0.25rem; -} - -.agent-assistant-fab__eye { - position: absolute; - display: block; - border-radius: 0 0 999px 999px; - animation: agent-fab-blink 4.8s ease-in-out infinite; - block-size: 0.42rem; - border-block-end: 0.15rem solid var(--agent-assistant-robot-eye); - inline-size: 0.42rem; - inset-block-start: 0.36rem; - transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)); - - /* 触屏设备没有连续 hover 轨迹,给眼神位移补过渡避免点按时瞬移。 */ - transition: transform 0.2s ease-out; -} - -.agent-assistant-fab__eye--left { - inset-inline-start: 0.43rem; -} - -.agent-assistant-fab__eye--right { - inset-inline-end: 0.43rem; -} - -.agent-assistant-fab__smile { - position: absolute; - display: block; - border-radius: 0 0 999px 999px; - block-size: 0.32rem; - border-block-end: 0.13rem solid var(--agent-assistant-robot-eye); - inline-size: 0.7rem; - inset-block-start: 0.75rem; - inset-inline-start: 50%; - opacity: 0; - transform: translateX(-50%) scale(0.72); - transform-origin: center top; -} - -.agent-assistant-fab__body { - position: absolute; - z-index: 3; - display: block; - border: 2px solid var(--agent-assistant-robot-outline); - border-radius: 0.65rem 0.65rem 0.55rem 0.55rem; - animation: agent-fab-body-idle 4.2s ease-in-out infinite; - background: linear-gradient( - 145deg, - var(--agent-assistant-robot-shell-mid) 0%, - var(--agent-assistant-robot-shell-end) 82% - ); - block-size: 1.34rem; - box-shadow: - inset 0 -0.18rem 0 rgba(54, 0, 126, 24%), - inset 0.16rem 0.12rem 0 rgba(255, 255, 255, 24%); - inline-size: 1.88rem; - inset-block-start: 3.24rem; - inset-inline-start: 1.32rem; - transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)); - transform-origin: 50% 18%; - transition: - opacity 0.2s ease, - transform 0.22s ease; -} - -.agent-assistant-fab__core { - position: absolute; - display: block; - background: transparent; - block-size: 100%; - box-shadow: none; - inline-size: 100%; - inset: 0; - pointer-events: none; -} - -.agent-assistant-fab__core::before { - position: absolute; - background: var(--agent-assistant-robot-play); - block-size: 0.46rem; - clip-path: polygon(18% 8%, 18% 92%, 90% 50%); - content: ''; - inline-size: 0.48rem; - inset-block-start: 50%; - inset-inline-start: 50%; - transform: translate(-42%, -50%); -} - -.agent-assistant-fab__arm, -.agent-assistant-fab__leg { - position: absolute; - z-index: 2; - display: block; - border: 2px solid var(--agent-assistant-robot-outline); - background: linear-gradient( - 160deg, - var(--agent-assistant-robot-shell-mid) 0%, - var(--agent-assistant-robot-outline-soft) 100% - ); - box-shadow: inset 0 -0.12rem 0 rgba(54, 0, 126, 24%); - transition: - opacity 0.2s ease, - transform 0.22s ease; -} - -.agent-assistant-fab__arm { - border-radius: 999px; - block-size: 1rem; - inline-size: 0.46rem; - inset-block-start: 3.3rem; -} - -.agent-assistant-fab__arm--left { - animation: agent-fab-arm-left-idle 3.8s ease-in-out infinite; - inset-inline-start: 0.9rem; - transform: rotate(17deg); - transform-origin: top center; -} - -.agent-assistant-fab__arm--right { - animation: agent-fab-arm-right-idle 4.1s ease-in-out infinite; - inset-inline-start: 3.08rem; - transform: rotate(-17deg); - transform-origin: top center; -} - -.agent-assistant-fab__leg { - border-radius: 0.35rem; - block-size: 0.66rem; - inline-size: 0.48rem; - inset-block-start: 4.36rem; -} - -.agent-assistant-fab__leg--left { - animation: agent-fab-leg-left-idle 4.8s ease-in-out infinite; - inset-inline-start: 1.48rem; - transform-origin: top center; -} - -.agent-assistant-fab__leg--right { - animation: agent-fab-leg-right-idle 4.8s ease-in-out 0.35s infinite; - inset-inline-start: 2.46rem; - transform-origin: top center; -} - -@media (hover: hover) and (pointer: fine) { - .agent-assistant-fab.is-bubble-visible .agent-assistant-fab__bubble:hover { - box-shadow: var(--app-surface-hover-shadow); - } - - .agent-assistant-fab__bubble:hover .agent-assistant-fab__bubble-close { - opacity: 1; - } - - .agent-assistant-fab__trigger:hover .agent-assistant-fab__bot { - filter: drop-shadow(0 0.7rem 0.7rem var(--agent-assistant-robot-shadow-strong)); - } -} - -@media (hover: none), (pointer: coarse) { - .agent-assistant-fab__bubble-close { - opacity: 1; - } -} - -.agent-assistant-fab__trigger:focus-visible .agent-assistant-fab__bot { - filter: - drop-shadow(0 0.55rem 0.55rem var(--agent-assistant-robot-shadow)) - drop-shadow(0 0 0.34rem rgba(var(--v-theme-primary), 0.55)); -} - -.agent-assistant-fab.is-pressed .agent-assistant-fab__bot { - transform: translateY(0.22rem) scale(var(--agent-assistant-bot-pressed-scale)) - rotate(var(--agent-assistant-robot-tilt)); -} - -.agent-assistant-fab.is-thinking .agent-assistant-fab__face { - box-shadow: - inset 0 0.1rem 0 rgba(255, 255, 255, 8%), - 0 0 0.65rem rgba(114, 255, 240, 50%); -} - -.agent-assistant-fab.is-thinking .agent-assistant-fab__core { - animation: agent-fab-core-pulse 0.9s ease-in-out infinite; -} - -.agent-assistant-fab.is-docked .agent-assistant-fab__bot { - inset-inline-end: -0.42rem; - transform: translateY(-0.2rem) scale(var(--agent-assistant-bot-scale)) rotate(-19deg); -} - -.agent-assistant-fab.is-docked .agent-assistant-fab__eye { - transform: translate(calc(var(--agent-assistant-eye-x) * 0.24 - 0.22rem), calc(var(--agent-assistant-eye-y) * 0.24)); -} - -.agent-assistant-fab.is-docked .agent-assistant-fab__body, -.agent-assistant-fab.is-docked .agent-assistant-fab__leg { - opacity: 0; - transform: translateX(0.8rem) scale(0.72); -} - -.agent-assistant-fab.is-docked .agent-assistant-fab__arm--left, -.agent-assistant-fab.is-docked .agent-assistant-fab__arm--right { - animation: none; - opacity: 0; - transform: translateX(0.8rem) scale(0.72); -} - -.agent-assistant-fab.is-docked .agent-assistant-fab__arm--left { - z-index: 5; - block-size: 0.95rem; - inline-size: 0.42rem; - inset-block-start: 3.62rem; - inset-inline-start: 1.86rem; - opacity: 1; - transform: rotate(78deg) scale(0.9); -} - -.agent-assistant-fab.is-docked .agent-assistant-fab__antenna { - animation: none; - opacity: 0.75; - transform: translate(0.34rem, 0.02rem) rotate(2deg) scale(0.82); -} - -.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__antenna, -.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__head, -.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__face, -.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__body, -.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__core, -.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__arm, -.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__leg, -.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__eye, -.agent-assistant-fab[class*='is-action-'] .agent-assistant-fab__smile { - transition: none; -} - -.agent-assistant-fab.is-action-wave .agent-assistant-fab__bot { - animation: agent-fab-action-wave-bot 2.3s ease-in-out both; -} - -.agent-assistant-fab.is-action-wave .agent-assistant-fab__head { - animation: agent-fab-action-wave-head 2.3s ease-in-out both; -} - -.agent-assistant-fab.is-action-wave .agent-assistant-fab__arm--left { - z-index: 6; - animation: agent-fab-action-wave-arm-left 2.3s ease-in-out both; - transform-origin: top center; -} - -.agent-assistant-fab.is-action-wave .agent-assistant-fab__arm--right { - animation: agent-fab-action-wave-arm-right 2.3s ease-in-out both; -} - -.agent-assistant-fab.is-action-sit .agent-assistant-fab__bot { - animation: agent-fab-action-sit-bot 4.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-sit .agent-assistant-fab__head { - animation: agent-fab-action-sit-head 4.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-sit .agent-assistant-fab__body { - animation: agent-fab-action-sit-body 4.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-sit .agent-assistant-fab__arm--left { - animation: agent-fab-action-sit-arm-left 4.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-sit .agent-assistant-fab__arm--right { - animation: agent-fab-action-sit-arm-right 4.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-sit .agent-assistant-fab__leg--left { - z-index: 5; - animation: agent-fab-action-sit-leg-left 4.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-sit .agent-assistant-fab__leg--right { - z-index: 5; - animation: agent-fab-action-sit-leg-right 4.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-eye-roll .agent-assistant-fab__head { - animation: agent-fab-action-eye-roll-head 1.9s ease-in-out both; -} - -.agent-assistant-fab.is-action-eye-roll .agent-assistant-fab__eye { - animation: - agent-fab-blink 4.8s ease-in-out infinite, - agent-fab-action-eye-roll 0.95s ease-in-out 2; -} - -.agent-assistant-fab.is-action-faint .agent-assistant-fab__bot { - animation: agent-fab-action-faint-bot 4.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-faint .agent-assistant-fab__antenna { - animation: agent-fab-action-faint-antenna 4.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-faint .agent-assistant-fab__head { - animation: agent-fab-action-faint-head 4.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-faint .agent-assistant-fab__body { - animation: agent-fab-action-faint-body 4.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-faint .agent-assistant-fab__arm--left { - animation: agent-fab-action-faint-arm-left 4.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-faint .agent-assistant-fab__arm--right { - animation: agent-fab-action-faint-arm-right 4.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-faint .agent-assistant-fab__leg--left { - animation: agent-fab-action-faint-leg-left 4.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-faint .agent-assistant-fab__leg--right { - animation: agent-fab-action-faint-leg-right 4.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__bot { - animation: agent-fab-action-disassemble-bot 6.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__antenna { - animation: agent-fab-action-disassemble-antenna 6.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__head { - animation: agent-fab-action-disassemble-head 6.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__body { - animation: agent-fab-action-disassemble-body 6.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__arm--left { - animation: agent-fab-action-disassemble-arm-left 6.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__arm--right { - animation: agent-fab-action-disassemble-arm-right 6.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__leg--left { - animation: agent-fab-action-disassemble-leg-left 6.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-disassemble .agent-assistant-fab__leg--right { - animation: agent-fab-action-disassemble-leg-right 6.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__bot { - animation: agent-fab-action-happy-jump-bot 5.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__antenna { - animation: agent-fab-action-happy-jump-antenna 5.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__head { - animation: agent-fab-action-happy-jump-head 5.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__eye { - animation: agent-fab-action-happy-jump-eye 5.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__smile { - animation: agent-fab-action-happy-jump-smile 5.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__body { - animation: agent-fab-action-happy-jump-body 5.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__arm--left { - z-index: 6; - animation: agent-fab-action-happy-jump-arm-left 5.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__arm--right { - z-index: 6; - animation: agent-fab-action-happy-jump-arm-right 5.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__leg--left { - animation: agent-fab-action-happy-jump-leg-left 5.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-happy-jump .agent-assistant-fab__leg--right { - animation: agent-fab-action-happy-jump-leg-right 5.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-sleep .agent-assistant-fab__bot { - animation: agent-fab-action-sleep-bot 5.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-sleep .agent-assistant-fab__antenna { - animation: agent-fab-action-sleep-antenna 5.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-sleep .agent-assistant-fab__head { - animation: agent-fab-action-sleep-head 5.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-sleep .agent-assistant-fab__eye { - animation: agent-fab-action-sleep-eye 5.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-sleep .agent-assistant-fab__body { - animation: agent-fab-action-sleep-body 5.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-sleep .agent-assistant-fab__arm--left { - animation: agent-fab-action-sleep-arm-left 5.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-sleep .agent-assistant-fab__arm--right { - animation: agent-fab-action-sleep-arm-right 5.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-sleep .agent-assistant-fab__leg { - animation: agent-fab-action-sleep-leg 5.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-stretch .agent-assistant-fab__bot { - animation: agent-fab-action-stretch-bot 4.4s ease-in-out both; -} - -.agent-assistant-fab.is-action-stretch .agent-assistant-fab__antenna { - animation: agent-fab-action-stretch-antenna 4.4s ease-in-out both; -} - -.agent-assistant-fab.is-action-stretch .agent-assistant-fab__head { - animation: agent-fab-action-stretch-head 4.4s ease-in-out both; -} - -.agent-assistant-fab.is-action-stretch .agent-assistant-fab__body { - animation: agent-fab-action-stretch-body 4.4s ease-in-out both; -} - -.agent-assistant-fab.is-action-stretch .agent-assistant-fab__arm--left { - z-index: 6; - animation: agent-fab-action-stretch-arm-left 4.4s ease-in-out both; -} - -.agent-assistant-fab.is-action-stretch .agent-assistant-fab__arm--right { - z-index: 6; - animation: agent-fab-action-stretch-arm-right 4.4s ease-in-out both; -} - -.agent-assistant-fab.is-action-stretch .agent-assistant-fab__leg--left { - animation: agent-fab-action-stretch-leg-left 4.4s ease-in-out both; -} - -.agent-assistant-fab.is-action-stretch .agent-assistant-fab__leg--right { - animation: agent-fab-action-stretch-leg-right 4.4s ease-in-out both; -} - -.agent-assistant-fab.is-action-peek .agent-assistant-fab__bot { - animation: agent-fab-action-peek-bot 2.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-peek .agent-assistant-fab__antenna { - animation: agent-fab-action-peek-antenna 2.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-peek .agent-assistant-fab__head { - animation: agent-fab-action-peek-head 2.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-peek .agent-assistant-fab__eye { - animation: agent-fab-action-peek-eye 2.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-peek .agent-assistant-fab__arm--left { - z-index: 6; - animation: agent-fab-action-peek-arm-left 2.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-peek .agent-assistant-fab__arm--right { - animation: agent-fab-action-peek-arm-right 2.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-scan .agent-assistant-fab__head { - animation: agent-fab-action-scan-head 3.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-scan .agent-assistant-fab__face { - animation: agent-fab-action-scan-face 3.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-scan .agent-assistant-fab__eye { - animation: agent-fab-action-scan-eye 3.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-scan .agent-assistant-fab__core { - animation: agent-fab-action-scan-core 3.2s ease-in-out both; -} - -.agent-assistant-fab.is-action-charge .agent-assistant-fab__bot { - animation: agent-fab-action-charge-bot 4.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-charge .agent-assistant-fab__antenna { - animation: agent-fab-action-charge-antenna 4.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-charge .agent-assistant-fab__face { - animation: agent-fab-action-charge-face 4.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-charge .agent-assistant-fab__core { - animation: agent-fab-action-charge-core 4.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-charge .agent-assistant-fab__arm--left, -.agent-assistant-fab.is-action-charge .agent-assistant-fab__arm--right { - animation: agent-fab-action-charge-arm 4.8s ease-in-out both; -} - -.agent-assistant-fab.is-action-spin-cheer .agent-assistant-fab__bot { - animation: agent-fab-action-spin-cheer-bot 3.6s ease-in-out both; -} - -.agent-assistant-fab.is-action-spin-cheer .agent-assistant-fab__antenna { - animation: agent-fab-action-spin-cheer-antenna 3.6s ease-in-out both; -} - -.agent-assistant-fab.is-action-spin-cheer .agent-assistant-fab__head { - animation: agent-fab-action-spin-cheer-head 3.6s ease-in-out both; -} - -.agent-assistant-fab.is-action-spin-cheer .agent-assistant-fab__eye { - animation: agent-fab-action-spin-cheer-eye 3.6s ease-in-out both; -} - -.agent-assistant-fab.is-action-spin-cheer .agent-assistant-fab__smile { - animation: agent-fab-action-spin-cheer-smile 3.6s ease-in-out both; -} - -.agent-assistant-fab.is-action-spin-cheer .agent-assistant-fab__arm--left { - z-index: 6; - animation: agent-fab-action-spin-cheer-arm-left 3.6s ease-in-out both; -} - -.agent-assistant-fab.is-action-spin-cheer .agent-assistant-fab__arm--right { - z-index: 6; - animation: agent-fab-action-spin-cheer-arm-right 3.6s ease-in-out both; -} - -.agent-assistant-fab.is-action-shy .agent-assistant-fab__bot { - animation: agent-fab-action-shy-bot 3s ease-in-out both; -} - -.agent-assistant-fab.is-action-shy .agent-assistant-fab__head { - animation: agent-fab-action-shy-head 3s ease-in-out both; -} - -.agent-assistant-fab.is-action-shy .agent-assistant-fab__eye { - animation: agent-fab-action-shy-eye 3s ease-in-out both; -} - -.agent-assistant-fab.is-action-shy .agent-assistant-fab__arm--left { - z-index: 6; - animation: agent-fab-action-shy-arm-left 3s ease-in-out both; -} - -.agent-assistant-fab.is-action-shy .agent-assistant-fab__arm--right { - z-index: 6; - animation: agent-fab-action-shy-arm-right 3s ease-in-out both; -} - -.agent-assistant-fab.is-action-confused .agent-assistant-fab__antenna { - animation: agent-fab-action-confused-antenna 3.4s ease-in-out both; -} - -.agent-assistant-fab.is-action-confused .agent-assistant-fab__head { - animation: agent-fab-action-confused-head 3.4s ease-in-out both; -} - -.agent-assistant-fab.is-action-confused .agent-assistant-fab__eye { - animation: - agent-fab-blink 4.8s ease-in-out infinite, - agent-fab-action-confused-eye 0.85s ease-in-out 4; -} - -.agent-assistant-fab.is-action-confused .agent-assistant-fab__arm--left { - animation: agent-fab-action-confused-arm-left 3.4s ease-in-out both; -} - -.agent-assistant-fab.is-action-confused .agent-assistant-fab__arm--right { - animation: agent-fab-action-confused-arm-right 3.4s ease-in-out both; -} - -@keyframes agent-fab-head-idle { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); - } - - 50% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.06rem)) rotate(-1.8deg); - } -} - -@keyframes agent-fab-body-idle { - 0%, - 100% { - transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)) scaleY(1); - } - - 50% { - transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) + 0.04rem)) scaleY(0.97); - } -} - -@keyframes agent-fab-antenna-idle { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); - } - - 50% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(15deg); - } -} - -@keyframes agent-fab-arm-left-idle { - 0%, - 100% { - transform: rotate(17deg); - } - - 50% { - transform: rotate(12deg) translateY(0.05rem); - } -} - -@keyframes agent-fab-arm-right-idle { - 0%, - 100% { - transform: rotate(-17deg); - } - - 50% { - transform: rotate(-11deg) translateY(0.05rem); - } -} - -@keyframes agent-fab-leg-left-idle { - 0%, - 100% { - transform: rotate(0deg); - } - - 50% { - transform: rotate(4deg) translateY(0.03rem); - } -} - -@keyframes agent-fab-leg-right-idle { - 0%, - 100% { - transform: rotate(0deg); - } - - 50% { - transform: rotate(-4deg) translateY(0.03rem); - } -} - -@keyframes agent-fab-action-wave-bot { - 0%, - 100% { - transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); - } - - 22%, - 66% { - transform: scale(var(--agent-assistant-bot-scale)) rotate(calc(var(--agent-assistant-robot-tilt) - 4deg)); - } -} - -@keyframes agent-fab-action-wave-head { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); - } - - 30%, - 66% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.1rem)) rotate(-4deg); - } -} - -@keyframes agent-fab-action-wave-arm-left { - 0%, - 100% { - transform: rotate(17deg); - } - - 16% { - transform: translate(-0.08rem, -0.06rem) rotate(64deg); - } - - 30% { - transform: translate(-0.26rem, -0.28rem) rotate(132deg); - } - - 44% { - transform: translate(-0.18rem, -0.2rem) rotate(92deg); - } - - 58% { - transform: translate(-0.26rem, -0.28rem) rotate(132deg); - } - - 72% { - transform: translate(-0.1rem, -0.08rem) rotate(64deg); - } - - 88% { - transform: translate(-0.02rem, -0.02rem) rotate(28deg); - } -} - -@keyframes agent-fab-action-wave-arm-right { - 0%, - 100% { - transform: rotate(-17deg); - } - - 30%, - 70% { - transform: rotate(-28deg) translateY(0.06rem); - } -} - -@keyframes agent-fab-action-sit-bot { - 0%, - 100% { - transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); - } - - 22%, - 84% { - transform: translateY(0.36rem) scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); - } -} - -@keyframes agent-fab-action-sit-head { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); - } - - 22%, - 84% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) + 0.1rem)) rotate(2deg); - } -} - -@keyframes agent-fab-action-sit-body { - 0%, - 100% { - transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)) scaleY(1); - } - - 22%, - 84% { - transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) + 0.22rem)) scaleY(0.82); - } -} - -@keyframes agent-fab-action-sit-arm-left { - 0%, - 100% { - transform: rotate(17deg); - } - - 22%, - 84% { - transform: translate(0.08rem, 0.22rem) rotate(76deg); - } -} - -@keyframes agent-fab-action-sit-arm-right { - 0%, - 100% { - transform: rotate(-17deg); - } - - 22%, - 84% { - transform: translate(-0.08rem, 0.22rem) rotate(-76deg); - } -} - -@keyframes agent-fab-action-sit-leg-left { - 0%, - 100% { - transform: rotate(0deg); - } - - 22%, - 84% { - transform: translate(0.18rem, -0.18rem) rotate(94deg); - } -} - -@keyframes agent-fab-action-sit-leg-right { - 0%, - 100% { - transform: rotate(0deg); - } - - 22%, - 84% { - transform: translate(-0.18rem, -0.18rem) rotate(-94deg); - } -} - -@keyframes agent-fab-action-eye-roll-head { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); - } - - 24% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.06rem)) rotate(-6deg); - } - - 52% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(5deg); - } - - 78% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.03rem)) rotate(-3deg); - } -} - -@keyframes agent-fab-action-eye-roll { - 0%, - 100% { - transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)); - } - - 22% { - transform: translate(0.22rem, -0.2rem); - } - - 48% { - transform: translate(0, -0.3rem); - } - - 72% { - transform: translate(-0.22rem, -0.2rem); - } -} - -@keyframes agent-fab-action-faint-bot { - 0%, - 100% { - transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); - } - - 26% { - transform: translateY(-0.1rem) scale(var(--agent-assistant-bot-scale)) rotate(12deg); - } - - 34%, - 86% { - transform: translate(0.58rem, 1.08rem) scale(var(--agent-assistant-bot-scale)) rotate(98deg); - } -} - -@keyframes agent-fab-action-faint-antenna { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); - } - - 34%, - 86% { - transform: translate(0.08rem, 0.02rem) rotate(-18deg); - } -} - -@keyframes agent-fab-action-faint-head { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); - } - - 28% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.04rem)) rotate(9deg); - } - - 34%, - 86% { - transform: translate(0.04rem, 0.02rem) rotate(-3deg); - } -} - -@keyframes agent-fab-action-faint-body { - 0%, - 100% { - transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)); - } - - 34%, - 86% { - transform: translate(0.04rem, 0.02rem) scaleY(0.9); - } -} - -@keyframes agent-fab-action-faint-arm-left { - 0%, - 100% { - transform: rotate(17deg); - } - - 34%, - 86% { - transform: translate(-0.12rem, 0.16rem) rotate(118deg); - } -} - -@keyframes agent-fab-action-faint-arm-right { - 0%, - 100% { - transform: rotate(-17deg); - } - - 34%, - 86% { - transform: translate(0.12rem, 0.16rem) rotate(-118deg); - } -} - -@keyframes agent-fab-action-faint-leg-left { - 0%, - 100% { - transform: rotate(0deg); - } - - 34%, - 86% { - transform: translate(-0.24rem, -0.02rem) rotate(82deg); - } -} - -@keyframes agent-fab-action-faint-leg-right { - 0%, - 100% { - transform: rotate(0deg); - } - - 34%, - 86% { - transform: translate(0.24rem, -0.02rem) rotate(-82deg); - } -} - -@keyframes agent-fab-action-disassemble-bot { - /* 34%-70% 让散落状态停留片刻,再用 84% 的轻微过冲表现回装吸附感。 */ - 0%, - 100% { - transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); - } - - 12% { - transform: translateY(-0.08rem) scale(var(--agent-assistant-bot-scale)) rotate(-5deg); - } - - 24%, - 72% { - transform: translateY(0.18rem) scale(var(--agent-assistant-bot-scale)) rotate(0deg); - } - - 86% { - transform: translateY(-0.04rem) scale(var(--agent-assistant-bot-scale)) rotate(3deg); - } -} - -@keyframes agent-fab-action-disassemble-antenna { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); - } - - 16% { - transform: translate(0.02rem, -0.14rem) rotate(44deg); - } - - 32%, - 70% { - transform: translate(0.96rem, 3.42rem) rotate(268deg); - } - - 84% { - transform: translate(-0.05rem, -0.08rem) rotate(8deg); - } -} - -@keyframes agent-fab-action-disassemble-head { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); - } - - 16% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.24rem)) rotate(-8deg); - } - - 32%, - 70% { - transform: translate(-1.18rem, 2.72rem) rotate(-46deg); - } - - 84% { - transform: translate(0.08rem, -0.1rem) rotate(6deg); - } -} - -@keyframes agent-fab-action-disassemble-body { - 0%, - 100% { - transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)); - } - - 18% { - transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) + 0.08rem)) rotate(4deg); - } - - 34%, - 70% { - transform: translate(0.26rem, 1.56rem) rotate(18deg); - } - - 84% { - transform: translate(-0.05rem, -0.08rem) rotate(-5deg); - } -} - -@keyframes agent-fab-action-disassemble-arm-left { - 0%, - 100% { - transform: rotate(17deg); - } - - 18% { - transform: translate(-0.16rem, -0.08rem) rotate(78deg); - } - - 34%, - 70% { - transform: translate(-1.72rem, 1.84rem) rotate(248deg); - } - - 84% { - transform: translate(0.08rem, -0.04rem) rotate(-4deg); - } -} - -@keyframes agent-fab-action-disassemble-arm-right { - 0%, - 100% { - transform: rotate(-17deg); - } - - 18% { - transform: translate(0.16rem, -0.08rem) rotate(-78deg); - } - - 34%, - 70% { - transform: translate(1.58rem, 1.72rem) rotate(-238deg); - } - - 84% { - transform: translate(-0.08rem, -0.04rem) rotate(4deg); - } -} - -@keyframes agent-fab-action-disassemble-leg-left { - 0%, - 100% { - transform: rotate(0deg); - } - - 20% { - transform: translate(-0.12rem, 0.18rem) rotate(34deg); - } - - 34%, - 70% { - transform: translate(-0.98rem, 0.96rem) rotate(112deg); - } - - 84% { - transform: translate(0.07rem, -0.08rem) rotate(-8deg); - } -} - -@keyframes agent-fab-action-disassemble-leg-right { - 0%, - 100% { - transform: rotate(0deg); - } - - 20% { - transform: translate(0.12rem, 0.18rem) rotate(-34deg); - } - - 34%, - 70% { - transform: translate(0.92rem, 1.04rem) rotate(-118deg); - } - - 84% { - transform: translate(-0.07rem, -0.08rem) rotate(8deg); - } -} - -@keyframes agent-fab-action-happy-jump-bot { - /* 三段蓄力、起跳、落地,让开心连跳比单纯上下移动更像真人动作。 */ - 0%, - 100% { - transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); - } - - 9%, - 37%, - 65% { - transform: translateY(0.22rem) scale(var(--agent-assistant-bot-scale)) - rotate(calc(var(--agent-assistant-robot-tilt) - 3deg)); - } - - 20%, - 48%, - 76% { - transform: translateY(-0.76rem) scale(var(--agent-assistant-bot-scale)) - rotate(calc(var(--agent-assistant-robot-tilt) + 4deg)); - } - - 29%, - 57%, - 85% { - transform: translateY(0.1rem) scale(var(--agent-assistant-bot-scale)) - rotate(calc(var(--agent-assistant-robot-tilt) - 2deg)); - } - - 92% { - transform: translateY(-0.1rem) scale(var(--agent-assistant-bot-scale)) - rotate(calc(var(--agent-assistant-robot-tilt) + 1deg)); - } -} - -@keyframes agent-fab-action-happy-jump-antenna { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); - } - - 9%, - 37%, - 65% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) + 0.1rem)) rotate(34deg); - } - - 20%, - 48%, - 76% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.2rem)) rotate(-18deg); - } - - 29%, - 57%, - 85% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) + 0.04rem)) rotate(38deg); - } -} - -@keyframes agent-fab-action-happy-jump-head { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); - } - - 9%, - 37%, - 65% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) + 0.1rem)) rotate(-4deg); - } - - 20%, - 48%, - 76% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.16rem)) rotate(7deg); - } - - 29%, - 57%, - 85% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) + 0.04rem)) rotate(-5deg); - } - - 92% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.04rem)) rotate(2deg); - } -} - -@keyframes agent-fab-action-happy-jump-eye { - 0%, - 100% { - border-block-end-width: 0.15rem; - opacity: 1; - transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)) scale(1, 1); - } - - 8%, - 36%, - 64%, - 92% { - border-block-end-width: 0.18rem; - transform: translate(0, -0.06rem) scale(1.08, 0.72); - } - - 20%, - 48%, - 76% { - border-block-end-width: 0.19rem; - transform: translate(0, -0.12rem) scale(1.16, 0.58); - } -} - -@keyframes agent-fab-action-happy-jump-smile { - 0%, - 100% { - opacity: 0; - transform: translateX(-50%) scale(0.72); - } - - 6%, - 90% { - opacity: 1; - } - - 9%, - 37%, - 65% { - transform: translateX(-50%) translateY(0.02rem) scale(0.92, 0.82); - } - - 20%, - 48%, - 76% { - transform: translateX(-50%) translateY(-0.04rem) scale(1.22, 1.08); - } -} - -@keyframes agent-fab-action-happy-jump-body { - 0%, - 100% { - transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)) scaleY(1); - } - - 9%, - 37%, - 65% { - transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) + 0.18rem)) scaleY(0.84) - rotate(-2deg); - } - - 20%, - 48%, - 76% { - transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) - 0.1rem)) scaleY(1.08) - rotate(4deg); - } - - 29%, - 57%, - 85% { - transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) + 0.08rem)) scaleY(0.94) - rotate(-3deg); - } -} - -@keyframes agent-fab-action-happy-jump-arm-left { - 0%, - 100% { - transform: rotate(17deg); - } - - 9%, - 37%, - 65% { - transform: translate(-0.08rem, 0.06rem) rotate(54deg); - } - - 20%, - 48%, - 76% { - transform: translate(-0.24rem, -0.38rem) rotate(152deg); - } - - 29%, - 57%, - 85% { - transform: translate(-0.1rem, -0.02rem) rotate(96deg); - } -} - -@keyframes agent-fab-action-happy-jump-arm-right { - 0%, - 100% { - transform: rotate(-17deg); - } - - 9%, - 37%, - 65% { - transform: translate(0.08rem, 0.06rem) rotate(-54deg); - } - - 20%, - 48%, - 76% { - transform: translate(0.24rem, -0.38rem) rotate(-152deg); - } - - 29%, - 57%, - 85% { - transform: translate(0.1rem, -0.02rem) rotate(-96deg); - } -} - -@keyframes agent-fab-action-happy-jump-leg-left { - 0%, - 100% { - transform: rotate(0deg); - } - - 9%, - 37%, - 65% { - transform: translate(0.08rem, -0.22rem) rotate(82deg); - } - - 20%, - 48%, - 76% { - transform: translate(-0.18rem, 0.08rem) rotate(-32deg); - } - - 29%, - 57%, - 85% { - transform: translate(0.12rem, -0.08rem) rotate(44deg); - } -} - -@keyframes agent-fab-action-happy-jump-leg-right { - 0%, - 100% { - transform: rotate(0deg); - } - - 9%, - 37%, - 65% { - transform: translate(-0.08rem, -0.22rem) rotate(-82deg); - } - - 20%, - 48%, - 76% { - transform: translate(0.18rem, 0.08rem) rotate(32deg); - } - - 29%, - 57%, - 85% { - transform: translate(-0.12rem, -0.08rem) rotate(-44deg); - } -} - -@keyframes agent-fab-action-sleep-bot { - 0%, - 100% { - transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); - } - - 22%, - 82% { - transform: translateY(0.42rem) scale(var(--agent-assistant-bot-scale)) - rotate(calc(var(--agent-assistant-robot-tilt) - 8deg)); - } - - 46%, - 64% { - transform: translateY(0.36rem) scale(var(--agent-assistant-bot-scale)) - rotate(calc(var(--agent-assistant-robot-tilt) - 10deg)); - } -} - -@keyframes agent-fab-action-sleep-antenna { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); - } - - 22%, - 82% { - opacity: 0.62; - transform: translate(0.1rem, 0.16rem) rotate(78deg) scale(0.78); - } -} - -@keyframes agent-fab-action-sleep-head { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); - } - - 22%, - 82% { - transform: translate(calc(var(--agent-assistant-head-x) - 0.12rem), calc(var(--agent-assistant-head-y) + 0.22rem)) - rotate(-12deg); - } -} - -@keyframes agent-fab-action-sleep-eye { - 0%, - 100% { - border-block-end-width: 0.15rem; - opacity: 1; - transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)) scale(1); - } - - 18%, - 86% { - border-block-end-width: 0.1rem; - opacity: 0.62; - transform: translate(0, 0.1rem) scale(1.18, 0.24); - } -} - -@keyframes agent-fab-action-sleep-body { - 0%, - 100% { - transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)) scaleY(1); - } - - 22%, - 82% { - transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) + 0.26rem)) scaleY(0.78); - } -} - -@keyframes agent-fab-action-sleep-arm-left { - 0%, - 100% { - transform: rotate(17deg); - } - - 22%, - 82% { - transform: translate(0.12rem, 0.2rem) rotate(92deg); - } -} - -@keyframes agent-fab-action-sleep-arm-right { - 0%, - 100% { - transform: rotate(-17deg); - } - - 22%, - 82% { - transform: translate(-0.12rem, 0.2rem) rotate(-92deg); - } -} - -@keyframes agent-fab-action-sleep-leg { - 0%, - 100% { - transform: rotate(0deg); - } - - 22%, - 82% { - opacity: 0.35; - transform: translateY(-0.16rem) scale(0.76); - } -} - -@keyframes agent-fab-action-stretch-bot { - 0%, - 100% { - transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); - } - - 18% { - transform: translateY(0.18rem) scale(var(--agent-assistant-bot-scale)) scaleY(0.92) - rotate(var(--agent-assistant-robot-tilt)); - } - - 44%, - 70% { - transform: translateY(-0.34rem) scale(var(--agent-assistant-bot-scale)) scaleY(1.06) - rotate(calc(var(--agent-assistant-robot-tilt) + 2deg)); - } - - 86% { - transform: translateY(0.08rem) scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); - } -} - -@keyframes agent-fab-action-stretch-antenna { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); - } - - 44%, - 70% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.2rem)) rotate(-24deg); - } -} - -@keyframes agent-fab-action-stretch-head { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); - } - - 44%, - 70% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.28rem)) rotate(5deg); - } -} - -@keyframes agent-fab-action-stretch-body { - 0%, - 100% { - transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)) scaleY(1); - } - - 18% { - transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) + 0.12rem)) scaleY(0.88); - } - - 44%, - 70% { - transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) - 0.08rem)) scaleY(1.12); - } -} - -@keyframes agent-fab-action-stretch-arm-left { - 0%, - 100% { - transform: rotate(17deg); - } - - 44%, - 70% { - transform: translate(-0.24rem, -0.7rem) rotate(168deg); - } -} - -@keyframes agent-fab-action-stretch-arm-right { - 0%, - 100% { - transform: rotate(-17deg); - } - - 44%, - 70% { - transform: translate(0.24rem, -0.7rem) rotate(-168deg); - } -} - -@keyframes agent-fab-action-stretch-leg-left { - 0%, - 100% { - transform: rotate(0deg); - } - - 44%, - 70% { - transform: translate(-0.18rem, 0.02rem) rotate(-18deg); - } -} - -@keyframes agent-fab-action-stretch-leg-right { - 0%, - 100% { - transform: rotate(0deg); - } - - 44%, - 70% { - transform: translate(0.18rem, 0.02rem) rotate(18deg); - } -} - -@keyframes agent-fab-action-peek-bot { - 0%, - 100% { - transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); - } - - 26%, - 78% { - transform: translateX(-0.48rem) scale(var(--agent-assistant-bot-scale)) - rotate(calc(var(--agent-assistant-robot-tilt) - 8deg)); - } - - 48% { - transform: translateX(-0.58rem) scale(var(--agent-assistant-bot-scale)) - rotate(calc(var(--agent-assistant-robot-tilt) - 11deg)); - } -} - -@keyframes agent-fab-action-peek-antenna { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); - } - - 26%, - 78% { - transform: translate(-0.12rem, -0.06rem) rotate(-12deg); - } -} - -@keyframes agent-fab-action-peek-head { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); - } - - 26%, - 78% { - transform: translate(calc(var(--agent-assistant-head-x) - 0.18rem), calc(var(--agent-assistant-head-y) - 0.04rem)) - rotate(-10deg); - } -} - -@keyframes agent-fab-action-peek-eye { - 0%, - 100% { - transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)); - } - - 26%, - 78% { - transform: translate(-0.18rem, -0.02rem) scale(1.12, 1); - } -} - -@keyframes agent-fab-action-peek-arm-left { - 0%, - 100% { - transform: rotate(17deg); - } - - 26%, - 78% { - transform: translate(-0.24rem, -0.12rem) rotate(116deg); - } -} - -@keyframes agent-fab-action-peek-arm-right { - 0%, - 100% { - transform: rotate(-17deg); - } - - 26%, - 78% { - transform: translate(0.04rem, 0.06rem) rotate(-34deg); - } -} - -@keyframes agent-fab-action-scan-head { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); - } - - 24% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(-8deg); - } - - 52% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(8deg); - } - - 78% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.04rem)) rotate(-4deg); - } -} - -@keyframes agent-fab-action-scan-face { - 0%, - 100% { - box-shadow: inset 0 0.1rem 0 rgba(255, 255, 255, 8%); - } - - 18%, - 78% { - box-shadow: - inset 0 0.1rem 0 rgba(255, 255, 255, 8%), - 0 0 0.72rem rgba(114, 255, 240, 48%); - } -} - -@keyframes agent-fab-action-scan-eye { - 0%, - 100% { - transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)); - } - - 18% { - transform: translate(-0.28rem, -0.02rem) scale(1.1, 0.9); - } - - 46% { - transform: translate(0.28rem, -0.02rem) scale(1.1, 0.9); - } - - 74% { - transform: translate(0, -0.18rem) scale(1.18, 0.72); - } -} - -@keyframes agent-fab-action-scan-core { - 0%, - 100% { - opacity: 0.78; - transform: scale(1); - } - - 25%, - 75% { - opacity: 1; - transform: scale(1.24); - } -} - -@keyframes agent-fab-action-charge-bot { - 0%, - 100% { - transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); - } - - 18%, - 42%, - 66% { - transform: translateY(0.1rem) scale(var(--agent-assistant-bot-scale)) - rotate(calc(var(--agent-assistant-robot-tilt) - 2deg)); - } - - 30%, - 54%, - 78% { - transform: translateY(-0.12rem) scale(var(--agent-assistant-bot-scale)) - rotate(calc(var(--agent-assistant-robot-tilt) + 2deg)); - } -} - -@keyframes agent-fab-action-charge-antenna { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); - } - - 30%, - 54%, - 78% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.16rem)) rotate(-20deg) - scale(1.12); - } -} - -@keyframes agent-fab-action-charge-face { - 0%, - 100% { - box-shadow: inset 0 0.1rem 0 rgba(255, 255, 255, 8%); - } - - 20%, - 84% { - box-shadow: - inset 0 0.1rem 0 rgba(255, 255, 255, 8%), - 0 0 0.9rem rgba(166, 118, 255, 56%); - } -} - -@keyframes agent-fab-action-charge-core { - 0%, - 100% { - opacity: 0.78; - transform: scale(1); - } - - 20%, - 40%, - 60%, - 80% { - opacity: 1; - transform: scale(1.32); - } -} - -@keyframes agent-fab-action-charge-arm { - 0%, - 100% { - transform: rotate(0deg); - } - - 22%, - 82% { - transform: translateY(0.12rem) scaleY(0.9); - } -} - -@keyframes agent-fab-action-spin-cheer-bot { - 0%, - 100% { - transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); - } - - 18% { - transform: translateY(0.18rem) scale(var(--agent-assistant-bot-scale)) - rotate(calc(var(--agent-assistant-robot-tilt) - 7deg)); - } - - 48% { - transform: translateY(-0.58rem) scale(var(--agent-assistant-bot-scale)) - rotate(calc(var(--agent-assistant-robot-tilt) + 184deg)); - } - - 78% { - transform: translateY(-0.14rem) scale(var(--agent-assistant-bot-scale)) - rotate(calc(var(--agent-assistant-robot-tilt) + 356deg)); - } -} - -@keyframes agent-fab-action-spin-cheer-antenna { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); - } - - 22%, - 78% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.18rem)) rotate(-28deg); - } -} - -@keyframes agent-fab-action-spin-cheer-head { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); - } - - 22%, - 78% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.12rem)) rotate(8deg); - } -} - -@keyframes agent-fab-action-spin-cheer-eye { - 0%, - 100% { - border-block-end-width: 0.15rem; - transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)) scale(1); - } - - 20%, - 80% { - border-block-end-width: 0.19rem; - transform: translate(0, -0.12rem) scale(1.18, 0.58); - } -} - -@keyframes agent-fab-action-spin-cheer-smile { - 0%, - 100% { - opacity: 0; - transform: translateX(-50%) scale(0.72); - } - - 16%, - 84% { - opacity: 1; - transform: translateX(-50%) translateY(-0.03rem) scale(1.24, 1.08); - } -} - -@keyframes agent-fab-action-spin-cheer-arm-left { - 0%, - 100% { - transform: rotate(17deg); - } - - 20%, - 80% { - transform: translate(-0.28rem, -0.44rem) rotate(148deg); - } -} - -@keyframes agent-fab-action-spin-cheer-arm-right { - 0%, - 100% { - transform: rotate(-17deg); - } - - 20%, - 80% { - transform: translate(0.28rem, -0.44rem) rotate(-148deg); - } -} - -@keyframes agent-fab-action-shy-bot { - 0%, - 100% { - transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); - } - - 24%, - 78% { - transform: translateX(0.16rem) scale(var(--agent-assistant-bot-scale)) - rotate(calc(var(--agent-assistant-robot-tilt) + 7deg)); - } -} - -@keyframes agent-fab-action-shy-head { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); - } - - 24%, - 78% { - transform: translate(calc(var(--agent-assistant-head-x) + 0.08rem), calc(var(--agent-assistant-head-y) + 0.14rem)) - rotate(10deg); - } -} - -@keyframes agent-fab-action-shy-eye { - 0%, - 100% { - opacity: 1; - transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)) scale(1); - } - - 24%, - 78% { - opacity: 0.78; - transform: translate(0, 0.08rem) scale(0.86, 0.48); - } -} - -@keyframes agent-fab-action-shy-arm-left { - 0%, - 100% { - transform: rotate(17deg); - } - - 24%, - 78% { - transform: translate(0.02rem, -0.16rem) rotate(118deg); - } -} - -@keyframes agent-fab-action-shy-arm-right { - 0%, - 100% { - transform: rotate(-17deg); - } - - 24%, - 78% { - transform: translate(-0.02rem, -0.16rem) rotate(-118deg); - } -} - -@keyframes agent-fab-action-confused-antenna { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); - } - - 20% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(58deg); - } - - 48% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(-28deg); - } - - 74% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.06rem)) rotate(42deg); - } -} - -@keyframes agent-fab-action-confused-head { - 0%, - 100% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); - } - - 20% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.06rem)) rotate(-10deg); - } - - 48% { - transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(10deg); - } - - 74% { - transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.03rem)) rotate(-6deg); - } -} - -@keyframes agent-fab-action-confused-eye { - 0%, - 100% { - transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)); - } - - 30% { - transform: translate(0.22rem, -0.16rem); - } - - 60% { - transform: translate(-0.22rem, 0.08rem); - } -} - -@keyframes agent-fab-action-confused-arm-left { - 0%, - 100% { - transform: rotate(17deg); - } - - 24%, - 74% { - transform: translate(-0.12rem, -0.12rem) rotate(88deg); - } -} - -@keyframes agent-fab-action-confused-arm-right { - 0%, - 100% { - transform: rotate(-17deg); - } - - 24%, - 74% { - transform: translate(0.16rem, -0.08rem) rotate(-42deg); - } -} - -@keyframes agent-fab-core-pulse { - 0%, - 100% { - opacity: 0.78; - transform: scale(1); - } - - 50% { - opacity: 1; - transform: scale(1.18); - } -} - -@keyframes agent-fab-blink { - 0%, - 4%, - 8%, - 100% { - opacity: 1; - scale: 1 1; - } - - 6% { - opacity: 0.45; - scale: 1 0.15; - } -} - -@media (width <= 600px) { - .agent-assistant-fab { - block-size: 6.65rem; - inline-size: min(12.4rem, calc(100vw - 1rem)); - } - - .agent-assistant-fab.is-docked { - inline-size: 3.45rem; - } - - .agent-assistant-fab__bubbles { - inline-size: min(16.5rem, calc(100vw - 5.6rem)); - max-block-size: min(30rem, calc(100vh - 9.2rem)); - } - - .agent-assistant-fab__bubble-stack { - gap: 0.38rem; - } - - .agent-assistant-fab__bubble { - padding-block: 0.56rem; - padding-inline: 0.72rem 1.62rem; - } - - .agent-assistant-fab__bubble-title { - font-size: 1.05rem; - } - - .agent-assistant-fab__bubble > span { - font-size: 1rem; - } - - .agent-assistant-fab__trigger { - block-size: 4.8rem; - inline-size: 5rem; - } - - .agent-assistant-fab__bot { - inset-inline-end: 1.02rem; - transform-origin: 70% 78%; - } - - .agent-assistant-fab { - --agent-assistant-bot-scale: 0.82; - --agent-assistant-bot-pressed-scale: 0.78; - } - - .agent-assistant-fab.is-docked .agent-assistant-fab__bot { - inset-inline-end: -0.72rem; - transform: translateY(-0.16rem) scale(var(--agent-assistant-bot-scale)) rotate(-19deg); - } -} - -@media (prefers-reduced-motion: reduce) { - .agent-assistant-fab, - .agent-assistant-fab * { - animation-duration: 0.01ms !important; - animation-iteration-count: 1 !important; - scroll-behavior: auto !important; - transition-duration: 0.01ms !important; - } -} +@use './cssRobotBase'; +@use './actions/cssRobotActions'; diff --git a/src/components/agent/pet/renderers/cssRobotBase.scss b/src/components/agent/pet/renderers/cssRobotBase.scss new file mode 100644 index 00000000..c1438af7 --- /dev/null +++ b/src/components/agent/pet/renderers/cssRobotBase.scss @@ -0,0 +1,484 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable no-duplicate-selectors */ + +.agent-assistant-fab__bot, +.agent-assistant-fab__bot span { + box-sizing: border-box; +} + +.agent-assistant-fab__bot { + position: absolute; + display: block; + block-size: 4.7rem; + filter: drop-shadow(0 0.55rem 0.55rem var(--agent-assistant-robot-shadow)); + inline-size: 3.85rem; + inset-block-end: 0.1rem; + inset-inline-end: 1.42rem; + transform: scale(var(--agent-assistant-bot-scale)) rotate(var(--agent-assistant-robot-tilt)); + transform-origin: 50% 72%; + transition: + inset-inline-end 0.24s ease, + filter 0.18s ease, + transform 0.14s ease; +} + +.agent-assistant-fab__antenna { + position: absolute; + z-index: 3; + display: block; + border-radius: 999px; + animation: agent-fab-antenna-idle 3.9s ease-in-out infinite; + background: var(--agent-assistant-robot-outline); + block-size: 0.66rem; + inline-size: 0.18rem; + inset-block-start: 0.72rem; + inset-inline-start: 2.62rem; + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); + transform-origin: bottom center; + transition: + opacity 0.2s ease, + transform 0.22s ease; +} + +.agent-assistant-fab__antenna::after { + position: absolute; + border: 2px solid var(--agent-assistant-robot-outline); + border-radius: 999px; + background: var(--agent-assistant-robot-shell-start); + block-size: 0.38rem; + content: ''; + inline-size: 0.38rem; + inset-block-start: -0.34rem; + inset-inline-start: -0.13rem; +} + +.agent-assistant-fab__head { + position: absolute; + z-index: 4; + display: block; + border: 2px solid var(--agent-assistant-robot-outline); + border-radius: 11px; + animation: agent-fab-head-idle 4.6s ease-in-out infinite; + background: linear-gradient( + 145deg, + var(--agent-assistant-robot-shell-start) 0%, + var(--agent-assistant-robot-shell-end) 100% + ); + block-size: 2.05rem; + box-shadow: + inset 0 -0.2rem 0 rgba(54, 0, 126, 26%), + inset 0.15rem 0.14rem 0 rgba(255, 255, 255, 24%); + inline-size: 2.82rem; + inset-block-start: 1.42rem; + inset-inline-start: 0.88rem; + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)); + transform-origin: 50% 85%; +} + +.agent-assistant-fab__face { + position: absolute; + display: block; + overflow: hidden; + border: 2px solid var(--agent-assistant-robot-outline-soft); + border-radius: 8px; + background: linear-gradient( + 180deg, + var(--agent-assistant-robot-face-start) 0%, + var(--agent-assistant-robot-face-end) 100% + ); + block-size: 1.28rem; + box-shadow: inset 0 0.1rem 0 rgba(255, 255, 255, 8%); + inline-size: 2.1rem; + inset-block-start: 0.33rem; + inset-inline-start: 0.25rem; +} + +.agent-assistant-fab__eye { + position: absolute; + display: block; + border-radius: 0 0 999px 999px; + animation: agent-fab-blink 4.8s ease-in-out infinite; + block-size: 0.42rem; + border-block-end: 0.15rem solid var(--agent-assistant-robot-eye); + inline-size: 0.42rem; + inset-block-start: 0.36rem; + transform: translate(var(--agent-assistant-eye-x), var(--agent-assistant-eye-y)); + + /* 触屏设备没有连续 hover 轨迹,给眼神位移补过渡避免点按时瞬移。 */ + transition: transform 0.2s ease-out; +} + +.agent-assistant-fab__eye--left { + inset-inline-start: 0.43rem; +} + +.agent-assistant-fab__eye--right { + inset-inline-end: 0.43rem; +} + +.agent-assistant-fab__smile { + position: absolute; + display: block; + border-radius: 0 0 999px 999px; + block-size: 0.32rem; + border-block-end: 0.13rem solid var(--agent-assistant-robot-eye); + inline-size: 0.7rem; + inset-block-start: 0.75rem; + inset-inline-start: 50%; + opacity: 0; + transform: translateX(-50%) scale(0.72); + transform-origin: center top; +} + +.agent-assistant-fab__body { + position: absolute; + z-index: 3; + display: block; + border: 2px solid var(--agent-assistant-robot-outline); + border-radius: 0.65rem 0.65rem 0.55rem 0.55rem; + animation: agent-fab-body-idle 4.2s ease-in-out infinite; + background: linear-gradient( + 145deg, + var(--agent-assistant-robot-shell-mid) 0%, + var(--agent-assistant-robot-shell-end) 82% + ); + block-size: 1.34rem; + box-shadow: + inset 0 -0.18rem 0 rgba(54, 0, 126, 24%), + inset 0.16rem 0.12rem 0 rgba(255, 255, 255, 24%); + inline-size: 1.88rem; + inset-block-start: 3.24rem; + inset-inline-start: 1.32rem; + transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)); + transform-origin: 50% 18%; + transition: + opacity 0.2s ease, + transform 0.22s ease; +} + +.agent-assistant-fab__core { + position: absolute; + display: block; + background: transparent; + block-size: 100%; + box-shadow: none; + inline-size: 100%; + inset: 0; + pointer-events: none; +} + +.agent-assistant-fab__core::before { + position: absolute; + background: var(--agent-assistant-robot-play); + block-size: 0.46rem; + clip-path: polygon(18% 8%, 18% 92%, 90% 50%); + content: ''; + inline-size: 0.48rem; + inset-block-start: 50%; + inset-inline-start: 50%; + transform: translate(-42%, -50%); +} + +.agent-assistant-fab__arm, +.agent-assistant-fab__leg { + position: absolute; + z-index: 2; + display: block; + border: 2px solid var(--agent-assistant-robot-outline); + background: linear-gradient( + 160deg, + var(--agent-assistant-robot-shell-mid) 0%, + var(--agent-assistant-robot-outline-soft) 100% + ); + box-shadow: inset 0 -0.12rem 0 rgba(54, 0, 126, 24%); + transition: + opacity 0.2s ease, + transform 0.22s ease; +} + +.agent-assistant-fab__arm { + border-radius: 999px; + block-size: 1rem; + inline-size: 0.46rem; + inset-block-start: 3.3rem; +} + +.agent-assistant-fab__arm--left { + animation: agent-fab-arm-left-idle 3.8s ease-in-out infinite; + inset-inline-start: 0.9rem; + transform: rotate(17deg); + transform-origin: top center; +} + +.agent-assistant-fab__arm--right { + animation: agent-fab-arm-right-idle 4.1s ease-in-out infinite; + inset-inline-start: 3.08rem; + transform: rotate(-17deg); + transform-origin: top center; +} + +.agent-assistant-fab__leg { + border-radius: 0.35rem; + block-size: 0.66rem; + inline-size: 0.48rem; + inset-block-start: 4.36rem; +} + +.agent-assistant-fab__leg--left { + animation: agent-fab-leg-left-idle 4.8s ease-in-out infinite; + inset-inline-start: 1.48rem; + transform-origin: top center; +} + +.agent-assistant-fab__leg--right { + animation: agent-fab-leg-right-idle 4.8s ease-in-out 0.35s infinite; + inset-inline-start: 2.46rem; + transform-origin: top center; +} + +@media (hover: hover) and (pointer: fine) { + .agent-assistant-fab.is-bubble-visible .agent-assistant-fab__bubble:hover { + box-shadow: var(--app-surface-hover-shadow); + } + + .agent-assistant-fab__bubble:hover .agent-assistant-fab__bubble-close { + opacity: 1; + } + + .agent-assistant-fab__trigger:hover .agent-assistant-fab__bot { + filter: drop-shadow(0 0.7rem 0.7rem var(--agent-assistant-robot-shadow-strong)); + } +} + +@media (hover: none), (pointer: coarse) { + .agent-assistant-fab__bubble-close { + opacity: 1; + } +} + +.agent-assistant-fab__trigger:focus-visible .agent-assistant-fab__bot { + filter: + drop-shadow(0 0.55rem 0.55rem var(--agent-assistant-robot-shadow)) + drop-shadow(0 0 0.34rem rgba(var(--v-theme-primary), 0.55)); +} + +.agent-assistant-fab.is-pressed .agent-assistant-fab__bot { + transform: translateY(0.22rem) scale(var(--agent-assistant-bot-pressed-scale)) + rotate(var(--agent-assistant-robot-tilt)); +} + +.agent-assistant-fab.is-thinking .agent-assistant-fab__face { + box-shadow: + inset 0 0.1rem 0 rgba(255, 255, 255, 8%), + 0 0 0.65rem rgba(114, 255, 240, 50%); +} + +.agent-assistant-fab.is-thinking .agent-assistant-fab__core { + animation: agent-fab-core-pulse 0.9s ease-in-out infinite; +} + +.agent-assistant-fab.is-docked .agent-assistant-fab__bot { + inset-inline-end: -0.42rem; + transform: translateY(-0.2rem) scale(var(--agent-assistant-bot-scale)) rotate(-19deg); +} + +.agent-assistant-fab.is-docked .agent-assistant-fab__eye { + transform: translate(calc(var(--agent-assistant-eye-x) * 0.24 - 0.22rem), calc(var(--agent-assistant-eye-y) * 0.24)); +} + +.agent-assistant-fab.is-docked .agent-assistant-fab__body, +.agent-assistant-fab.is-docked .agent-assistant-fab__leg { + opacity: 0; + transform: translateX(0.8rem) scale(0.72); +} + +.agent-assistant-fab.is-docked .agent-assistant-fab__arm--left, +.agent-assistant-fab.is-docked .agent-assistant-fab__arm--right { + animation: none; + opacity: 0; + transform: translateX(0.8rem) scale(0.72); +} + +.agent-assistant-fab.is-docked .agent-assistant-fab__arm--left { + z-index: 5; + block-size: 0.95rem; + inline-size: 0.42rem; + inset-block-start: 3.62rem; + inset-inline-start: 1.86rem; + opacity: 1; + transform: rotate(78deg) scale(0.9); +} + +.agent-assistant-fab.is-docked .agent-assistant-fab__antenna { + animation: none; + opacity: 0.75; + transform: translate(0.34rem, 0.02rem) rotate(2deg) scale(0.82); +} + +@keyframes agent-fab-head-idle { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(0deg); + } + + 50% { + transform: translate(var(--agent-assistant-head-x), calc(var(--agent-assistant-head-y) - 0.06rem)) rotate(-1.8deg); + } +} + +@keyframes agent-fab-body-idle { + 0%, + 100% { + transform: translate(var(--agent-assistant-body-x), var(--agent-assistant-body-y)) scaleY(1); + } + + 50% { + transform: translate(var(--agent-assistant-body-x), calc(var(--agent-assistant-body-y) + 0.04rem)) scaleY(0.97); + } +} + +@keyframes agent-fab-antenna-idle { + 0%, + 100% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(22deg); + } + + 50% { + transform: translate(var(--agent-assistant-head-x), var(--agent-assistant-head-y)) rotate(15deg); + } +} + +@keyframes agent-fab-arm-left-idle { + 0%, + 100% { + transform: rotate(17deg); + } + + 50% { + transform: rotate(12deg) translateY(0.05rem); + } +} + +@keyframes agent-fab-arm-right-idle { + 0%, + 100% { + transform: rotate(-17deg); + } + + 50% { + transform: rotate(-11deg) translateY(0.05rem); + } +} + +@keyframes agent-fab-leg-left-idle { + 0%, + 100% { + transform: rotate(0deg); + } + + 50% { + transform: rotate(4deg) translateY(0.03rem); + } +} + +@keyframes agent-fab-leg-right-idle { + 0%, + 100% { + transform: rotate(0deg); + } + + 50% { + transform: rotate(-4deg) translateY(0.03rem); + } +} + +@keyframes agent-fab-core-pulse { + 0%, + 100% { + opacity: 0.78; + transform: scale(1); + } + + 50% { + opacity: 1; + transform: scale(1.18); + } +} + +@keyframes agent-fab-blink { + 0%, + 4%, + 8%, + 100% { + opacity: 1; + scale: 1 1; + } + + 6% { + opacity: 0.45; + scale: 1 0.15; + } +} + +@media (width <= 600px) { + .agent-assistant-fab { + block-size: 6.65rem; + inline-size: min(12.4rem, calc(100vw - 1rem)); + } + + .agent-assistant-fab.is-docked { + inline-size: 3.45rem; + } + + .agent-assistant-fab__bubbles { + inline-size: min(16.5rem, calc(100vw - 5.6rem)); + max-block-size: min(30rem, calc(100vh - 9.2rem)); + } + + .agent-assistant-fab__bubble-stack { + gap: 0.38rem; + } + + .agent-assistant-fab__bubble { + padding-block: 0.56rem; + padding-inline: 0.72rem 1.62rem; + } + + .agent-assistant-fab__bubble-title { + font-size: 1.05rem; + } + + .agent-assistant-fab__bubble > span { + font-size: 1rem; + } + + .agent-assistant-fab__trigger { + block-size: 4.8rem; + inline-size: 5rem; + } + + .agent-assistant-fab__bot { + inset-inline-end: 1.02rem; + transform-origin: 70% 78%; + } + + .agent-assistant-fab { + --agent-assistant-bot-scale: 0.82; + --agent-assistant-bot-pressed-scale: 0.78; + } + + .agent-assistant-fab.is-docked .agent-assistant-fab__bot { + inset-inline-end: -0.72rem; + transform: translateY(-0.16rem) scale(var(--agent-assistant-bot-scale)) rotate(-19deg); + } +} + +@media (prefers-reduced-motion: reduce) { + .agent-assistant-fab, + .agent-assistant-fab * { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + scroll-behavior: auto !important; + transition-duration: 0.01ms !important; + } +}