diff options
Diffstat (limited to 'web/src/pages/TicketDetailPage.module.css')
| -rw-r--r-- | web/src/pages/TicketDetailPage.module.css | 263 |
1 files changed, 263 insertions, 0 deletions
diff --git a/web/src/pages/TicketDetailPage.module.css b/web/src/pages/TicketDetailPage.module.css new file mode 100644 index 0000000..36f4781 --- /dev/null +++ b/web/src/pages/TicketDetailPage.module.css @@ -0,0 +1,263 @@ +.page { + display: flex; + flex-direction: column; + gap: var(--space-6); + max-width: 1100px; +} + +/* ── Header do ticket ──────────────────────────────────────────────────────── */ +.ticketHeader { + display: flex; + flex-direction: column; + gap: var(--space-3); +} + +.headerTop { + display: flex; + align-items: center; + justify-content: space-between; +} + +.ticketId { + font-size: var(--text-sm); + color: var(--color-text-muted); + font-variant-numeric: tabular-nums; +} + +.ticketTitle { + font-size: var(--text-2xl); + font-weight: 700; + color: var(--color-text-primary); + letter-spacing: -0.02em; + line-height: 1.3; +} + +.headerMeta { + display: flex; + align-items: center; + gap: var(--space-3); + flex-wrap: wrap; +} + +.metaDate { + font-size: var(--text-xs); + color: var(--color-text-muted); +} + +/* ── Layout 2 colunas ──────────────────────────────────────────────────────── */ +.layout { + display: grid; + grid-template-columns: 1fr 280px; + gap: var(--space-6); + align-items: start; +} + +.mainCol { + display: flex; + flex-direction: column; + gap: var(--space-5); +} + +.sidebar { + display: flex; + flex-direction: column; + gap: var(--space-4); + position: sticky; + top: calc(var(--header-height) + var(--space-4)); +} + +/* ── Seções ────────────────────────────────────────────────────────────────── */ +.sectionTitle { + font-size: var(--text-sm); + font-weight: 600; + color: var(--color-text-secondary); + text-transform: uppercase; + letter-spacing: 0.06em; + margin-bottom: var(--space-3); +} + +.description { + font-size: var(--text-sm); + color: var(--color-text-secondary); + line-height: 1.8; + white-space: pre-wrap; +} + +/* ── Timeline de comentários ───────────────────────────────────────────────── */ +.timeline { + display: flex; + flex-direction: column; + gap: var(--space-3); + margin-top: var(--space-3); +} + +.comment { + background: var(--color-surface); + border: 1px solid var(--color-border); + border-radius: var(--radius-lg); + padding: var(--space-4); + transition: border-color var(--transition-fast); +} + +.comment:hover { + border-color: var(--color-border-hover); +} + +/* Notas internas têm visual diferenciado */ +.commentInternal { + background: rgba(245, 158, 11, 0.05); + border-color: rgba(245, 158, 11, 0.2); +} + +.commentHeader { + display: flex; + align-items: center; + gap: var(--space-2); + margin-bottom: var(--space-2); +} + +.commentAvatar { + font-size: var(--text-base); + width: 28px; + text-align: center; + flex-shrink: 0; +} + +.commentAuthor { + font-size: var(--text-sm); + font-weight: 500; + color: var(--color-text-primary); +} + +.internalTag { + display: inline-block; + margin-left: var(--space-2); + font-size: var(--text-xs); + color: var(--color-waiting); + background: rgba(245, 158, 11, 0.12); + padding: 1px 6px; + border-radius: var(--radius-full); +} + +.commentDate { + font-size: var(--text-xs); + color: var(--color-text-muted); + margin-left: auto; + flex-shrink: 0; +} + +.commentContent { + font-size: var(--text-sm); + color: var(--color-text-secondary); + line-height: 1.7; + white-space: pre-wrap; + padding-left: calc(28px + var(--space-2)); +} + +.commentsLoading { + display: flex; + justify-content: center; + padding: var(--space-6); +} + +.noComments { + font-size: var(--text-sm); + color: var(--color-text-muted); + font-style: italic; + text-align: center; + padding: var(--space-6); +} + +/* ── Reply ─────────────────────────────────────────────────────────────────── */ +.replySection { + display: flex; + flex-direction: column; + gap: var(--space-3); +} + +.replyTextarea { + resize: vertical; + min-height: 100px; +} + +.replyActions { + display: flex; + align-items: center; + justify-content: space-between; +} + +.internalToggle { + display: flex; + align-items: center; + gap: var(--space-2); + font-size: var(--text-sm); + color: var(--color-text-secondary); + cursor: pointer; + user-select: none; +} + +/* ── Sidebar de informações ────────────────────────────────────────────────── */ +.statusActions { + display: flex; + flex-direction: column; + gap: var(--space-2); +} + +.statusBtn { + width: 100%; + justify-content: center; +} + +.infoList { + display: flex; + flex-direction: column; + gap: var(--space-2); +} + +.infoRow { + display: flex; + justify-content: space-between; + align-items: baseline; + gap: var(--space-2); +} + +.infoRow dt { + font-size: var(--text-xs); + color: var(--color-text-muted); + text-transform: uppercase; + letter-spacing: 0.05em; + flex-shrink: 0; +} + +.infoRow dd { + font-size: var(--text-sm); + color: var(--color-text-secondary); + text-align: right; +} + +/* ── Loading / Error states ────────────────────────────────────────────────── */ +.loadingWrapper { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: var(--space-4); + padding: var(--space-16); + color: var(--color-text-muted); + font-size: var(--text-sm); +} + +.errorWrapper { + display: flex; + flex-direction: column; + align-items: center; + gap: var(--space-4); + padding: var(--space-16); + text-align: center; +} + +.errorTitle { + font-size: var(--text-xl); + font-weight: 600; + color: var(--color-text-secondary); +} |