diff --git a/assets/css/dashboard.css b/assets/css/dashboard.css index 0e95408..8484153 100644 --- a/assets/css/dashboard.css +++ b/assets/css/dashboard.css @@ -7,13 +7,13 @@ /* Terminal Colors */ --terminal-green: #00ff41; - --terminal-green-dim: #00aa2a; + --terminal-green-dim: #00cc33; --terminal-amber: #ffb000; --terminal-cyan: #00ffff; --terminal-red: #ff4444; --text-primary: #00ff41; --text-secondary: #00cc33; - --text-muted: #008822; + --text-muted: #00bb33; /* Improved contrast ratio for WCAG AA */ /* Border & UI */ --border-color: #00ff41; @@ -58,6 +58,18 @@ /* Transitions */ --transition-default: all 0.3s ease; + + /* Z-Index Scale - Centralized stacking context management */ + --z-base: 1; + --z-dropdown: 100; + --z-sticky: 200; + --z-fixed: 300; + --z-modal-backdrop: 400; + --z-modal: 500; + --z-popover: 600; + --z-tooltip: 700; + --z-toast: 800; + --z-overlay: 9999; } /* Dark theme (now same as light for terminal aesthetic) */ @@ -105,7 +117,7 @@ body::before { transparent 2px ); pointer-events: none; - z-index: 9999; + z-index: var(--z-overlay); animation: scanline 8s linear infinite; } @@ -521,6 +533,84 @@ h1 { margin-left: 3px; } +/* ===== INTERMEDIATE RESPONSIVE BREAKPOINTS ===== */ + +/* Large desktop (1200px+) */ +@media (min-width: 1200px) { + .dashboard-layout { + max-width: 1800px; + margin: 0 auto; + } + + .stats-widgets .stats-row { + grid-template-columns: repeat(6, 1fr); + } + + .kanban-board { + grid-template-columns: repeat(4, 1fr); + } +} + +/* Medium desktop (900px - 1199px) */ +@media (min-width: 900px) and (max-width: 1199px) { + .stats-widgets .stats-row { + grid-template-columns: repeat(3, 1fr); + } + + .dashboard-toolbar { + flex-wrap: wrap; + gap: 1rem; + } + + .toolbar-center { + order: 3; + width: 100%; + justify-content: flex-start; + } +} + +/* Tablet landscape (600px - 899px) */ +@media (min-width: 600px) and (max-width: 899px) { + .stats-widgets .stats-row { + grid-template-columns: repeat(2, 1fr); + } + + .dashboard-toolbar { + flex-direction: column; + align-items: stretch; + } + + .toolbar-left, + .toolbar-center, + .toolbar-right { + width: 100%; + } + + .toolbar-search { + width: 100%; + } + + .search-box { + flex: 1; + } + + .dashboard-sidebar { + width: 200px; + } + + .kanban-board { + grid-template-columns: repeat(2, 1fr); + } + + table { + font-size: 0.85rem; + } + + th, td { + padding: 0.5rem; + } +} + /* Responsive design for smaller screens */ @media (max-width: 768px) { .user-header { @@ -597,7 +687,7 @@ h1 { font-size: 1.5rem; color: var(--terminal-green); line-height: 1; - z-index: 10; + z-index: var(--z-base); } .ascii-frame-outer::after { @@ -608,7 +698,7 @@ h1 { font-size: 1.5rem; color: var(--terminal-green); line-height: 1; - z-index: 10; + z-index: var(--z-base); } /* Bottom corners as separate elements with enhanced glow */ @@ -620,7 +710,7 @@ h1 { color: var(--terminal-green); text-shadow: var(--glow-green); line-height: 1; - z-index: 10; + z-index: var(--z-base); animation: corner-pulse 4s ease-in-out infinite; } @@ -1068,7 +1158,7 @@ h1 { flex-direction: column; align-items: center; justify-content: center; - z-index: 100; + z-index: var(--z-dropdown); font-family: var(--font-mono); color: var(--terminal-green); } @@ -1323,7 +1413,7 @@ table::before { color: var(--terminal-green); text-shadow: var(--glow-green); line-height: 1; - z-index: 10; + z-index: var(--z-base); } table::after { @@ -1335,7 +1425,7 @@ table::after { color: var(--terminal-green); text-shadow: var(--glow-green); line-height: 1; - z-index: 10; + z-index: var(--z-base); } th, td { @@ -1833,7 +1923,7 @@ input[type="checkbox"]:checked { box-shadow: var(--shadow); border-radius: 0; padding: 10px; - z-index: 100; + z-index: var(--z-dropdown); border: 1px solid var(--border-color); } @@ -2295,7 +2385,7 @@ input[type="checkbox"]:checked { width: 100%; height: 100%; background: var(--bg-primary); - z-index: 99999; + z-index: var(--z-modal-backdrop); display: flex; align-items: center; justify-content: center; @@ -2318,7 +2408,7 @@ input[type="checkbox"]:checked { top: 50%; left: 50%; transform: translate(-50%, -50%); - z-index: 10000; + z-index: var(--z-modal); background: var(--bg-primary); border: 3px solid var(--terminal-green); padding: 2rem; @@ -2478,7 +2568,7 @@ body.dark-mode .btn-secondary { display: flex; justify-content: center; align-items: center; - z-index: 10000; + z-index: var(--z-modal); } .modal-content { @@ -2920,7 +3010,7 @@ body.dark-mode select option { color: var(--terminal-green); text-shadow: var(--glow-green); box-shadow: 0 0 20px rgba(0, 255, 65, 0.3); - z-index: 10001; + z-index: var(--z-toast); opacity: 0; transform: translateX(400px); transition: all 0.3s ease; @@ -2994,7 +3084,7 @@ body.dark-mode select option { left: 0; width: 100vw; height: 100vh; - z-index: 10000; + z-index: var(--z-modal); background: rgba(0, 0, 0, 0.85); backdrop-filter: blur(5px); display: flex; @@ -3185,6 +3275,80 @@ body.dark-mode select option { cursor: pointer; } +/* Setting select width variants */ +.setting-select-wide { + max-width: 70%; +} + +.setting-select-full { + max-width: 100%; +} + +.setting-select-narrow { + max-width: 90px; +} + +/* Setting row layout variants */ +.setting-row-right { + justify-content: flex-end; +} + +/* Button size variants for settings */ +.btn-setting { + padding: 0.5rem 1rem; +} + +/* Utility text classes */ +.text-muted { + color: var(--text-muted); +} + +.text-small { + font-size: 0.85rem; +} + +.text-center { + text-align: center; +} + +/* Utility spacing classes */ +.mt-sm { + margin-top: 0.25rem; +} + +.display-block { + display: block; +} + +/* Empty state styling */ +.empty-state { + text-align: center; + padding: 3rem; +} + +.empty-state-terminal { + color: var(--terminal-green); + text-shadow: var(--glow-green); + font-size: 0.8rem; + line-height: 1.2; +} + +/* Separator text */ +.separator-text { + color: var(--terminal-green); +} + +/* Checkbox column width */ +.checkbox-column { + width: 40px; +} + +/* Actions column width */ +.actions-column { + width: 100px; + text-align: center; +} + .setting-select:focus { outline: none; border-color: var(--terminal-amber); @@ -3481,7 +3645,7 @@ code.inline-code { left: 0; width: 100vw; height: 100vh; - z-index: 10000; + z-index: var(--z-modal); background: rgba(0, 0, 0, 0.85); backdrop-filter: blur(5px); display: flex; @@ -3852,7 +4016,7 @@ tr:hover .quick-actions { background: var(--bg-primary); border: 2px solid var(--terminal-green); min-width: 120px; - z-index: 100; + z-index: var(--z-dropdown); box-shadow: 0 0 10px rgba(0, 255, 65, 0.3); } @@ -3894,7 +4058,7 @@ tr:hover .quick-actions { background: var(--bg-primary); border: 2px solid var(--priority-1); min-width: 180px; - z-index: 1000; + z-index: var(--z-popover); box-shadow: 0 0 15px rgba(255, 77, 77, 0.3); } @@ -4033,7 +4197,7 @@ table td:nth-child(4) { /* ===== INLINE TICKET PREVIEW POPUP ===== */ .ticket-preview-popup { position: absolute; - z-index: 10000; + z-index: var(--z-modal); width: 320px; background: var(--bg-primary); border: 2px solid var(--terminal-green); @@ -4533,7 +4697,7 @@ table td:nth-child(4) { .user-header { position: sticky; top: 0; - z-index: 100; + z-index: var(--z-dropdown); padding: 0.5rem 0.75rem; flex-wrap: nowrap; gap: 0.5rem; @@ -4684,7 +4848,7 @@ table td:nth-child(4) { width: 100%; height: 100%; background: rgba(0, 0, 0, 0.7); - z-index: 1000; + z-index: var(--z-popover); } .mobile-sidebar-overlay.active { @@ -4706,7 +4870,7 @@ table td:nth-child(4) { cursor: pointer; align-items: center; justify-content: center; - z-index: 10; + z-index: var(--z-base); } /* ===== MAIN CONTENT AREA ===== */ @@ -5076,7 +5240,7 @@ table td:nth-child(4) { height: 60px; background: var(--bg-primary); border-top: 2px solid var(--terminal-green); - z-index: 100; + z-index: var(--z-dropdown); padding: 0; } diff --git a/assets/css/ticket.css b/assets/css/ticket.css index c8992b2..d83a7e4 100644 --- a/assets/css/ticket.css +++ b/assets/css/ticket.css @@ -1635,6 +1635,10 @@ body.dark-mode .editable { margin-top: 0.5rem; } +.upload-browse-btn { + margin-top: 1rem; +} + /* Progress Bar */ .progress-bar { width: 100%; @@ -1798,7 +1802,7 @@ body.dark-mode .editable { border-radius: 0; max-height: 200px; overflow-y: auto; - z-index: 1000; + z-index: var(--z-popover); display: none; min-width: 200px; box-shadow: 0 0 10px rgba(0, 255, 65, 0.3); @@ -1893,7 +1897,7 @@ body.dark-mode .editable { background: var(--bg-primary); border: 2px solid var(--terminal-green); min-width: 150px; - z-index: 100; + z-index: var(--z-dropdown); box-shadow: 0 0 10px rgba(0, 255, 65, 0.3); } @@ -2028,6 +2032,196 @@ body.dark-mode .editable { } } +/* ===== INLINE STYLE REPLACEMENTS ===== */ +/* These classes replace inline styles from TicketView.php */ + +.ticket-user-info { + font-size: 0.85rem; + color: var(--text-muted); + margin-top: 0.25rem; +} + +.ticket-assignment { + margin-top: 0.5rem; +} + +.ticket-assignment-label { + font-weight: 500; + margin-right: 0.5rem; +} + +.assignment-select { + padding: 0.25rem 0.5rem; + border-radius: 0; + border: 2px solid var(--terminal-green); +} + +/* Visibility settings section */ +.ticket-visibility-settings { + margin-top: 0.75rem; + padding-top: 0.75rem; + border-top: 1px solid var(--terminal-green); +} + +.visibility-settings-grid { + display: grid; + grid-template-columns: 1fr 2fr; + gap: 0.75rem; +} + +.visibility-groups-edit { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; +} + +.visibility-group-label { + display: flex; + align-items: center; + gap: 0.3rem; + cursor: pointer; +} + +/* Metadata labels */ +.metadata-label { + font-weight: 500; + display: block; + margin-bottom: 0.25rem; + color: var(--terminal-amber); + font-family: var(--font-mono); + font-size: 0.85rem; +} + +.metadata-label-cyan { + color: var(--terminal-cyan); +} + +/* Generic full-width select styling */ +.full-width-select { + width: 100%; + padding: 0.25rem 0.5rem; + border-radius: 0; + border: 2px solid var(--terminal-green); + background: var(--bg-primary); + color: var(--terminal-green); + font-family: var(--font-mono); +} + +/* Add dependency form */ +.add-dependency-form { + display: flex; + gap: 0.5rem; + flex-wrap: wrap; + align-items: center; +} + +.dependency-input { + flex: 1; + min-width: 150px; + padding: 0.5rem; + border: 2px solid var(--terminal-green); + background: var(--bg-primary); + color: var(--terminal-green); + font-family: var(--font-mono); +} + +.dependency-type-select { + padding: 0.5rem; + border: 2px solid var(--terminal-green); + background: var(--bg-primary); + color: var(--terminal-green); + font-family: var(--font-mono); +} + +/* Upload progress */ +.upload-progress { + margin-top: 1rem; +} + +.upload-status-text { + margin-top: 0.5rem; + color: var(--terminal-green); + font-family: var(--font-mono); + font-size: 0.85rem; +} + +/* Frame inner spacing */ +.frame-inner-spacing { + margin-bottom: 1rem; +} + +.frame-inner-spacing-top { + margin-top: 1rem; +} + +/* No groups message */ +.no-groups-message { + color: var(--text-muted); + font-size: 0.85rem; +} + +/* ===== INTERMEDIATE RESPONSIVE BREAKPOINTS ===== */ + +/* Large desktop (1200px+) */ +@media (min-width: 1200px) { + .ticket-container { + max-width: 1600px; + } + + .ticket-metadata-fields { + grid-template-columns: repeat(4, 1fr); + } + + .visibility-settings-grid { + grid-template-columns: 1fr 3fr; + } +} + +/* Medium desktop (900px - 1199px) */ +@media (min-width: 900px) and (max-width: 1199px) { + .ticket-container { + width: 95%; + max-width: 1200px; + } + + .ticket-metadata-fields { + grid-template-columns: repeat(3, 1fr); + } +} + +/* Tablet landscape (600px - 899px) */ +@media (min-width: 600px) and (max-width: 899px) { + .ticket-container { + width: 98%; + min-width: unset; + } + + .ticket-metadata-fields { + grid-template-columns: repeat(2, 1fr); + } + + .visibility-settings-grid { + grid-template-columns: 1fr; + } + + .header-controls { + flex-wrap: wrap; + } + + .tab-btn { + padding: 10px 18px; + font-size: 0.95em; + } + + .timeline-event { + margin-bottom: 1.25rem; + } + + .comment { + padding: 12px; + } +} + /* ===== COMPREHENSIVE TICKET PAGE MOBILE STYLES ===== */ @media (max-width: 768px) { /* Prevent iOS zoom on input focus */ @@ -2044,7 +2238,7 @@ body.dark-mode .editable { .user-header { position: sticky; top: 0; - z-index: 100; + z-index: var(--z-dropdown); padding: 0.5rem 0.75rem; } diff --git a/views/DashboardView.php b/views/DashboardView.php index ef9dcf6..ded9ec3 100644 --- a/views/DashboardView.php +++ b/views/DashboardView.php @@ -12,11 +12,11 @@ $nonce = SecurityHeadersMiddleware::getNonce(); Ticket Dashboard - + - - + + -
+
+ - + -