Files
task-team/apps/tasks/app/globals.css
Admin c266b44b2a Calendar mobile fix + Android APK 41MB built
- Calendar: compact mobile header, nowrap date, pill view switcher
- Android APK: info.hasdo.taskteam v1.0.0, 41MB, SDK 24-36
- APK at mobile/dist/android/task-team-v1.0.0-release.apk

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

359 lines
6.3 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;
}
}
/* Mobile modal fix */
.modal-content {
max-height: 90vh;
max-height: 90dvh; /* dynamic viewport height */
overflow-y: auto;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
}
/* Ensure modal buttons visible above keyboard */
@media (max-width: 640px) {
.modal-content {
max-height: 85vh;
max-height: 85dvh;
}
}
/* Selection color */
::selection {
background: rgba(59, 130, 246, 0.3);
}
/* ============================
FullCalendar Mobile Layout Fix
============================ */
/* Base toolbar styles - compact */
.fc .fc-toolbar {
flex-wrap: wrap;
gap: 4px 8px;
row-gap: 6px;
font-size: 14px;
}
/* Title: prevent vertical text wrapping */
.fc .fc-toolbar-title {
font-size: 18px !important;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Compact buttons */
.fc .fc-button {
padding: 4px 10px !important;
font-size: 13px !important;
line-height: 1.4 !important;
}
/* Button group: no extra gaps */
.fc .fc-button-group {
gap: 0;
}
/* Mobile breakpoint: stack toolbar rows */
@media (max-width: 640px) {
.fc .fc-toolbar {
flex-direction: column;
align-items: center;
gap: 6px;
}
.fc .fc-toolbar-chunk {
display: flex;
justify-content: center;
align-items: center;
gap: 4px;
width: 100%;
}
/* Title on its own row, centered, smaller */
.fc .fc-toolbar-title {
font-size: 15px !important;
text-align: center;
width: 100%;
order: -1;
}
/* Smaller buttons on mobile */
.fc .fc-button {
padding: 3px 8px !important;
font-size: 12px !important;
min-height: 32px !important;
}
/* View switcher as pill buttons */
.fc .fc-button-group .fc-button {
border-radius: 0 !important;
}
.fc .fc-button-group .fc-button:first-child {
border-radius: 9999px 0 0 9999px !important;
}
.fc .fc-button-group .fc-button:last-child {
border-radius: 0 9999px 9999px 0 !important;
}
/* Reduce page padding */
.fc {
font-size: 12px;
}
/* Time grid slot labels smaller */
.fc .fc-timegrid-slot-label {
font-size: 10px;
}
/* Day header smaller */
.fc .fc-col-header-cell-cushion {
font-size: 12px;
padding: 4px 2px;
}
}
/* Small mobile (< 400px) - even tighter */
@media (max-width: 400px) {
.fc .fc-toolbar-title {
font-size: 13px !important;
}
.fc .fc-button {
padding: 2px 6px !important;
font-size: 11px !important;
min-height: 28px !important;
}
}