style: 오버레이·다이얼로그·토스트 애니메이션 토큰 추가
Co-Authored-By: Claude Opus 5
@c776976284d98c628201577c7a5aa56b68634a9a
--- app/globals.css
+++ app/globals.css
... | ... | @@ -152,6 +152,79 @@ |
| 152 | 152 |
--shadow-popup: 2.16px 6.32px 6px rgb(177 178 180 / 0.24); |
| 153 | 153 |
--shadow-toast: 0 10px 12px rgb(0 0 0 / 0.2); |
| 154 | 154 |
--shadow-subtle: 0 2px 4px rgb(0 0 0 / 0.08); |
| 155 |
+ |
|
| 156 |
+ /* 애니메이션 토큰(신규 네임스페이스 — §4.2 승인). 오버레이·다이얼로그·토스트· |
|
| 157 |
+ 스플래시 전환에 사용. --ease-*는 Tailwind 기본값 사용, duration은 값에 |
|
| 158 |
+ 내장(트랜지션 duration 표준은 bare 유틸 duration-200 사용). */ |
|
| 159 |
+ --animate-fade-in: fade-in 200ms var(--ease-out); |
|
| 160 |
+ --animate-fade-out: fade-out 200ms var(--ease-in); |
|
| 161 |
+ --animate-dialog-in: dialog-in 200ms var(--ease-out); |
|
| 162 |
+ --animate-toast-in: toast-in 300ms var(--ease-out); |
|
| 163 |
+} |
|
| 164 |
+ |
|
| 165 |
+@keyframes fade-in {
|
|
| 166 |
+ from {
|
|
| 167 |
+ opacity: 0; |
|
| 168 |
+ } |
|
| 169 |
+ to {
|
|
| 170 |
+ opacity: 1; |
|
| 171 |
+ } |
|
| 172 |
+} |
|
| 173 |
+ |
|
| 174 |
+/* 스플래시 등 풀스크린 오버레이 퇴장용 — fade-in의 역방향 키프레임. */ |
|
| 175 |
+@keyframes fade-out {
|
|
| 176 |
+ from {
|
|
| 177 |
+ opacity: 1; |
|
| 178 |
+ } |
|
| 179 |
+ to {
|
|
| 180 |
+ opacity: 0; |
|
| 181 |
+ } |
|
| 182 |
+} |
|
| 183 |
+ |
|
| 184 |
+@keyframes dialog-in {
|
|
| 185 |
+ from {
|
|
| 186 |
+ opacity: 0; |
|
| 187 |
+ transform: scale(0.95); |
|
| 188 |
+ } |
|
| 189 |
+ to {
|
|
| 190 |
+ opacity: 1; |
|
| 191 |
+ transform: scale(1); |
|
| 192 |
+ } |
|
| 193 |
+} |
|
| 194 |
+ |
|
| 195 |
+@keyframes toast-in {
|
|
| 196 |
+ from {
|
|
| 197 |
+ opacity: 0; |
|
| 198 |
+ transform: translateY(0.5rem); |
|
| 199 |
+ } |
|
| 200 |
+ to {
|
|
| 201 |
+ opacity: 1; |
|
| 202 |
+ transform: translateY(0); |
|
| 203 |
+ } |
|
| 204 |
+} |
|
| 205 |
+ |
|
| 206 |
+/* 레이아웃 전환(View Transitions API, feature 레인 A안) — feature가 전환 루트 |
|
| 207 |
+ 요소에 .layout-transition 클래스를 부여하면 view-transition-class로 매핑되어 |
|
| 208 |
+ 아래 ::view-transition-old/new 규칙이 부드러운 크로스페이드를 적용한다. |
|
| 209 |
+ (CSS View Transitions Level 2, view-transition-class 프로퍼티 사용) */ |
|
| 210 |
+.layout-transition {
|
|
| 211 |
+ view-transition-class: layout-transition; |
|
| 212 |
+} |
|
| 213 |
+ |
|
| 214 |
+::view-transition-old(.layout-transition) {
|
|
| 215 |
+ animation: var(--animate-fade-out); |
|
| 216 |
+} |
|
| 217 |
+ |
|
| 218 |
+::view-transition-new(.layout-transition) {
|
|
| 219 |
+ animation: var(--animate-fade-in); |
|
| 220 |
+} |
|
| 221 |
+ |
|
| 222 |
+@media (prefers-reduced-motion: reduce) {
|
|
| 223 |
+ ::view-transition-group(.layout-transition), |
|
| 224 |
+ ::view-transition-old(.layout-transition), |
|
| 225 |
+ ::view-transition-new(.layout-transition) {
|
|
| 226 |
+ animation: none; |
|
| 227 |
+ } |
|
| 155 | 228 |
} |
| 156 | 229 |
|
| 157 | 230 |
/* 간격 토큰 매핑 (변경 없음) — edupay-app lib/ui/core/tokens/app_spacing.dart의 |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?