/** * TASKMATE - Mobile Styles * ======================== * Touch-optimierte Mobile-Erfahrung * Nur auf mobilen Breakpoints angewendet */ /* ======================================== DESKTOP: Mobile-Elemente verstecken ======================================== */ @media (min-width: 769px) { .hamburger-btn, .mobile-menu, .mobile-menu-overlay, .swipe-indicator { display: none !important; } } /* ======================================== MOBILE STYLES (max-width: 768px) ======================================== */ @media (max-width: 768px) { /* ======================================== HAMBURGER BUTTON ======================================== */ .hamburger-btn { display: flex; flex-direction: column; justify-content: center; align-items: center; width: 44px; height: 44px; padding: 10px; background: transparent; border: none; cursor: pointer; z-index: calc(var(--z-modal) + 10); position: relative; flex-shrink: 0; } .hamburger-line { display: block; width: 24px; height: 2px; background: var(--text-primary); border-radius: 2px; transition: all 0.3s ease; } .hamburger-line + .hamburger-line { margin-top: 6px; } /* Hamburger zu X Animation */ .hamburger-btn.active .hamburger-line:nth-child(1) { transform: translateY(8px) rotate(45deg); } .hamburger-btn.active .hamburger-line:nth-child(2) { opacity: 0; transform: scaleX(0); } .hamburger-btn.active .hamburger-line:nth-child(3) { transform: translateY(-8px) rotate(-45deg); } /* ======================================== MOBILE SLIDE-IN MENU ======================================== */ .mobile-menu { position: fixed; top: 0; left: 0; width: 280px; max-width: 85vw; height: 100vh; height: 100dvh; background: var(--bg-card); box-shadow: var(--shadow-xl); z-index: var(--z-modal); transform: translateX(-100%); transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); overflow-y: auto; display: flex; flex-direction: column; } .mobile-menu.open { transform: translateX(0); } /* Overlay */ .mobile-menu-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: var(--overlay-bg); opacity: 0; visibility: hidden; z-index: calc(var(--z-modal) - 1); transition: opacity 0.3s ease, visibility 0.3s ease; } .mobile-menu-overlay.visible { opacity: 1; visibility: visible; } /* Menu Header */ .mobile-menu-header { display: flex; align-items: center; justify-content: space-between; padding: var(--spacing-4); border-bottom: 1px solid var(--border-light); flex-shrink: 0; } .mobile-menu-title { font-size: var(--text-lg); font-weight: var(--font-bold); color: var(--primary); margin: 0; } .mobile-menu-close { width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; background: transparent; border: none; color: var(--text-secondary); cursor: pointer; border-radius: var(--radius-md); transition: background 0.2s; font-size: 1.5rem; } .mobile-menu-close:hover, .mobile-menu-close:active { background: var(--bg-hover); } /* Menu Sections */ .mobile-menu-section { padding: var(--spacing-4); border-bottom: 1px solid var(--border-light); } .mobile-menu-label { display: block; font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--text-tertiary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-2); } /* Project Select */ .mobile-project-select { width: 100%; padding: var(--spacing-3); font-size: var(--text-base); border: 1px solid var(--border-default); border-radius: var(--radius-md); background: var(--bg-input); color: var(--text-primary); font-family: var(--font-primary); } /* Navigation */ .mobile-menu-nav { display: flex; flex-direction: column; gap: var(--spacing-1); } .mobile-nav-item { display: flex; align-items: center; gap: var(--spacing-3); padding: var(--spacing-3) var(--spacing-4); font-size: var(--text-base); font-weight: var(--font-medium); color: var(--text-secondary); background: transparent; border: none; border-radius: var(--radius-md); cursor: pointer; transition: all 0.2s; text-align: left; width: 100%; } .mobile-nav-item:hover, .mobile-nav-item:active { background: var(--bg-tertiary); color: var(--text-primary); } .mobile-nav-item.active { background: var(--primary-light); color: var(--primary); } .mobile-nav-item svg { flex-shrink: 0; width: 20px; height: 20px; } /* User Section */ .mobile-menu-user { margin-top: auto; padding: var(--spacing-4); border-top: 1px solid var(--border-light); } .mobile-user-info { display: flex; align-items: center; gap: var(--spacing-3); margin-bottom: var(--spacing-4); } .mobile-user-avatar { width: 40px; height: 40px; border-radius: var(--radius-full); background: var(--primary); color: var(--text-inverse); display: flex; align-items: center; justify-content: center; font-weight: var(--font-semibold); flex-shrink: 0; } .mobile-user-details { display: flex; flex-direction: column; min-width: 0; } .mobile-user-name { font-weight: var(--font-semibold); color: var(--text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .mobile-user-role { font-size: var(--text-sm); color: var(--text-tertiary); } .mobile-menu-btn { width: 100%; padding: var(--spacing-3); font-size: var(--text-sm); font-weight: var(--font-medium); background: var(--bg-tertiary); border: none; border-radius: var(--radius-md); color: var(--text-secondary); cursor: pointer; margin-bottom: var(--spacing-2); transition: background 0.2s; } .mobile-menu-btn:hover, .mobile-menu-btn:active { background: var(--bg-hover); } .mobile-menu-btn-danger { color: var(--error); } .mobile-menu-btn-danger:hover, .mobile-menu-btn-danger:active { background: var(--error-bg); } /* ======================================== HEADER ANPASSUNGEN ======================================== */ /* Desktop-Navigation verstecken */ .header-center .view-tabs { display: none !important; } .header-left .project-selector { display: none !important; } /* Header Layout anpassen */ .header-left { gap: var(--spacing-2); } /* ======================================== TOUCH DRAG & DROP FEEDBACK ======================================== */ .task-card.touch-dragging { transform: scale(1.03); box-shadow: var(--shadow-xl); opacity: 0.95; z-index: 1000; transition: none; pointer-events: none; } .task-card.touch-drag-placeholder { opacity: 0.3; border: 2px dashed var(--border-default); } .column-body.touch-drag-over { background: var(--primary-light); border: 2px dashed var(--primary); border-radius: var(--radius-md); } /* ======================================== SWIPE INDIKATOREN ======================================== */ .swipe-indicator { position: fixed; top: 50%; transform: translateY(-50%); width: 40px; height: 80px; display: flex; align-items: center; justify-content: center; background: var(--overlay-bg); color: var(--text-inverse); z-index: var(--z-tooltip); opacity: 0; transition: opacity 0.15s ease; pointer-events: none; } .swipe-indicator.left { left: 0; border-radius: 0 var(--radius-lg) var(--radius-lg) 0; } .swipe-indicator.right { right: 0; border-radius: var(--radius-lg) 0 0 var(--radius-lg); } .swipe-indicator.visible { opacity: 0.7; } .swipe-indicator svg { width: 24px; height: 24px; } /* ======================================== BOARD VIEW - HORIZONTAL SCROLLING ======================================== */ .view-board .board { scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; } .view-board .column { scroll-snap-align: start; flex-shrink: 0; } /* ======================================== PREVENT TEXT SELECTION DURING GESTURES ======================================== */ .is-swiping, .is-swiping *, .is-touch-dragging, .is-touch-dragging * { user-select: none !important; -webkit-user-select: none !important; -webkit-touch-callout: none !important; } /* ======================================== BODY SCROLL LOCK ======================================== */ body.mobile-menu-open { overflow: hidden; position: fixed; width: 100%; height: 100%; } /* ======================================== TOUCH-FREUNDLICHE ELEMENTE ======================================== */ /* Groessere Touch-Targets */ .calendar-day { min-height: 70px; touch-action: manipulation; } /* Task-Karten */ .task-card { touch-action: pan-y; } /* Buttons */ .btn { min-height: 44px; min-width: 44px; } } /* ======================================== EXTRA SMALL MOBILE (max 480px) ======================================== */ @media (max-width: 480px) { .mobile-menu { width: 100%; max-width: 100%; } .hamburger-btn { width: 40px; height: 40px; padding: 8px; } .hamburger-line { width: 20px; } .hamburger-line + .hamburger-line { margin-top: 5px; } .hamburger-btn.active .hamburger-line:nth-child(1) { transform: translateY(7px) rotate(45deg); } .hamburger-btn.active .hamburger-line:nth-child(3) { transform: translateY(-7px) rotate(-45deg); } }