Fix mobile bottom nav consistency and ticket view width
Mobile bottom nav: - Added nav-label class to all text labels in JS - Fixed icon sizing (20px fixed height) - Fixed label sizing (10px for all) - Equal width columns (25% each) - Changed gear emoji from ⚙️ to ⚙ for consistency Ticket view mobile: - Removed all borders from ticket container - Removed decorative corners on mobile - Reduced nested padding significantly - ascii-frame-inner now 0.75rem padding (was 1rem) - Nested ascii-frame-inner only 0.5rem - detail-group full-width has no padding - Content goes edge-to-edge Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -5700,7 +5700,7 @@ table td:nth-child(4) {
|
|||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
height: 64px;
|
height: 60px;
|
||||||
background: var(--bg-primary);
|
background: var(--bg-primary);
|
||||||
border-top: 2px solid var(--terminal-green);
|
border-top: 2px solid var(--terminal-green);
|
||||||
z-index: var(--z-dropdown);
|
z-index: var(--z-dropdown);
|
||||||
@@ -5709,29 +5709,34 @@ table td:nth-child(4) {
|
|||||||
|
|
||||||
.mobile-bottom-nav a,
|
.mobile-bottom-nav a,
|
||||||
.mobile-bottom-nav button {
|
.mobile-bottom-nav button {
|
||||||
flex: 1;
|
flex: 1 1 25%;
|
||||||
|
max-width: 25%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
gap: 0.15rem;
|
gap: 4px;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
border: none;
|
border: none;
|
||||||
color: var(--terminal-green);
|
color: var(--terminal-green);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
font-size: 0.7rem;
|
|
||||||
font-family: var(--font-mono);
|
font-family: var(--font-mono);
|
||||||
padding: 0.5rem 0.25rem;
|
padding: 8px 4px;
|
||||||
min-height: 64px;
|
min-height: 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mobile-bottom-nav .nav-icon {
|
.mobile-bottom-nav .nav-icon {
|
||||||
font-size: 1.1rem;
|
font-size: 20px;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
|
height: 24px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mobile-bottom-nav .nav-label {
|
.mobile-bottom-nav .nav-label,
|
||||||
font-size: 0.7rem;
|
.mobile-bottom-nav span:not(.nav-icon) {
|
||||||
|
font-size: 10px;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 0.5px;
|
letter-spacing: 0.5px;
|
||||||
|
|||||||
@@ -2258,27 +2258,55 @@ body.dark-mode .editable {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ticket container - full width on mobile */
|
/* Ticket container - full width on mobile, minimal borders */
|
||||||
.ticket-container {
|
.ticket-container {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
border-width: 2px;
|
border: none;
|
||||||
border-left: none;
|
padding: 0;
|
||||||
border-right: none;
|
}
|
||||||
|
|
||||||
|
.ticket-container.ascii-frame-outer {
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove all decorative corners on mobile */
|
||||||
|
.ticket-container::before,
|
||||||
|
.ticket-container::after,
|
||||||
|
.ticket-container .bottom-left-corner,
|
||||||
|
.ticket-container .bottom-right-corner {
|
||||||
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ascii-section-header {
|
.ascii-section-header {
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
padding: 0.75rem 1rem;
|
padding: 0.75rem 0.75rem;
|
||||||
|
margin: 0;
|
||||||
|
border-bottom: 2px solid var(--terminal-green);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Remove all nested padding - go edge to edge */
|
||||||
.ascii-content {
|
.ascii-content {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ascii-frame-inner {
|
.ascii-frame-inner {
|
||||||
padding: 1rem;
|
padding: 0.75rem;
|
||||||
border: none;
|
border: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Nested ascii-frame-inner should have no extra padding */
|
||||||
|
.ascii-frame-inner .ascii-frame-inner {
|
||||||
|
padding: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Detail group full width */
|
||||||
|
.detail-group.full-width {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Better ticket header layout */
|
/* Better ticket header layout */
|
||||||
|
|||||||
@@ -95,19 +95,19 @@ function initMobileSidebar() {
|
|||||||
nav.innerHTML = `
|
nav.innerHTML = `
|
||||||
<a href="/">
|
<a href="/">
|
||||||
<span class="nav-icon">🏠</span>
|
<span class="nav-icon">🏠</span>
|
||||||
<span>Home</span>
|
<span class="nav-label">Home</span>
|
||||||
</a>
|
</a>
|
||||||
<button type="button" data-action="open-mobile-sidebar">
|
<button type="button" data-action="open-mobile-sidebar">
|
||||||
<span class="nav-icon">🔍</span>
|
<span class="nav-icon">🔍</span>
|
||||||
<span>Filter</span>
|
<span class="nav-label">Filter</span>
|
||||||
</button>
|
</button>
|
||||||
<a href="/ticket/create">
|
<a href="/ticket/create">
|
||||||
<span class="nav-icon">➕</span>
|
<span class="nav-icon">➕</span>
|
||||||
<span>New</span>
|
<span class="nav-label">New</span>
|
||||||
</a>
|
</a>
|
||||||
<button type="button" data-action="open-settings-modal">
|
<button type="button" data-action="open-settings-modal">
|
||||||
<span class="nav-icon">⚙️</span>
|
<span class="nav-icon">⚙</span>
|
||||||
<span>Settings</span>
|
<span class="nav-label">Settings</span>
|
||||||
</button>
|
</button>
|
||||||
`;
|
`;
|
||||||
document.body.appendChild(nav);
|
document.body.appendChild(nav);
|
||||||
|
|||||||
@@ -12,11 +12,11 @@ $nonce = SecurityHeadersMiddleware::getNonce();
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Ticket Dashboard</title>
|
<title>Ticket Dashboard</title>
|
||||||
<link rel="icon" type="image/png" href="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/images/favicon.png">
|
<link rel="icon" type="image/png" href="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/images/favicon.png">
|
||||||
<link rel="stylesheet" href="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/css/dashboard.css?v=20260131d">
|
<link rel="stylesheet" href="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/css/dashboard.css?v=20260131e">
|
||||||
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/ascii-banner.js"></script>
|
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/ascii-banner.js"></script>
|
||||||
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/toast.js"></script>
|
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/toast.js"></script>
|
||||||
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/markdown.js?v=20260131d"></script>
|
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/markdown.js?v=20260131e"></script>
|
||||||
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/dashboard.js?v=20260131d"></script>
|
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/dashboard.js?v=20260131e"></script>
|
||||||
<script nonce="<?php echo $nonce; ?>">
|
<script nonce="<?php echo $nonce; ?>">
|
||||||
// CSRF Token for AJAX requests
|
// CSRF Token for AJAX requests
|
||||||
window.CSRF_TOKEN = '<?php echo CsrfMiddleware::getToken(); ?>';
|
window.CSRF_TOKEN = '<?php echo CsrfMiddleware::getToken(); ?>';
|
||||||
|
|||||||
@@ -50,12 +50,12 @@ $nonce = SecurityHeadersMiddleware::getNonce();
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Ticket #<?php echo $ticket['ticket_id']; ?></title>
|
<title>Ticket #<?php echo $ticket['ticket_id']; ?></title>
|
||||||
<link rel="icon" type="image/png" href="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/images/favicon.png">
|
<link rel="icon" type="image/png" href="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/images/favicon.png">
|
||||||
<link rel="stylesheet" href="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/css/dashboard.css?v=20260131d">
|
<link rel="stylesheet" href="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/css/dashboard.css?v=20260131e">
|
||||||
<link rel="stylesheet" href="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/css/ticket.css?v=20260131d">
|
<link rel="stylesheet" href="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/css/ticket.css?v=20260131e">
|
||||||
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/toast.js"></script>
|
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/toast.js"></script>
|
||||||
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/markdown.js?v=20260131d"></script>
|
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/markdown.js?v=20260131e"></script>
|
||||||
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/dashboard.js?v=20260131d"></script>
|
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/dashboard.js?v=20260131e"></script>
|
||||||
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/ticket.js?v=20260131d"></script>
|
<script nonce="<?php echo $nonce; ?>" src="<?php echo $GLOBALS['config']['ASSETS_URL']; ?>/js/ticket.js?v=20260131e"></script>
|
||||||
<script nonce="<?php echo $nonce; ?>">
|
<script nonce="<?php echo $nonce; ?>">
|
||||||
// CSRF Token for AJAX requests
|
// CSRF Token for AJAX requests
|
||||||
window.CSRF_TOKEN = '<?php echo CsrfMiddleware::getToken(); ?>';
|
window.CSRF_TOKEN = '<?php echo CsrfMiddleware::getToken(); ?>';
|
||||||
|
|||||||
Reference in New Issue
Block a user