Sheets via neuer KeyboardAwareSheet-Composable (in Modal pattern, auto-grow mit Tastatur, paddingBottom-Lift): EditMail, AddDomain, CreateRoom, ConnectMail. GameOverScreen behält Spring-Slide-In, nutzt RN Keyboard.addListener für Lift. - KeyboardAwareSheet.tsx — universal modal with sheet-grow + keyboard-padding - react-native-keyboard-controller installiert + KeyboardProvider in Root - Snake: time + ScoreProgressBar + useSnakeSounds (haptic, audio TODO) - Tetris: title weg, Buttons zentriert, kein Pressable mit style-fn - DPad-Buttons 60→48, more bg, no scale - useMe: pub-sub listener pattern für app-weite avatar/nickname-Updates - dm.tsx: resolveAvatar wrap (iron.png-Warning) - Mail-error-humanizer + locales Recovery-Doc-Update in docs/internal/RECOVERY_LOG_2026-05-10.md Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
54 lines
1.3 KiB
CSS
54 lines
1.3 KiB
CSS
@import "tailwindcss";
|
||
@import "@nuxt/ui";
|
||
|
||
@theme static {
|
||
--font-sans: 'Nunito', sans-serif;
|
||
}
|
||
|
||
/* Smooth Scrolling */
|
||
html {
|
||
scroll-behavior: smooth;
|
||
}
|
||
|
||
/* iOS Zoom-Fix: 16px verhindert Auto-Zoom bei Input-Fokus */
|
||
input,
|
||
select,
|
||
textarea {
|
||
font-size: 16px !important;
|
||
}
|
||
|
||
/* Verhindert Double-Tap-Zoom auf Buttons und interaktiven Elementen */
|
||
button, a, [role="button"] {
|
||
touch-action: manipulation;
|
||
}
|
||
|
||
/* ═══════════════════════════════════════════════════════════
|
||
PAGE TRANSITIONS – iOS-style slide
|
||
═══════════════════════════════════════════════════════════ */
|
||
|
||
.slide-left-enter-active,
|
||
.slide-left-leave-active,
|
||
.slide-right-enter-active,
|
||
.slide-right-leave-active {
|
||
transition: opacity 200ms ease, transform 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
||
will-change: transform, opacity;
|
||
}
|
||
|
||
.slide-left-enter-from {
|
||
opacity: 0;
|
||
transform: translateX(20px);
|
||
}
|
||
.slide-left-leave-to {
|
||
opacity: 0;
|
||
transform: translateX(-20px);
|
||
}
|
||
|
||
.slide-right-enter-from {
|
||
opacity: 0;
|
||
transform: translateX(-20px);
|
||
}
|
||
.slide-right-leave-to {
|
||
opacity: 0;
|
||
transform: translateX(20px);
|
||
}
|