From a92caa4f3f1271ac7856b06a4e588f74094887b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=BD=E5=B7=A5=E5=91=98?= <4846a27a-ba87-49c9-939d-7275f63efcc7@agents.multica.local> Date: Mon, 24 Aug 2026 11:11:17 +0800 Subject: [PATCH] =?UTF-8?q?feat(HEL-76):=20=E6=89=8B=E6=9C=BA=E7=AB=AF?= =?UTF-8?q?=E4=B8=9D=E6=BB=91=E5=BA=A6=E6=95=B4=E6=94=B9=E2=91=A1=E2=80=94?= =?UTF-8?q?=E2=80=94=E6=8D=A2=E9=A1=B5=E8=BF=87=E6=B8=A1=E4=B8=8E=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E7=99=BB=E5=BD=95=E5=8F=8D=E9=A6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: multica-agent --- app/frontend/m/css/shell.css | 63 +++++++++++++++++++++++++++++++++++- app/frontend/m/index.html | 3 ++ app/frontend/m/js/boot.js | 6 ++++ app/frontend/m/js/router.js | 54 +++++++++++++++++++++++-------- 4 files changed, 111 insertions(+), 15 deletions(-) diff --git a/app/frontend/m/css/shell.css b/app/frontend/m/css/shell.css index 7798e3f..1dab4dd 100644 --- a/app/frontend/m/css/shell.css +++ b/app/frontend/m/css/shell.css @@ -27,6 +27,23 @@ body { border-color var(--motion-pop) var(--ease-press); } +#m-boot-splash { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + background: var(--canvas); + z-index: 200; +} + +#m-boot-splash .m-brand-mark { + margin-bottom: 0; +} + .m-motion-fade-in { animation: m-fade-in var(--motion-fade) var(--ease-press) both; } @@ -45,6 +62,28 @@ body { to { opacity: 1; transform: none; } } +.m-motion-push-in { + animation: m-push-in var(--motion-enter) var(--ease-enter) both; +} + +@keyframes m-push-in { + from { opacity: 0; transform: translateX(16px); } + to { opacity: 1; transform: none; } +} + +.m-motion-pop-in { + animation: m-pop-in var(--motion-pop) var(--ease-enter) both; +} + +@keyframes m-pop-in { + from { opacity: 0; transform: translateX(-16px); } + to { opacity: 1; transform: none; } +} + +.m-motion-boot-in { + animation: m-fade-in var(--motion-press-release) var(--ease-press) both; +} + .m-header { position: sticky; top: 0; @@ -301,6 +340,10 @@ body { .m-btn-primary { width: 100%; height: 44px; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; border: 0; border-radius: 8px; background: var(--action); @@ -321,6 +364,22 @@ body { .m-btn-primary:disabled { opacity: 0.5; cursor: default; + pointer-events: none; +} + +.m-btn-spinner { + display: inline-block; + width: 14px; + height: 14px; + flex: 0 0 auto; + border: 2px solid currentColor; + border-top-color: transparent; + border-radius: 50%; + animation: m-spin 800ms linear infinite; +} + +@keyframes m-spin { + to { transform: rotate(360deg); } } .m-tabbar { @@ -476,7 +535,9 @@ body { } @media (prefers-reduced-motion: reduce) { - .m-motion-rise-in { + .m-motion-rise-in, + .m-motion-push-in, + .m-motion-pop-in { animation-name: m-fade-in; animation-duration: 100ms; } diff --git a/app/frontend/m/index.html b/app/frontend/m/index.html index 206c1a3..039bbc3 100644 --- a/app/frontend/m/index.html +++ b/app/frontend/m/index.html @@ -21,6 +21,9 @@ document.getElementById("m-app").setAttribute("data-theme", theme); })(); +