Add CSS for Tablet sized Screens.

This commit is contained in:
2025-07-14 10:07:56 +02:00
committed by Jens Luedicke
parent 5763a9cfc4
commit 5f54b02684
4 changed files with 514 additions and 5 deletions

View File

@@ -213,11 +213,13 @@
}
.mobile-nav-brand a {
color: inherit;
color: var(--primary-color, #667eea) !important;
text-decoration: none;
display: flex;
align-items: center;
gap: 8px;
font-size: 18px;
font-weight: 600;
}
.mobile-logo {

View File

@@ -0,0 +1,506 @@
/* Tablet-Optimized CSS for TimeTrack */
/* This file contains tablet-specific styles for iPad and similar devices */
/* ===== Tablet Breakpoint (768px - 1024px) ===== */
@media (min-width: 769px) and (max-width: 1024px) {
/* ===== Layout Adjustments ===== */
body {
font-size: 16px;
}
/* ===== Sidebar for Tablets ===== */
.sidebar {
position: fixed;
top: 0;
left: 0;
transform: translateX(-100%);
width: 280px;
height: 100vh;
border-radius: 0;
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
z-index: 300;
box-shadow: 2px 0 20px rgba(0,0,0,0.15);
}
.sidebar.mobile-open {
transform: translateX(0);
}
/* Show mobile header for tablets */
.mobile-header {
display: flex !important;
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 100;
background: #ffffff;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
padding: 12px 20px;
height: 64px;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid rgba(0,0,0,0.08);
}
/* Larger branding for tablets */
.mobile-nav-brand {
font-size: 20px;
font-weight: 600;
color: var(--primary-color, #667eea);
}
.mobile-nav-brand a {
color: var(--primary-color, #667eea) !important;
text-decoration: none;
font-size: 20px;
font-weight: 600;
display: flex;
align-items: center;
gap: 8px;
}
.mobile-logo {
max-height: 36px;
max-width: 180px;
}
/* Main content adjustments */
.main-content {
margin-left: 0;
padding: 2rem;
padding-top: calc(64px + 2rem);
min-height: 100vh;
}
/* Footer adjustments */
footer {
margin-left: 0;
}
/* Mobile overlay for sidebar */
.mobile-overlay {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.5);
z-index: 299;
}
.mobile-overlay.active {
display: block;
}
/* ===== Container Widths ===== */
.timetrack-container,
.admin-container,
.config-container,
.table-container,
.team-summary-container,
.management-container,
.analytics-container {
max-width: 100%;
padding: 1.5rem;
margin: 0 auto 2rem auto;
}
/* ===== Typography Scaling ===== */
h1 {
font-size: 2rem;
}
h2 {
font-size: 1.75rem;
}
h3 {
font-size: 1.5rem;
}
/* ===== Form Elements ===== */
input[type="text"],
input[type="email"],
input[type="password"],
input[type="number"],
input[type="tel"],
input[type="date"],
input[type="time"],
input[type="datetime-local"],
select,
textarea {
font-size: 16px; /* Prevent zoom on iOS */
padding: 12px 16px;
min-height: 48px;
}
/* ===== Buttons ===== */
.btn,
button {
min-height: 48px;
padding: 12px 24px;
font-size: 16px;
}
/* ===== Grid Layouts ===== */
.features {
grid-template-columns: repeat(2, 1fr);
gap: 1.5rem;
}
.admin-panel {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 1.5rem;
}
.export-options {
grid-template-columns: repeat(2, 1fr);
gap: 1.5rem;
}
.management-grid {
grid-template-columns: repeat(2, 1fr);
gap: 1.5rem;
}
.stats-grid {
grid-template-columns: repeat(2, 1fr);
gap: 1rem;
}
/* ===== Table Responsiveness ===== */
.data-table {
font-size: 15px;
}
.data-table th,
.data-table td {
padding: 12px;
}
/* ===== Card Components ===== */
.card {
padding: 1.5rem;
margin-bottom: 1.5rem;
}
.admin-card,
.management-card {
width: 100%;
}
/* ===== Modal Adjustments ===== */
.modal-content {
margin: 5% auto;
width: 90%;
max-width: 600px;
}
/* ===== Navigation Improvements ===== */
.mobile-nav-toggle {
width: 48px;
height: 48px;
display: flex;
align-items: center;
justify-content: center;
}
.mobile-nav-toggle span {
width: 28px;
height: 3px;
background-color: var(--primary-color, #667eea) !important;
}
/* ===== Page Headers ===== */
.page-header {
flex-direction: row;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 16px;
padding: 2rem;
color: white;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 1.5rem;
width: 100%;
}
.page-title {
font-size: 1.75rem;
font-weight: 700;
margin: 0;
display: flex;
align-items: center;
gap: 0.5rem;
color: white;
}
.page-subtitle {
font-size: 0.9rem;
opacity: 0.9;
color: white;
margin-top: 0.25rem;
}
.page-icon {
font-size: 2rem;
color: white;
}
.page-actions {
flex-direction: row;
gap: 1rem;
}
/* Ensure buttons in header look good */
.page-header .btn {
background: rgba(255, 255, 255, 0.2);
color: white;
border: 1px solid rgba(255, 255, 255, 0.3);
backdrop-filter: blur(10px);
}
.page-header .btn:hover {
background: rgba(255, 255, 255, 0.3);
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
}
/* ===== Filter Panels ===== */
.filter-panel {
padding: 1.5rem;
}
.filter-row {
flex-direction: row;
flex-wrap: wrap;
gap: 1rem;
}
.filter-group {
min-width: 200px;
flex: 1;
}
/* ===== Analytics View ===== */
.analytics-header {
flex-direction: row;
justify-content: space-between;
align-items: center;
}
.mode-switcher {
flex-direction: row;
}
.view-tabs {
flex-wrap: nowrap;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.tab-btn {
flex: 0 0 auto;
padding: 0.75rem 1.25rem;
}
.charts-container {
grid-template-columns: 1fr;
gap: 1.5rem;
}
/* ===== Time Tracking Specific ===== */
.timer-section {
padding: 2rem;
}
#timer {
font-size: 2.5rem;
}
.button-group {
flex-direction: row;
justify-content: center;
flex-wrap: wrap;
}
.button-group .btn {
min-width: 140px;
}
/* ===== Email Nag Banner ===== */
.email-nag-content {
flex-direction: row;
align-items: center;
}
/* ===== Export Buttons ===== */
#export-buttons .quick-export-buttons {
flex-direction: row;
justify-content: center;
}
/* ===== Bottom Navigation - Hide on tablets ===== */
.mobile-bottom-nav {
display: none;
}
.has-bottom-nav .content {
padding-bottom: 2rem !important;
}
/* ===== Announcement Styles ===== */
.announcement-header {
flex-direction: row;
justify-content: space-between;
align-items: center;
}
/* ===== Dashboard Widgets ===== */
.widget {
padding: 1.25rem;
}
/* ===== Team Hours Table ===== */
.team-hours-table {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
/* ===== Sidebar Toggle - Hide on tablets ===== */
.sidebar-toggle {
display: none;
}
}
/* ===== Landscape Tablets (1024px width in landscape) ===== */
@media (min-width: 769px) and (max-width: 1024px) and (orientation: landscape) {
/* Optimize for landscape tablet viewing */
.mobile-header {
height: 56px;
padding: 8px 20px;
}
.main-content {
padding-top: calc(56px + 1.5rem);
}
/* Compact page header for landscape */
.page-header {
padding: 1.5rem;
}
.page-title {
font-size: 1.5rem;
}
.header-content {
gap: 1rem;
}
/* Side-by-side layouts for landscape */
.features,
.admin-panel,
.export-options,
.management-grid {
grid-template-columns: repeat(3, 1fr);
}
.stats-grid {
grid-template-columns: repeat(4, 1fr);
}
/* Compact timer display */
#timer {
font-size: 2rem;
}
.timer-section {
padding: 1.5rem;
}
}
/* ===== iPad Pro Specific (1024px exactly) ===== */
@media (width: 1024px) {
/* Ensure proper layout for iPad Pro in portrait */
.mobile-header {
display: flex !important;
}
.sidebar {
transform: translateX(-100%);
}
.main-content {
margin-left: 0;
padding-top: calc(64px + 2rem);
}
}
/* ===== Touch Enhancements for Tablets ===== */
@media (min-width: 769px) and (max-width: 1024px) {
/* Larger touch targets */
a, button, .btn, input, select, textarea {
min-height: 44px;
touch-action: manipulation;
-webkit-tap-highlight-color: transparent;
}
/* Table row height for better touch */
.data-table tr {
min-height: 48px;
}
.data-table td {
padding: 14px 12px;
}
/* Improved hover states for touch */
@media (hover: none) {
.btn:hover,
a:hover {
transform: none;
box-shadow: none;
}
.btn:active,
a:active {
transform: scale(0.98);
opacity: 0.9;
}
}
}
/* ===== Utility Classes for Tablets ===== */
@media (min-width: 769px) and (max-width: 1024px) {
.hide-on-tablet {
display: none !important;
}
.show-on-tablet {
display: block !important;
}
.tablet-full-width {
width: 100% !important;
}
.tablet-half-width {
width: 50% !important;
}
.tablet-text-center {
text-align: center !important;
}
}

View File

@@ -27,7 +27,7 @@ document.addEventListener('DOMContentLoaded', function() {
// Mobile navigation toggle
if (mobileNavToggle) {
mobileNavToggle.addEventListener('click', function() {
sidebar.classList.toggle('active');
sidebar.classList.toggle('mobile-open');
mobileOverlay.classList.toggle('active');
mobileNavToggle.classList.toggle('active');
document.body.classList.toggle('mobile-nav-open');
@@ -37,7 +37,7 @@ document.addEventListener('DOMContentLoaded', function() {
// Close mobile sidebar when clicking overlay
if (mobileOverlay) {
mobileOverlay.addEventListener('click', function() {
sidebar.classList.remove('active');
sidebar.classList.remove('mobile-open');
mobileOverlay.classList.remove('active');
if (mobileNavToggle) mobileNavToggle.classList.remove('active');
document.body.classList.remove('mobile-nav-open');

View File

@@ -36,6 +36,7 @@
<link rel="stylesheet" href="{{ url_for('static', filename='css/mobile-optimized.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/mobile-forms.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/mobile-bottom-nav.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/tablet-optimized.css') }}">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tabler/icons@latest/iconfont/tabler-icons.min.css">
<!-- PWA Support -->
@@ -82,8 +83,8 @@
color: inherit;
text-decoration: none;
}
/* Fix mobile hamburger menu visibility */
@media (max-width: 768px) {
/* Fix mobile and tablet hamburger menu visibility */
@media (max-width: 1024px) {
#mobile-nav-toggle span {
background-color: var(--primary-color, #667eea) !important;
display: block !important;