/* ================================================================ dashboard.css — Tinker Tickets TDS v1.2 App-specific overrides. base.css handles all base components. ================================================================ */ /* ── Stats grid spacing ──────────────────────────────────────── */ .lt-stats-grid { margin-bottom: 1rem; } /* Priority row highlights */ .lt-row-critical td { background: rgba(255, 77, 77, 0.04); } .lt-row-warning td { background: rgba(255, 167, 38, 0.04); } /* Stat cards — clickable filter shortcuts */ .lt-stat-card[role="button"] { cursor: pointer; transition: border-color 0.15s ease, background 0.15s ease; } .lt-stat-card[role="button"]:hover, .lt-stat-card[role="button"]:focus-visible { border-color: var(--lt-text-primary, #00ff41); background: rgba(0, 255, 65, 0.06); outline: none; } .lt-stat-card.stat-critical .lt-stat-icon { color: var(--lt-danger, #ff4d4d); } .lt-stat-card.stat-open .lt-stat-icon { color: var(--lt-text-primary, #00ff41); } .lt-stat-card.stat-unassigned .lt-stat-icon { color: var(--lt-amber, #ffb000); } .lt-stat-card.stat-today .lt-stat-icon { color: var(--lt-cyan, #00ffff); } /* ── Active filters bar ──────────────────────────────────────── */ .active-filters-bar { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center; padding: 0.5rem 0; margin-bottom: 0.5rem; } .filter-badge { display: inline-flex; align-items: center; gap: 0.3rem; padding: 0.15rem 0.5rem; border: 1px solid var(--lt-border, #00ff41); font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--lt-text-primary, #00ff41); background: transparent; } .filter-remove { background: none; border: none; cursor: pointer; color: inherit; opacity: 0.6; font-size: 0.75rem; padding: 0 0.1rem; line-height: 1; } .filter-remove:hover { opacity: 1; } /* ── Bulk actions inline bar ─────────────────────────────────── */ .bulk-actions-inline { display: flex; align-items: center; gap: 0.5rem; padding: 0.4rem 0.75rem; border: 1px solid var(--lt-amber, #ffb000); margin-bottom: 0.5rem; font-size: 0.75rem; } /* ── Search form ─────────────────────────────────────────────── */ .lt-search-form { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; } /* ── Pagination ──────────────────────────────────────────────── */ .lt-pagination { display: flex; align-items: center; gap: 0.2rem; padding: 0.75rem 0; flex-wrap: wrap; } /* ── Sidebar expand stub ─────────────────────────────────────── */ .lt-sidebar-expand-btn { writing-mode: vertical-rl; text-orientation: mixed; padding: 0.75rem 0.3rem; cursor: pointer; border: 1px solid var(--lt-border, #00ff41); background: transparent; color: var(--lt-text-primary, #00ff41); font-family: inherit; font-size: 0.7rem; letter-spacing: 0.1em; align-self: flex-start; } /* ── Kanban empty state ──────────────────────────────────────── */ #tab-kanban .lt-section-body:empty::after { content: '— empty —'; display: block; padding: 1rem; text-align: center; font-size: 0.7rem; opacity: 0.4; } /* ── Dashboard-specific page header ─────────────────────────── */ .lt-page-header { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 0 0.75rem; margin-bottom: 0.25rem; } /* ── Col checkbox width ──────────────────────────────────────── */ .col-checkbox { width: 2rem; text-align: center; } .col-actions { width: auto; white-space: nowrap; } /* ── Admin container ─────────────────────────────────────────── */ .admin-container { max-width: 900px; } /* ── Create ticket meta grid ─────────────────────────────────── */ .create-ticket-meta-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; } @media (max-width: 600px) { .create-ticket-meta-grid { grid-template-columns: 1fr; } } /* ── Form hint text ──────────────────────────────────────────── */ .lt-form-hint { font-size: 0.7rem; opacity: 0.6; margin: 0.2rem 0 0; } .lt-form-hint--warn { color: var(--lt-amber, #ffb000); opacity: 1; } /* ── Visibility groups ───────────────────────────────────────── */ .visibility-groups-list { display: flex; flex-wrap: wrap; gap: 0.4rem; padding: 0.4rem 0; } /* ── Duplicate warning list ──────────────────────────────────── */ .duplicate-list { list-style: none; padding: 0.25rem 0 0; margin: 0; } .duplicate-list li { padding: 0.2rem 0; border-bottom: 1px solid rgba(255, 176, 0, 0.2); } .duplicate-list li:last-child { border-bottom: none; } /* ── Admin sections ──────────────────────────────────────────── */ .settings-section { margin-bottom: 1.5rem; } .settings-section:last-child { margin-bottom: 0; } /* ── Shortcuts list ──────────────────────────────────────────── */ .shortcuts-list { display: flex; flex-direction: column; gap: 0.35rem; } .shortcut-item { display: flex; align-items: center; gap: 0.75rem; } kbd { font-family: inherit; font-size: 0.7rem; padding: 0.1rem 0.35rem; border: 1px solid var(--lt-border, #00ff41); white-space: nowrap; } /* ── lt-msg variants ─────────────────────────────────────────── */ .lt-mb-md { margin-bottom: 1rem; } /* ── Kanban cards ────────────────────────────────────────────── */ .lt-kanban-card { padding: 0.6rem 0.75rem; border: 1px solid rgba(0, 255, 65, 0.2); margin-bottom: 0.4rem; cursor: pointer; transition: border-color 0.15s ease, background 0.15s ease; display: flex; flex-direction: column; gap: 0.35rem; } .lt-kanban-card:hover, .lt-kanban-card:focus-visible { border-color: var(--lt-text-primary, #00ff41); background: rgba(0, 255, 65, 0.04); outline: none; } .lt-kanban-card--p1 { border-left: 2px solid var(--lt-danger, #ff4d4d); } .lt-kanban-card--p2 { border-left: 2px solid var(--lt-amber, #ffb000); } .lt-kanban-card--p3 { border-left: 2px solid var(--lt-cyan, #00ffff); } .lt-kanban-card--p4 { border-left: 2px solid rgba(0, 255, 65, 0.4); } .lt-kanban-card--p5 { border-left: 2px solid rgba(0, 255, 65, 0.2); } .lt-kanban-card-header { display: flex; justify-content: space-between; align-items: center; } .lt-kanban-card-title { font-size: 0.78rem; line-height: 1.35; font-weight: 600; word-break: break-word; } .lt-kanban-card-footer { display: flex; justify-content: space-between; align-items: center; margin-top: 0.1rem; } .lt-kanban-assignee { width: 1.5rem; height: 1.5rem; display: inline-flex; align-items: center; justify-content: center; border: 1px solid rgba(0, 255, 65, 0.35); font-size: 0.6rem; font-weight: 700; flex-shrink: 0; } /* ── Mobile sidebar overlay ──────────────────────────────────── */ .mobile-sidebar-overlay { display: none; position: fixed; inset: 0; background: rgba(0, 0, 0, 0.6); z-index: 199; } .mobile-sidebar-overlay.active { display: block; } /* ── Mobile filter toggle button ─────────────────────────────── */ .mobile-filter-toggle { display: none; width: 100%; padding: 0.5rem 0.75rem; margin-bottom: 0.5rem; background: transparent; border: 1px solid rgba(0, 255, 65, 0.3); color: var(--lt-text-primary, #00ff41); font-family: inherit; font-size: 0.75rem; letter-spacing: 0.05em; cursor: pointer; text-align: left; } /* ── Ticket preview popup ────────────────────────────────────── */ .ticket-preview-popup { position: fixed; z-index: 9999; background: var(--lt-surface, #0a0e14); border: 1px solid rgba(0, 255, 65, 0.4); padding: 0.75rem; min-width: 280px; max-width: 360px; font-size: 0.75rem; pointer-events: auto; box-shadow: 0 4px 20px rgba(0,0,0,0.5); } .ticket-preview-popup .preview-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.4rem; } .ticket-preview-popup .preview-id { color: var(--lt-cyan, #00ffff); font-weight: 700; } .ticket-preview-popup .preview-title { font-weight: 600; margin-bottom: 0.4rem; } .ticket-preview-popup .preview-meta { opacity: 0.7; display: flex; flex-direction: column; gap: 0.1rem; } .ticket-preview-popup .preview-footer { margin-top: 0.4rem; opacity: 0.5; font-size: 0.65rem; } /* ── Responsive ──────────────────────────────────────────────── */ @media (max-width: 768px) { .lt-page-header { flex-direction: column; align-items: flex-start; gap: 0.5rem; } .lt-stats-grid { grid-template-columns: repeat(2, 1fr); } .mobile-filter-toggle { display: block; } .lt-sidebar.mobile-open { transform: translateX(0); } } @media (max-width: 480px) { .lt-stats-grid { grid-template-columns: 1fr; } } /* ── Team Workload Panel ─────────────────────────────────────── */ .workload-panel summary { user-select: none; } .workload-panel[open] summary span:first-child { display: inline-block; transform: rotate(90deg); } .workload-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 0.5rem; } .workload-item { display: flex; align-items: center; gap: 0.5rem; } .workload-info { flex: 1; min-width: 0; } .workload-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .workload-count { min-width: 1.5rem; text-align: right; flex-shrink: 0; } /* Loading overlay — wraps lt-spinner for element-level loading states */ .has-lt-overlay { position: relative; } .lt-loading-overlay { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 0.5rem; background: rgba(var(--bg-primary-rgb, 10,10,10), 0.75); z-index: 10; border-radius: inherit; } .lt-loading-text { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-muted); }