/* ===== TICKET PAGE SPECIFIC STYLES - TERMINAL EDITION ===== */ /* Import terminal variables (should be loaded from dashboard.css globally) */ /* This file uses the same CSS variables defined in dashboard.css */ /* Status colors for ticket page - TERMINAL STYLE */ .status-Open, [id="statusDisplay"].status-Open { background-color: transparent !important; color: var(--status-open) !important; padding: 8px 16px; border-radius: 0 !important; border: 2px solid var(--status-open) !important; font-weight: 500; text-transform: uppercase; font-size: 0.9em; letter-spacing: 0.5px; font-family: var(--font-mono); text-shadow: 0 0 5px var(--status-open), 0 0 10px var(--status-open); } .status-Open::before, [id="statusDisplay"].status-Open::before { content: '['; margin-right: 4px; } .status-Open::after, [id="statusDisplay"].status-Open::after { content: ']'; margin-left: 4px; } .status-In-Progress, [id="statusDisplay"].status-In-Progress { background-color: transparent !important; color: var(--status-in-progress) !important; padding: 8px 16px; border-radius: 0 !important; border: 2px solid var(--status-in-progress) !important; font-weight: 500; text-transform: uppercase; font-size: 0.9em; letter-spacing: 0.5px; min-width: 140px; white-space: nowrap; display: inline-block; font-family: var(--font-mono); text-shadow: 0 0 5px var(--status-in-progress), 0 0 10px var(--status-in-progress); } .status-In-Progress::before, [id="statusDisplay"].status-In-Progress::before { content: '['; margin-right: 4px; } .status-In-Progress::after, [id="statusDisplay"].status-In-Progress::after { content: ']'; margin-left: 4px; } .status-Closed, [id="statusDisplay"].status-Closed { background-color: transparent !important; color: var(--status-closed) !important; padding: 8px 16px; border-radius: 0 !important; border: 2px solid var(--status-closed) !important; font-weight: 500; text-transform: uppercase; font-size: 0.9em; letter-spacing: 0.5px; font-family: var(--font-mono); text-shadow: 0 0 5px var(--status-closed), 0 0 10px var(--status-closed); } .status-Closed::before, [id="statusDisplay"].status-Closed::before { content: '['; margin-right: 4px; } .status-Closed::after, [id="statusDisplay"].status-Closed::after { content: ']'; margin-left: 4px; } .status-Pending { background-color: transparent !important; color: var(--status-pending) !important; padding: 8px 16px; border-radius: 0 !important; border: 2px solid var(--status-pending) !important; font-weight: 500; text-transform: uppercase; font-size: 0.9em; letter-spacing: 0.5px; font-family: var(--font-mono); text-shadow: 0 0 5px var(--status-pending), 0 0 10px var(--status-pending); } .status-Pending::before { content: '[⏸'; margin-right: 4px; } .status-Pending::after { content: ']'; margin-left: 4px; } /* Base Layout Components - TERMINAL STYLE */ .ticket-container { width: 90%; height: auto !important; min-height: 900px !important; min-width: 800px; max-width: 1800px; margin: 40px auto; padding: 0; background: var(--bg-primary); border: 3px double var(--terminal-green); border-radius: 0; box-shadow: none; transition: border-color 0.3s ease; position: relative; font-family: var(--font-mono); } /* Compatibility with ascii-frame-outer - remove duplicate corners */ .ticket-container.ascii-frame-outer { padding: 0; } /* Remove old corner styles when using ascii-frame-outer (new frame system handles this) */ .ticket-container.ascii-frame-outer::before { content: '╔' !important; } .ticket-container.ascii-frame-outer::after { content: '╗' !important; } /* Priority-based border colors */ [data-priority="1"] { border-color: var(--priority-1); } [data-priority="1"]::before, [data-priority="1"]::after { color: var(--priority-1); } [data-priority="2"] { border-color: var(--priority-2); } [data-priority="2"]::before, [data-priority="2"]::after { color: var(--priority-2); } [data-priority="3"] { border-color: var(--priority-3); } [data-priority="3"]::before, [data-priority="3"]::after { color: var(--priority-3); } [data-priority="4"] { border-color: var(--priority-4); } [data-priority="4"]::before, [data-priority="4"]::after { color: var(--priority-4); } [data-priority="5"] { border-color: var(--priority-5); } [data-priority="5"]::before, [data-priority="5"]::after { color: var(--priority-5); } /* Header Components - TERMINAL STYLE */ .ticket-header { display: flex; flex-direction: column; margin-bottom: 30px; width: 100%; overflow-wrap: break-word; padding: 20px; border-bottom: 2px solid var(--terminal-green); background: var(--bg-secondary); position: relative; } .ticket-header::before { content: '═══════════════════════════════════════════════════════'; display: block; color: var(--terminal-green); font-family: var(--font-mono); font-size: 0.8rem; margin-bottom: 10px; opacity: 0.5; } .ticket-subheader { display: flex; justify-content: space-between; align-items: center; margin-top: 10px; } .ticket-details { margin-top: 30px; padding: 20px; background: var(--bg-secondary); border: 2px solid var(--terminal-green); border-radius: 0; } .header-controls { display: flex; gap: 15px; align-items: center; } /* Metadata Fields Grid (Priority, Category, Type) */ .ticket-metadata-fields { margin-top: 0.75rem; display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.75rem; } .metadata-field { display: flex; flex-direction: column; } .metadata-field label { font-weight: 500; display: block; margin-bottom: 0.25rem; color: var(--terminal-amber); font-family: var(--font-mono); font-size: 0.85rem; text-shadow: var(--glow-amber); } .metadata-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); cursor: pointer; transition: all 0.2s ease; } .metadata-select:hover { border-color: var(--terminal-amber); box-shadow: var(--glow-amber); } .metadata-select:focus { outline: none; border-color: var(--terminal-amber); box-shadow: 0 0 10px var(--terminal-amber); } .metadata-select:disabled { opacity: 0.6; cursor: not-allowed; border-color: var(--border-color); } .metadata-select:disabled:hover { border-color: var(--border-color); box-shadow: none; } /* Blinking cursor effect for active inputs */ .title-input[contenteditable="true"]::after, textarea[data-field="description"]:not(:disabled)::after { content: '█'; color: var(--terminal-green); animation: blink-cursor 1s step-end infinite; margin-left: 2px; } @keyframes blink-cursor { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } } /* Mobile: Stack metadata fields */ @media (max-width: 768px) { .ticket-metadata-fields { grid-template-columns: 1fr; gap: 0.5rem; } } .ticket-id { font-family: var(--font-mono); margin-right: 20px; color: var(--terminal-amber); text-shadow: var(--glow-amber); } .ticket-id::before { content: '[UUID: '; color: var(--terminal-green); } .ticket-id::after { content: ']'; color: var(--terminal-green); } .status-priority-group { display: flex; gap: 10px; align-items: center; margin-right: 15px; } .priority-indicator { padding: 4px 8px; border: 2px solid; border-radius: 0; font-weight: bold; font-family: var(--font-mono); } .priority-indicator::before { content: '['; margin-right: 2px; } .priority-indicator::after { content: ']'; margin-left: 2px; } /* Title Input Styles - TERMINAL */ .title-input { font-size: 1.2em; font-weight: bold; font-family: var(--font-mono); width: 100%; border: none; border-bottom: 2px solid transparent; border-radius: 0; padding: 8px 0; margin: 0; word-break: break-word; overflow-wrap: break-word; word-wrap: break-word; white-space: normal; display: block; background: transparent; color: var(--terminal-green); line-height: 1.4; min-height: 1.4em; outline: none; } .title-input[contenteditable="true"] { border-color: var(--border-color); background: var(--bg-primary); cursor: text; } .title-input[contenteditable="true"]:hover { border-color: #3b82f6; } .title-input[contenteditable="false"] { color: var(--text-primary); border: none; background: transparent; cursor: default; } /* Form Elements */ .detail-group { margin-bottom: 30px; padding: 15px; } .detail-group label { display: block; margin-bottom: 8px; color: var(--text-secondary); font-weight: 500; } /* Status/Priority row for CreateTicketView - 4 columns */ .status-priority-row { display: flex; gap: 1rem; flex-wrap: wrap; } .detail-quarter { flex: 1 1 calc(25% - 0.75rem); min-width: 150px; } .detail-quarter label { display: block; margin-bottom: 0.5rem; } .detail-quarter select { width: 100%; padding: 0.5rem; min-height: 40px; } .full-width { grid-column: 1 / -1; } .editable { padding: 10px; border: 1px solid var(--border-color); border-radius: 0; background: var(--bg-primary); color: var(--text-primary); transition: all 0.3s ease; } input.editable { width: calc(100% - 20px); box-sizing: border-box; } textarea.editable { width: calc(100% - 20px); min-height: 800px !important; height: auto !important; box-sizing: border-box; white-space: pre; font-family: monospace; line-height: 1.2; } #description-tab { min-height: 850px !important; height: auto !important; padding-bottom: 20px; } .editable:disabled { background: var(--bg-secondary); cursor: default; border-color: transparent; } /* Button Styles */ .btn { padding: 10px 20px; border: none; border-radius: 0; cursor: pointer; font-weight: 500; background: var(--bg-primary); color: var(--text-primary); transition: all 0.3s ease; } .btn.primary { background: #3b82f6; color: white; } .btn.active { background: #3b82f6; color: white; } .btn:hover { transform: translateY(-2px); box-shadow: 0 2px 4px rgba(0,0,0,0.1); } /* Comments Section - TERMINAL STYLE */ .comments-section { margin-top: 40px; padding: 20px; background: var(--bg-secondary); border: 2px solid var(--terminal-green); border-radius: 0; } /* Nested frame compatibility - remove border since ascii-frame-inner handles it */ .ascii-frame-inner .comments-section { border: none; padding: 0; margin-top: 0; } .comments-section h2 { font-family: var(--font-mono); color: var(--terminal-amber); text-shadow: var(--glow-amber); text-transform: uppercase; letter-spacing: 0.1em; } .comments-section h2::before { content: '╔═══ '; } .comments-section h2::after { content: ' ═══╗'; } .comment-form { margin-bottom: 20px; } .comment-form textarea { width: calc(100% - 20px); min-height: 100px; margin-bottom: 10px; padding: 10px; border-radius: 0; border: 2px solid var(--terminal-green); background: var(--bg-primary); color: var(--terminal-green); font-family: var(--font-mono); } .comment-form textarea::placeholder { color: rgba(0, 255, 65, 0.5); } .comment { background: var(--bg-primary); padding: 15px; border: 1px solid var(--terminal-green); border-radius: 0; margin-bottom: 1rem; position: relative; box-shadow: none; } /* Add corner decorations to individual comments */ .comment::before { content: '┌─'; position: absolute; top: -1px; left: -1px; color: var(--terminal-green); font-size: 1rem; line-height: 1; } .comment::after { content: '┐'; position: absolute; top: -1px; right: -1px; color: var(--terminal-green); font-size: 1rem; line-height: 1; } .comment-header { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 10px; padding-bottom: 8px; border-bottom: 1px solid var(--terminal-green); font-family: var(--font-mono); font-size: 0.9em; } .comment-user { font-weight: bold; color: var(--terminal-amber); } .comment-user::before { content: '> '; color: var(--terminal-green); } .comment-date { color: var(--terminal-cyan); font-size: 0.85em; } .comment-date::before { content: '['; color: var(--terminal-green); } .comment-date::after { content: ']'; color: var(--terminal-green); } .comment-edited { font-size: 0.85em; color: var(--terminal-amber); font-style: italic; margin-left: 0.5rem; } .comment-text { color: var(--terminal-green); font-family: var(--font-mono); line-height: 1.6; word-wrap: break-word; margin: 0; padding: 0; white-space: normal; } .comment-text p { margin: 0.5em 0; } .comment-text p:first-child { margin-top: 0; } .comment-text p:last-child { margin-bottom: 0; } .comment-controls { display: flex; justify-content: space-between; align-items: center; margin: 10px 0; } /* Comment Action Buttons (Edit/Delete) */ .comment-actions { display: flex; gap: 0.5rem; margin-left: auto; } .comment-action-btn { background: transparent; border: 1px solid var(--terminal-green); color: var(--terminal-green); padding: 0.25rem 0.5rem; font-size: 0.85rem; cursor: pointer; transition: all 0.2s ease; font-family: var(--font-mono); line-height: 1; } .comment-action-btn:hover { background: rgba(0, 255, 65, 0.1); } .comment-action-btn.edit-btn:hover { color: var(--terminal-amber); border-color: var(--terminal-amber); } .comment-action-btn.delete-btn:hover { color: var(--priority-1); border-color: var(--priority-1); } /* Comment Edit Form */ .comment.editing { background: rgba(0, 255, 65, 0.05); padding: 1rem; margin: -0.5rem; border: 1px dashed var(--terminal-amber); } .comment-edit-form { margin-top: 0.5rem; } .comment-edit-textarea { width: 100%; min-height: 100px; padding: 0.75rem; background: var(--bg-secondary); border: 2px solid var(--terminal-green); color: var(--terminal-green); font-family: var(--font-mono); font-size: 0.9rem; resize: vertical; } .comment-edit-textarea:focus { outline: none; border-color: var(--terminal-amber); box-shadow: 0 0 10px rgba(255, 176, 0, 0.3); } .comment-edit-controls { display: flex; justify-content: space-between; align-items: center; margin-top: 0.75rem; flex-wrap: wrap; gap: 0.5rem; } .markdown-toggle-small { display: flex; align-items: center; gap: 0.5rem; font-size: 0.85rem; color: var(--terminal-green); cursor: pointer; } .markdown-toggle-small input[type="checkbox"] { width: 18px; height: 18px; } .comment-edit-buttons { display: flex; gap: 0.5rem; } .btn-small { padding: 0.4rem 0.75rem !important; font-size: 0.85rem !important; min-height: auto !important; } /* Comment Tabs - TERMINAL STYLE */ .ticket-tabs { display: flex; gap: 0; margin: 20px 0; border-bottom: 2px solid var(--terminal-green); } .tab-btn { padding: 12px 24px; border: 2px solid var(--terminal-green); border-bottom: none; background: var(--bg-primary); border-radius: 0; cursor: pointer; font-weight: bold; font-size: 1em; font-family: var(--font-mono); color: var(--terminal-green); transition: all 0.3s ease; position: relative; margin-right: -2px; transition: all 0.3s ease; } .tab-btn::before { content: '[ '; color: var(--terminal-green); } .tab-btn::after { content: ' ]'; color: var(--terminal-green); } .tab-btn:hover { background: rgba(0, 255, 65, 0.05); color: var(--terminal-amber); } .tab-btn.active { background: var(--bg-secondary); color: var(--terminal-amber); border-color: var(--terminal-amber); text-shadow: var(--glow-amber); z-index: 1; } .tab-btn.active::after { content: ' ▼ ]'; } .tab-content { display: none; padding: 20px; border: 2px solid var(--terminal-green); border-top: none; background: var(--bg-secondary); } .tab-content.active { display: block; } /* Markdown Styles */ .markdown-preview { min-height: 100px; padding: 10px; border: 1px solid var(--border-color); border-radius: 0; background: var(--bg-primary); } .markdown-preview h1, .markdown-preview h2, .markdown-preview h3 { margin-top: 0; } .markdown-preview code { background: var(--bg-secondary); padding: 2px 4px; border-radius: 0; } .markdown-preview pre { background: var(--bg-secondary); padding: 10px; border-radius: 0; overflow-x: auto; } .markdown-toggles { display: flex; gap: 20px; } /* Toggle Switch */ .switch { position: relative; display: inline-block; width: 50px; height: 24px; } .switch input { opacity: 0; width: 0; height: 0; } .slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: var(--bg-secondary); transition: .4s; } .slider:before { position: absolute; content: ""; height: 16px; width: 16px; left: 4px; bottom: 4px; background-color: white; transition: .4s; } .slider.round { border-radius: 0; } .slider.round:before { border-radius: 0; } input:checked + .slider { background-color: #3b82f6; } input:checked + .slider:before { transform: translateX(26px); } .switch input:disabled + .slider { opacity: 0.5; cursor: not-allowed; } /* Footer */ .ticket-footer { margin-top: 30px; padding-top: 20px; border-top: 1px solid var(--border-color); } .back-btn { background: var(--bg-secondary); color: var(--text-primary); padding: 10px 20px; border-radius: 0; border: 1px solid var(--border-color); cursor: pointer; transition: background-color 0.3s ease; } .back-btn:hover { background: var(--border-color); } /* Activity Timeline Styles - ASCII TREE */ .timeline-container { padding: 1rem; max-width: 800px; font-family: var(--font-mono); } .timeline-event { display: flex; gap: 1rem; margin-bottom: 1.5rem; position: relative; } /* ASCII tree connector */ .timeline-event:not(:last-child)::before { content: '│'; position: absolute; left: 12px; top: 30px; bottom: -24px; color: var(--terminal-green); font-family: var(--font-mono); font-size: 1.2rem; line-height: 1.5rem; } /* Branch connector */ .timeline-event::after { content: '├──'; position: absolute; left: 0; top: 12px; color: var(--terminal-green); font-family: var(--font-mono); } .timeline-event:last-child::after { content: '└──'; } .timeline-icon { font-size: 1.2rem; flex-shrink: 0; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; margin-left: 30px; } .timeline-content { flex: 1; background: var(--bg-primary); padding: 12px 16px; border: 2px solid var(--terminal-green); border-radius: 0; position: relative; } /* Terminal box corner */ .timeline-content::before { content: '┌─'; position: absolute; top: -2px; left: -2px; color: var(--terminal-green); font-family: var(--font-mono); } .timeline-header { display: flex; gap: 0.5rem; align-items: center; margin-bottom: 0.5rem; font-family: var(--font-mono); } .timeline-header strong { color: var(--terminal-amber); } .timeline-header strong::before { content: '['; color: var(--terminal-green); } .timeline-header strong::after { content: ']'; color: var(--terminal-green); } .timeline-action { color: var(--terminal-green); font-size: 0.9rem; } .timeline-date { margin-left: auto; color: var(--terminal-cyan); font-size: 0.85rem; } .timeline-details { font-size: 0.9rem; color: var(--terminal-green); padding-top: 0.5rem; border-top: 1px solid var(--terminal-green); font-family: var(--font-mono); } body.dark-mode .timeline-content { --card-bg: #2d3748; --border-color: #444; --text-muted: #a0aec0; --text-secondary: #cbd5e0; background: #2d3748; color: #f7fafc; } body.dark-mode .timeline-header strong { color: #f7fafc; } body.dark-mode .timeline-action { color: #a0aec0; } body.dark-mode .timeline-date { color: #718096; } /* Status select dropdown */ .status-select { padding: 8px 16px; border-radius: 0; font-weight: 500; text-transform: uppercase; font-size: 0.9em; letter-spacing: 0.5px; border: 2px solid transparent; cursor: pointer; transition: all 0.2s ease; } .status-select:hover { opacity: 0.9; border-color: rgba(255, 255, 255, 0.3); } .status-select:focus { outline: none; border-color: rgba(255, 255, 255, 0.5); } /* Status colors for dropdown */ .status-select.status-open { background-color: var(--status-open) !important; color: white !important; } .status-select.status-in-progress { background-color: var(--status-in-progress) !important; color: #212529 !important; } .status-select.status-closed { background-color: var(--status-closed) !important; color: white !important; } .status-select.status-resolved { background-color: #28a745 !important; color: white !important; } /* Dropdown options inherit colors */ .status-select option { background-color: var(--bg-primary); color: var(--text-primary); padding: 8px; } body.dark-mode .status-select option { background-color: #2d3748; color: #f7fafc; } /* Dark mode for Activity tab and general improvements */ body.dark-mode .tab-content { color: var(--text-primary, #f7fafc); } body.dark-mode #activity-tab { background: var(--bg-secondary, #1a202c); color: var(--text-primary, #f7fafc); } body.dark-mode #activity-tab p { color: var(--text-primary, #f7fafc); } /* Comprehensive Dark Mode Fix - Ensure no white on white */ body.dark-mode { --bg-primary: #1a202c; --bg-secondary: #2d3748; --bg-tertiary: #4a5568; --text-primary: #e2e8f0; --text-secondary: #cbd5e0; --text-muted: #a0aec0; --border-color: #4a5568; --card-bg: #2d3748; } /* Ensure ticket container has dark background */ body.dark-mode .ticket-container { background: #1a202c !important; color: #e2e8f0 !important; } /* Ensure all ticket details sections are dark */ body.dark-mode .ticket-details { background: #1a202c !important; color: #e2e8f0 !important; } /* Ensure detail groups are dark */ body.dark-mode .detail-group { background: transparent !important; color: #e2e8f0 !important; } /* Ensure labels are visible */ body.dark-mode .detail-group label, body.dark-mode label { color: #cbd5e0 !important; } /* Fix textarea and input fields */ body.dark-mode textarea, body.dark-mode input[type="text"] { background: #2d3748 !important; color: #e2e8f0 !important; border-color: #4a5568 !important; } /* Ensure timeline event backgrounds are dark */ body.dark-mode .timeline-event { background: transparent !important; } /* Fix any remaining white text issues */ body.dark-mode .timeline-details { color: #cbd5e0 !important; background: transparent !important; } /* Fix comment sections */ body.dark-mode .comment { background: #2d3748 !important; color: #e2e8f0 !important; } body.dark-mode .comment-text { color: #e2e8f0 !important; } body.dark-mode .comment-header { color: #cbd5e0 !important; } /* Fix any form elements */ body.dark-mode select, body.dark-mode .editable { background: #2d3748 !important; color: #e2e8f0 !important; border-color: #4a5568 !important; } /* ===== RESPONSIVE DESIGN - TERMINAL EDITION ===== */ /* Tablet and smaller */ @media (max-width: 1024px) { .ticket-container { width: 95%; min-width: 600px; } /* Reduce timeline spacing */ .timeline-event { margin-bottom: 1rem; } } /* Mobile */ @media (max-width: 768px) { .ticket-container { width: 98%; min-width: unset; margin: 20px auto; padding: 0; } /* Hide ASCII corner decorations on mobile */ .ticket-container::before, .ticket-container::after { display: none; } /* Simplify ticket header */ .ticket-header::before { display: none; } .ticket-header { padding: 15px; } /* Stack header controls */ .header-controls { flex-direction: column; align-items: flex-start; } /* Reduce comment padding */ .comment { padding: 10px; } /* Simplify timeline on mobile */ .timeline-icon { margin-left: 20px; } .timeline-event::after { font-size: 0.9rem; } /* Smaller tabs */ .tab-btn { padding: 8px 16px; font-size: 0.9em; } /* Reduce glow effects */ .glow-text, [class*="glow-"] { text-shadow: 0 0 3px currentColor; } } /* Very small mobile */ @media (max-width: 480px) { .ticket-container { width: 100%; margin: 10px 0; } /* Remove timeline connectors on very small screens */ .timeline-event::before, .timeline-event::after { display: none; } .timeline-content::before { display: none; } .timeline-icon { margin-left: 0; } /* Stack tabs vertically */ .ticket-tabs { flex-direction: column; } .tab-btn { width: 100%; border: 2px solid var(--terminal-green); margin-bottom: 5px; } } /* ===== ATTACHMENT STYLES ===== */ /* Upload Zone */ .upload-zone { border: 3px dashed var(--terminal-green); border-radius: 0; padding: 2rem; text-align: center; cursor: pointer; transition: all 0.3s ease; background: var(--bg-primary); } .upload-zone:hover { border-color: var(--terminal-amber); background: rgba(0, 255, 65, 0.05); } .upload-zone.drag-over { border-color: var(--terminal-amber); background: rgba(241, 196, 15, 0.1); box-shadow: 0 0 20px rgba(241, 196, 15, 0.3); } .upload-zone-content { color: var(--terminal-green); font-family: var(--font-mono); } .upload-icon { font-size: 3rem; margin-bottom: 1rem; } .upload-hint { font-size: 0.85rem; color: var(--terminal-green-dim); margin-top: 0.5rem; } /* Progress Bar */ .progress-bar { width: 100%; height: 20px; border: 2px solid var(--terminal-green); background: var(--bg-primary); position: relative; overflow: hidden; } .progress-fill { height: 100%; background: var(--terminal-green); transition: width 0.3s ease; position: relative; } .progress-fill::after { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient( 90deg, transparent 0%, rgba(255, 255, 255, 0.2) 50%, transparent 100% ); animation: progress-shimmer 1.5s infinite; } @keyframes progress-shimmer { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } } /* Attachments Grid */ .attachments-grid { display: flex; flex-direction: column; gap: 0.75rem; } .attachment-item { display: flex; align-items: center; gap: 1rem; padding: 0.75rem 1rem; border: 1px solid var(--terminal-green); background: var(--bg-primary); transition: all 0.2s ease; } .attachment-item:hover { border-color: var(--terminal-amber); background: rgba(0, 255, 65, 0.05); } .attachment-icon { font-size: 1.5rem; flex-shrink: 0; } .attachment-info { flex: 1; min-width: 0; } .attachment-name { font-family: var(--font-mono); font-size: 0.95rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .attachment-name a { color: var(--terminal-green); text-decoration: none; } .attachment-name a:hover { color: var(--terminal-amber); text-decoration: underline; } .attachment-meta { font-size: 0.8rem; color: var(--terminal-green-dim); font-family: var(--font-mono); margin-top: 0.25rem; } .attachment-actions { display: flex; gap: 0.5rem; flex-shrink: 0; } .btn-small { padding: 0.25rem 0.5rem; font-size: 0.85rem; } .btn-danger { color: var(--priority-1); border-color: var(--priority-1); } .btn-danger:hover { background: var(--priority-1); color: white; } /* Mobile responsiveness for attachments */ @media (max-width: 768px) { .attachment-item { flex-wrap: wrap; } .attachment-info { flex-basis: calc(100% - 4rem); } .attachment-actions { flex-basis: 100%; justify-content: flex-end; margin-top: 0.5rem; } } /* ===== @MENTION HIGHLIGHTING STYLES ===== */ /* Mention styling in comments */ .mention { color: var(--terminal-cyan); background: rgba(0, 255, 255, 0.1); padding: 0.1rem 0.3rem; border-radius: 0; font-weight: 600; cursor: pointer; transition: all 0.2s ease; } .mention:hover { background: rgba(0, 255, 255, 0.2); text-shadow: 0 0 5px var(--terminal-cyan); } .mention::before { content: '@'; } /* Mention Autocomplete Dropdown */ .mention-autocomplete { position: absolute; background: var(--bg-primary); border: 2px solid var(--terminal-green); border-radius: 0; max-height: 200px; overflow-y: auto; z-index: 1000; display: none; min-width: 200px; box-shadow: 0 0 10px rgba(0, 255, 65, 0.3); } .mention-autocomplete.active { display: block; } .mention-option { padding: 0.5rem 1rem; cursor: pointer; font-family: var(--font-mono); color: var(--terminal-green); transition: all 0.2s ease; display: flex; align-items: center; gap: 0.5rem; } .mention-option:hover, .mention-option.selected { background: rgba(0, 255, 65, 0.1); color: var(--terminal-amber); } .mention-option .mention-username { font-weight: bold; } .mention-option .mention-displayname { color: var(--terminal-green-dim); font-size: 0.85rem; } /* ===== RICH TEXT EDITOR TOOLBAR ===== */ .editor-toolbar { display: flex; gap: 0.25rem; padding: 0.5rem; border: 2px solid var(--terminal-green); border-bottom: none; background: var(--bg-secondary); flex-wrap: wrap; } .editor-toolbar button { padding: 0.4rem 0.6rem; background: var(--bg-primary); border: 1px solid var(--terminal-green); color: var(--terminal-green); font-family: var(--font-mono); font-size: 0.85rem; cursor: pointer; transition: all 0.2s ease; min-width: 32px; } .editor-toolbar button:hover { background: rgba(0, 255, 65, 0.1); color: var(--terminal-amber); border-color: var(--terminal-amber); } .editor-toolbar button:active { background: rgba(0, 255, 65, 0.2); } .editor-toolbar .toolbar-separator { width: 1px; background: var(--terminal-green-dim); margin: 0 0.5rem; } /* Connect toolbar to textarea */ .editor-with-toolbar textarea { border-top: none; } /* ===== EXPORT BUTTON ===== */ .export-dropdown { position: relative; display: inline-block; } .export-dropdown-content { display: none; position: absolute; right: 0; background: var(--bg-primary); border: 2px solid var(--terminal-green); min-width: 150px; z-index: 100; box-shadow: 0 0 10px rgba(0, 255, 65, 0.3); } .export-dropdown:hover .export-dropdown-content { display: block; } .export-dropdown-content a { display: block; padding: 0.5rem 1rem; color: var(--terminal-green); text-decoration: none; font-family: var(--font-mono); transition: all 0.2s ease; } .export-dropdown-content a:hover { background: rgba(0, 255, 65, 0.1); color: var(--terminal-amber); } /* ===== ENHANCED MOBILE RESPONSIVE - TICKET PAGE ===== */ @media (max-width: 768px) { /* Prevent iOS zoom on input focus */ input[type="text"], input[type="email"], input[type="search"], textarea, select { font-size: 16px !important; } /* Touch-friendly button sizes */ .btn, button, .tab-btn { min-height: 44px; padding: 12px 16px; } /* Stack ticket metadata vertically */ .ticket-metadata-fields { grid-template-columns: 1fr !important; gap: 1rem; } .metadata-field { width: 100%; } /* Stack header controls */ .ticket-subheader { flex-direction: column; gap: 1rem; } .header-controls { width: 100%; flex-direction: column; } .status-priority-group { width: 100%; margin-right: 0; } .status-select { width: 100%; } /* Full width buttons */ #editButton { width: 100%; } /* Improve comment form */ .comment-form textarea { width: 100%; min-height: 120px; } .comment-controls { flex-direction: column; gap: 1rem; } .markdown-toggles { flex-direction: column; gap: 0.75rem; } /* Improve assignment dropdown */ .ticket-assignment { flex-direction: column; align-items: flex-start; } .assignment-select { width: 100%; min-height: 44px; } /* Full width tabs with better spacing */ .ticket-tabs { flex-wrap: wrap; } .tab-btn { flex: 1 1 auto; text-align: center; min-width: 100px; } /* Improve upload zone */ .upload-zone { padding: 1.5rem; } .upload-zone-content p { font-size: 0.9rem; } /* Improve timeline readability */ .timeline-header { flex-direction: column; align-items: flex-start; gap: 0.25rem; } .timeline-date { margin-left: 0; } } /* ===== COMPREHENSIVE TICKET PAGE MOBILE STYLES ===== */ @media (max-width: 768px) { /* Prevent iOS zoom on input focus */ input, select, textarea { font-size: 16px !important; } /* Add padding at bottom for potential mobile nav */ body { padding-bottom: 70px; } /* Better header on mobile */ .user-header { position: sticky; top: 0; z-index: 100; padding: 0.5rem 0.75rem; } .user-header-right .user-name { display: none; } .back-link { font-size: 0.9rem; padding: 0.5rem 0; min-height: 44px; display: inline-flex; align-items: center; } /* Ticket container */ .ticket-container { margin: 0.5rem; border-width: 2px; } .ascii-section-header { font-size: 0.9rem; padding: 0.5rem 0.75rem; } .ascii-content { padding: 0.5rem; } .ascii-frame-inner { padding: 0.75rem; } /* Better ticket header layout */ .ticket-header { flex-direction: column; align-items: flex-start; gap: 0.75rem; } .ticket-header h2 { font-size: 1.1rem; line-height: 1.3; word-break: break-word; } .ticket-subheader { width: 100%; } /* Ticket metadata fields - stack on mobile */ .ticket-metadata-fields { grid-template-columns: 1fr !important; gap: 0.75rem !important; } .metadata-field { display: flex; flex-direction: column; gap: 0.25rem; } .metadata-field label { font-size: 0.85rem !important; } .metadata-field select, .metadata-select { width: 100% !important; min-height: 48px !important; padding: 0.75rem !important; font-size: 16px !important; } /* Assignment select */ .ticket-assignment { display: flex; flex-direction: column; gap: 0.25rem; margin-top: 0.75rem !important; } .ticket-assignment label { font-size: 0.85rem; } .assignment-select, #assignedToSelect { width: 100% !important; min-height: 48px !important; padding: 0.75rem !important; font-size: 16px !important; } /* Ticket user info */ .ticket-user-info { font-size: 0.8rem !important; line-height: 1.4; } .ticket-id { font-size: 0.85rem; word-break: break-all; } /* Status display and select */ .status-display, #statusDisplay { display: block; width: 100%; text-align: center; margin: 0.5rem 0; } #statusSelect { width: 100%; min-height: 48px; font-size: 16px !important; } /* Full width title on mobile */ .ticket-title, .title-input { font-size: 1rem; word-break: break-word; } /* Better tabs on mobile */ .ticket-tabs { display: flex; flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch; gap: 0; } .tab-btn { flex: 0 0 auto; min-width: 100px; padding: 0.75rem 1rem; white-space: nowrap; min-height: 48px; } /* Description and comment sections */ .ticket-description, .comments-section { padding: 1rem; } /* Better comment input */ .comment-form textarea { min-height: 120px; font-size: 16px; } .comment-form .btn { width: 100%; min-height: 48px; margin-top: 0.5rem; } /* Markdown toolbar scroll */ .markdown-toolbar { overflow-x: auto; -webkit-overflow-scrolling: touch; flex-wrap: nowrap; } .markdown-toolbar button { min-width: 44px; min-height: 44px; flex-shrink: 0; } /* Comment styling */ .comment { padding: 1rem; } .comment-header { flex-direction: column; align-items: flex-start; gap: 0.25rem; } /* Dependencies list */ .dependency-item { flex-direction: column; align-items: flex-start; gap: 0.5rem; } .dependency-item .btn { align-self: flex-end; } /* Attachments grid */ .attachments-grid { grid-template-columns: 1fr; } .attachment-item { padding: 1rem; } /* Activity timeline */ .timeline-item { padding: 0.75rem; } .timeline-content { font-size: 0.9rem; } /* Status select */ #statusSelect { width: 100%; min-height: 48px; } /* Back link more prominent */ .back-link { display: inline-flex; align-items: center; padding: 0.5rem 1rem; min-height: 44px; } /* Comment actions on mobile */ .comment-header { flex-direction: column; align-items: flex-start; } .comment-actions { width: 100%; justify-content: flex-end; margin-top: 0.5rem; } .comment-action-btn { min-height: 44px; min-width: 44px; padding: 0.5rem; } .comment-edit-controls { flex-direction: column; gap: 0.75rem; } .comment-edit-buttons { width: 100%; } .comment-edit-buttons .btn { flex: 1; min-height: 44px; } /* CreateTicketView - Stack metadata fields */ .status-priority-row { flex-direction: column !important; gap: 1rem !important; } .detail-quarter { width: 100% !important; flex: none !important; } .detail-quarter select, .detail-quarter input { width: 100% !important; min-height: 48px !important; font-size: 16px !important; } /* Form inputs in CreateTicketView */ .detail-group input[type="text"], .detail-group textarea, .detail-group select { width: 100% !important; min-height: 48px !important; padding: 0.75rem !important; font-size: 16px !important; } .detail-group textarea { min-height: 150px !important; } /* Visibility groups */ .visibility-groups-list { flex-direction: column !important; } .visibility-groups-list label { min-height: 44px; padding: 0.5rem; background: rgba(0, 255, 65, 0.05); border-radius: 4px; } } /* Extra small screens for ticket page */ @media (max-width: 480px) { .ticket-id { font-size: 0.9rem; } .ticket-title { font-size: 1rem; } .tab-btn { font-size: 0.85rem; padding: 0.5rem 0.75rem; } .ticket-meta-item { flex-direction: column; align-items: flex-start; gap: 0.25rem; } .ticket-meta-value { text-align: left; width: 100%; } .ticket-meta-item select { max-width: 100%; width: 100%; } }