6 Commits
Author SHA1 Message Date
Keith SmithandClaude Sonnet 4.5 8db9f99701 CRITICAL FIX: Override .detail-closed specificity at mobile
Root cause: The .app-layout.detail-closed class (2-class specificity)
was overriding .app-layout (1-class specificity) at mobile, creating
a 3-column grid "0 1fr 0" instead of single column "1fr".

The task-pane was placed in column 1 (0 width), making it invisible.

Fix: Explicitly override both .app-layout and .app-layout.detail-closed
with equal specificity in the 768px breakpoint.

Cache bust: v=6

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 21:33:11 -07:00
Keith SmithandClaude Sonnet 4.5 8b71447024 Fix task pane layout at mobile - add explicit grid positioning
The task-pane was not displaying at mobile because it lacked explicit
grid positioning and width constraints. Added:
- grid-row: 2 and grid-column: 1 for explicit placement
- width: 100%, min-width: 0, max-width: 100% to ensure full width
- Moved header grid positioning into mobile breakpoint for clarity

Also updated header to have explicit grid-row: 1 positioning.

Cache bust: v=5

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 21:30:06 -07:00
Keith SmithandClaude Sonnet 4.5 f836769ad7 CRITICAL FIX: Move base CSS before media queries
The sidebar-toggle and mobile-overlay base definitions were placed
AFTER the media queries, causing them to override the responsive
styles. This prevented the hamburger menu from showing and broke
the sidebar drawer functionality.

Fixed by moving base definitions before the Mobile Responsive section.

CSS order is now correct:
1. Base styles (display: none for sidebar-toggle)
2. Media queries (display: flex at 768px)

This allows the media query to properly override the base style.

Updated cache version to v=4.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 21:18:14 -07:00
Keith SmithandClaude Sonnet 4.5 d83b1e3091 Fix mobile header layout - remove vertical stacking
The flex-direction: column on header-user was causing buttons to
overflow outside the header bar. Changed approach to keep buttons
horizontal but make them smaller on very small screens.

Changes:
- Removed flex-direction: column from 480px breakpoint
- Keep buttons horizontal with smaller font size
- Reduced button min-height to 36px on small screens
- Reduced touch targets slightly (40px) for very small screens
- Smaller brand font size (0.9rem)

Updated cache version to v=3 to force reload.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 21:14:30 -07:00
Keith Smith e038e47247 Add cache busting to CSS for mobile updates 2025-12-26 21:07:07 -07:00
Keith SmithandClaude Sonnet 4.5 d5010580a4 Implement mobile responsive design improvements
Fixed critical mobile layout issues on phones (400-600px width):

Header improvements:
- Hide email on mobile to save space
- Compact user menu layout
- Adjust brand font size for mobile
- Better spacing with adjusted padding

Sidebar drawer fixes:
- Properly hide sidebar off-screen (translateX(-100%))
- Increase z-index to 100 for proper layering
- Add background and shadow for drawer effect
- Wider drawer (280px) for better touch targets

Touch target improvements:
- All buttons minimum 44px height (Apple HIG standard)
- Larger touch areas for sidebar toggle and theme toggle
- Improved checkbox sizing (24px)

Task list mobile optimization:
- Smaller fonts for tags and priority badges
- Text ellipsis for long tag names
- Better wrapping for task metadata
- Reduced padding for mobile screens

Modal and form improvements:
- Full-width detail pane on mobile
- Responsive modal sizing (95% width, max 400px)
- Better form field spacing

New 480px breakpoint:
- Ultra-small phone optimization
- Vertical stack for Profile/Logout buttons
- Further reduced font sizes and padding

Mobile utility classes:
- .mobile-only / .desktop-only for conditional display
- .mobile-full-width for full-width elements

All changes are CSS-only, no JavaScript modifications needed.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 21:01:17 -07:00
2 changed files with 177 additions and 27 deletions
+170 -20
View File
@@ -857,6 +857,34 @@ a:hover {
font-size: var(--font-sm); font-size: var(--font-sm);
} }
/* Sidebar toggle button (hidden on desktop, shown on mobile) */
.sidebar-toggle {
display: none;
background: none;
border: none;
padding: var(--space-sm);
cursor: pointer;
color: var(--text-secondary);
}
.sidebar-toggle svg {
width: 24px;
height: 24px;
}
/* Mobile overlay */
.mobile-overlay {
display: none;
position: fixed;
inset: 0;
background-color: rgba(0, 0, 0, 0.5);
z-index: 40;
}
.mobile-overlay.visible {
display: block;
}
/* ============================================ /* ============================================
Mobile Responsive Mobile Responsive
============================================ */ ============================================ */
@@ -886,19 +914,53 @@ a:hover {
--sidebar-width: 0; --sidebar-width: 0;
} }
.app-layout { /* Override both app-layout variants to use single column */
.app-layout,
.app-layout.detail-closed {
grid-template-columns: 1fr; grid-template-columns: 1fr;
} }
/* Explicit grid positioning for mobile */
.app-header {
grid-row: 1;
grid-column: 1;
padding: var(--space-sm) var(--space-md);
}
/* Force task pane into the single column with full width */
.task-pane {
grid-row: 2;
grid-column: 1;
width: 100%;
min-width: 0;
max-width: 100%;
}
.header-user span {
display: none; /* Hide email on mobile */
}
.app-header-actions {
gap: var(--space-xs);
}
.app-brand {
font-size: 1.1rem; /* Slightly smaller on mobile */
}
/* Sidebar drawer - improved positioning */
.app-sidebar { .app-sidebar {
position: fixed; position: fixed;
left: 0; left: 0;
top: var(--header-height); top: var(--header-height);
bottom: 0; bottom: 0;
width: 260px; width: 280px; /* Slightly wider for touch targets */
z-index: 50; z-index: 100; /* Higher z-index */
transform: translateX(-100%); transform: translateX(-100%);
transition: transform var(--anim-normal); transition: transform 0.3s ease-in-out;
background: var(--bg-primary);
box-shadow: var(--shadow-lg);
overflow-y: auto;
} }
.app-sidebar.open { .app-sidebar.open {
@@ -909,40 +971,128 @@ a:hover {
display: flex; display: flex;
} }
/* Detail pane mobile */
.detail-pane { .detail-pane {
width: 100%; width: 100%;
max-width: 100vw;
padding: var(--space-md);
} }
/* Forms */
.form-row { .form-row {
grid-template-columns: 1fr; grid-template-columns: 1fr;
} }
.form-group {
margin-bottom: var(--space-md);
} }
/* Sidebar toggle button (visible on mobile) */ /* Task list mobile optimization */
.sidebar-toggle { .task-item {
display: none;
background: none;
border: none;
padding: var(--space-sm); padding: var(--space-sm);
cursor: pointer;
color: var(--text-secondary);
} }
.sidebar-toggle svg { .task-meta {
flex-wrap: wrap;
gap: var(--space-xs);
font-size: 0.75rem;
}
.priority-badge {
font-size: 0.7rem;
padding: 2px 6px;
}
.tag {
font-size: 0.7rem;
padding: 2px 6px;
max-width: 100px;
overflow: hidden;
text-overflow: ellipsis;
}
/* Touch targets - 44px minimum */
.task-item-checkbox {
width: 24px; width: 24px;
height: 24px; height: 24px;
} }
/* Mobile overlay */ .btn {
.mobile-overlay { min-height: 44px;
display: none; padding: var(--space-sm) var(--space-md);
position: fixed;
inset: 0;
background-color: rgba(0, 0, 0, 0.5);
z-index: 40;
} }
.mobile-overlay.visible { .sidebar-toggle {
min-width: 44px;
min-height: 44px;
padding: var(--space-sm);
}
.theme-toggle {
min-width: 44px;
min-height: 44px;
}
/* Modal on mobile */
.modal {
width: 95%;
max-width: 400px;
max-height: 90vh;
overflow-y: auto;
}
/* Mobile utility classes */
.mobile-only {
display: block;
}
.desktop-only {
display: none !important;
}
.mobile-full-width {
width: 100% !important;
}
}
/* Very small phones breakpoint */
@media (max-width: 480px) {
.app-header {
padding: var(--space-xs) var(--space-sm);
}
.app-brand {
font-size: 0.9rem;
}
.app-sidebar {
width: 260px; /* Narrower on very small screens */
}
/* Smaller buttons on very small screens */
.header-user .btn {
font-size: 0.75rem;
padding: var(--space-xs) var(--space-sm);
min-height: 36px;
}
.theme-toggle {
min-width: 40px;
min-height: 40px;
}
.sidebar-toggle {
min-width: 40px;
min-height: 40px;
}
}
/* Mobile utility classes base definitions */
.mobile-only {
display: none;
}
.desktop-only {
display: block; display: block;
} }
+1 -1
View File
@@ -10,7 +10,7 @@
<link rel="icon" type="image/svg+xml" href="{% static 'favicons/favicon.svg' %}"> <link rel="icon" type="image/svg+xml" href="{% static 'favicons/favicon.svg' %}">
<link rel="alternate icon" href="{% static 'favicons/favicon.svg' %}" type="image/svg+xml"> <link rel="alternate icon" href="{% static 'favicons/favicon.svg' %}" type="image/svg+xml">
<link rel="stylesheet" href="{% static 'css/app.css' %}"> <link rel="stylesheet" href="{% static 'css/app.css' %}?v=6">
{% block extra_css %}{% endblock %} {% block extra_css %}{% endblock %}
</head> </head>
<body> <body>