Files
task-team/apps/tasks/app/globals.css
Claude CLI Agent aa5cb5f733 Mobile-first: swipe groups, bottom nav, slide-out drawer, responsive
- Swipe left/right between groups with overlay animation
- BottomNav: Tasks/Calendar/Chat/Settings (mobile only)
- Header: slide-out drawer on mobile, full on desktop
- GroupSelector: scroll-snap, auto-scroll active
- TaskCard: compact mobile layout, swipe-to-complete
- Safe area insets, 44px touch targets
- react-swipeable for touch gestures

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 11:24:29 +00:00

237 lines
3.9 KiB
CSS

@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
--background: #ffffff;
--foreground: #171717;
--card: #f9fafb;
--card-border: #e5e7eb;
--muted: #6b7280;
--primary: #3b82f6;
}
.dark {
--background: #0a0a0a;
--foreground: #ededed;
--card: #1a1a2e;
--card-border: #2d2d44;
--muted: #9ca3af;
--primary: #60a5fa;
}
body {
background: var(--background);
color: var(--foreground);
font-family: system-ui, -apple-system, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-size: 16px; /* prevent auto-zoom on iOS */
max-width: 100vw;
overflow-x: hidden;
}
/* Mobile-first base */
* {
box-sizing: border-box;
-webkit-tap-highlight-color: transparent;
}
input[type="text"],
input[type="email"],
input[type="password"],
input[type="datetime-local"],
textarea,
select {
font-size: 16px; /* Prevent zoom on iOS */
}
/* Touch targets - minimum 44px for accessibility */
@media (max-width: 768px) {
button,
a,
[role="button"] {
min-height: 44px;
}
}
@layer utilities {
.scrollbar-hide {
-ms-overflow-style: none;
scrollbar-width: none;
}
.scrollbar-hide::-webkit-scrollbar {
display: none;
}
.text-muted {
color: var(--muted);
}
}
/* Smooth scrolling with snap */
.snap-x {
scroll-snap-type: x mandatory;
-webkit-overflow-scrolling: touch;
}
.snap-center {
scroll-snap-align: center;
}
.snap-mandatory {
scroll-snap-type: x mandatory;
}
/* Bottom navigation responsive */
@media (max-width: 640px) {
.bottom-nav {
display: flex;
}
.desktop-sidebar {
display: none;
}
}
@media (min-width: 641px) {
.bottom-nav {
display: none;
}
}
/* Safe area for notched devices */
.safe-area-bottom {
padding-bottom: env(safe-area-inset-bottom, 0px);
}
/* Smooth page transitions */
main {
animation: fadeIn 0.15s ease-out;
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(4px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Slide-in animations for drawer */
@keyframes slideInRight {
from {
transform: translateX(100%);
}
to {
transform: translateX(0);
}
}
.animate-slideInRight {
animation: slideInRight 0.25s ease-out;
}
/* Swipe overlay animations */
@keyframes slideOverlayLeft {
0% {
opacity: 0;
transform: translateX(40px) scale(0.9);
}
30% {
opacity: 1;
transform: translateX(0) scale(1);
}
70% {
opacity: 1;
transform: translateX(0) scale(1);
}
100% {
opacity: 0;
transform: translateX(-20px) scale(0.95);
}
}
@keyframes slideOverlayRight {
0% {
opacity: 0;
transform: translateX(-40px) scale(0.9);
}
30% {
opacity: 1;
transform: translateX(0) scale(1);
}
70% {
opacity: 1;
transform: translateX(0) scale(1);
}
100% {
opacity: 0;
transform: translateX(20px) scale(0.95);
}
}
.animate-slideOverlayLeft {
animation: slideOverlayLeft 0.6s ease-out forwards;
}
.animate-slideOverlayRight {
animation: slideOverlayRight 0.6s ease-out forwards;
}
/* Content slide animations for group switch */
@keyframes slideContentLeft {
0% {
opacity: 0.3;
transform: translateX(30px);
}
100% {
opacity: 1;
transform: translateX(0);
}
}
@keyframes slideContentRight {
0% {
opacity: 0.3;
transform: translateX(-30px);
}
100% {
opacity: 1;
transform: translateX(0);
}
}
.animate-slideContentLeft {
animation: slideContentLeft 0.3s ease-out;
}
.animate-slideContentRight {
animation: slideContentRight 0.3s ease-out;
}
/* Fade-in for backdrop */
@keyframes fadeInBackdrop {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.animate-fadeIn {
animation: fadeInBackdrop 0.2s ease-out;
}
/* Mobile overscroll behavior */
@media (max-width: 640px) {
html {
overscroll-behavior-y: contain;
}
}
/* Selection color */
::selection {
background: rgba(59, 130, 246, 0.3);
}