- 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>
359 lines
6.3 KiB
CSS
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;
|
|
}
|
|
}
|