/* ── Base ─────────────────────────────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; line-height: 1.5; color: #1a1a2e; background: #f4f4f8; } /* ── App shell ────────────────────────────────────────────────────────────── */ .app-header { display: flex; align-items: center; justify-content: space-between; padding: 0.75rem 1.5rem; background: #1a1a2e; color: #fff; } .app-header h1 { font-size: 1.125rem; font-weight: 600; letter-spacing: -0.01em; } .app-header__right { display: flex; align-items: center; gap: 1.5rem; } .app-header nav a { color: rgba(255, 255, 255, 0.8); text-decoration: none; font-size: 0.875rem; } .app-header nav a:hover { color: #fff; } .app-main { max-width: 72rem; margin: 1.5rem auto; padding: 0 1.5rem; } /* ── Queue header ─────────────────────────────────────────────────────────── */ .queue-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1rem; } .queue-header h2 { font-size: 1.25rem; font-weight: 700; } /* ── Stats bar ────────────────────────────────────────────────────────────── */ .stats-bar { display: flex; gap: 0.75rem; margin-bottom: 1rem; } .stats-card { flex: 1; display: flex; flex-direction: column; align-items: center; padding: 0.75rem; border-radius: 0.5rem; background: #fff; border: 1px solid #e2e2e8; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04); } .stats-card__count { font-size: 1.5rem; font-weight: 700; line-height: 1; } .stats-card__label { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.04em; color: #6b7280; margin-top: 0.25rem; } .stats-card--pending .stats-card__count { color: #92400e; } .stats-card--approved .stats-card__count { color: #065f46; } .stats-card--edited .stats-card__count { color: #1e40af; } .stats-card--rejected .stats-card__count { color: #991b1b; } /* ── Filter tabs ──────────────────────────────────────────────────────────── */ .filter-tabs { display: flex; gap: 0; border-bottom: 2px solid #e2e2e8; margin-bottom: 1rem; } .filter-tab { padding: 0.5rem 1rem; border: none; background: none; font-size: 0.875rem; font-weight: 500; color: #6b7280; cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -2px; transition: color 0.15s, border-color 0.15s; } .filter-tab:hover { color: #374151; } .filter-tab--active { color: #1a1a2e; border-bottom-color: #1a1a2e; } /* ── Cards ────────────────────────────────────────────────────────────────── */ .card { background: #fff; border: 1px solid #e2e2e8; border-radius: 0.5rem; padding: 1.25rem; margin-bottom: 1rem; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04); } .card h2 { font-size: 1rem; font-weight: 600; margin-bottom: 0.5rem; } .card p { font-size: 0.875rem; color: #555; } /* ── Queue cards ──────────────────────────────────────────────────────────── */ .queue-list { display: flex; flex-direction: column; gap: 0.5rem; } .queue-card { display: block; background: #fff; border: 1px solid #e2e2e8; border-radius: 0.5rem; padding: 1rem 1.25rem; text-decoration: none; color: inherit; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04); transition: border-color 0.15s, box-shadow 0.15s; } .queue-card:hover { border-color: #a5b4fc; box-shadow: 0 2px 8px rgba(99, 102, 241, 0.1); } .queue-card__header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.375rem; } .queue-card__title { font-size: 0.9375rem; font-weight: 600; } .queue-card__summary { font-size: 0.8125rem; color: #6b7280; margin-bottom: 0.375rem; line-height: 1.4; } .queue-card__meta { display: flex; align-items: center; gap: 0.375rem; font-size: 0.75rem; color: #9ca3af; } .queue-card__separator { color: #d1d5db; } /* ── Status badges ────────────────────────────────────────────────────────── */ .badge { display: inline-block; padding: 0.125rem 0.5rem; border-radius: 9999px; font-size: 0.75rem; font-weight: 600; text-transform: capitalize; } .badge--pending { background: #fef3c7; color: #92400e; } .badge--approved { background: #d1fae5; color: #065f46; } .badge--edited { background: #dbeafe; color: #1e40af; } .badge--rejected { background: #fee2e2; color: #991b1b; } /* ── Buttons ──────────────────────────────────────────────────────────────── */ .btn { display: inline-flex; align-items: center; gap: 0.375rem; padding: 0.5rem 1rem; border: 1px solid #d1d5db; border-radius: 0.375rem; font-size: 0.8125rem; font-weight: 500; cursor: pointer; background: #fff; color: #374151; transition: background 0.15s, border-color 0.15s, opacity 0.15s; } .btn:hover { background: #f9fafb; border-color: #9ca3af; } .btn:disabled { opacity: 0.5; cursor: not-allowed; } .btn--approve { background: #059669; color: #fff; border-color: #059669; } .btn--approve:hover { background: #047857; } .btn--reject { background: #dc2626; color: #fff; border-color: #dc2626; } .btn--reject:hover { background: #b91c1c; } /* ── Mode toggle ──────────────────────────────────────────────────────────── */ .mode-toggle { display: flex; align-items: center; gap: 0.5rem; font-size: 0.8125rem; } .mode-toggle__dot { display: inline-block; width: 0.5rem; height: 0.5rem; border-radius: 50%; } .mode-toggle__dot--review { background: #10b981; } .mode-toggle__dot--auto { background: #f59e0b; } .mode-toggle__label { color: rgba(255, 255, 255, 0.9); white-space: nowrap; } .mode-toggle__switch { position: relative; width: 2.5rem; height: 1.25rem; background: #6b7280; border: none; border-radius: 9999px; cursor: pointer; transition: background 0.2s; flex-shrink: 0; } .mode-toggle__switch--active { background: #059669; } .mode-toggle__switch::after { content: ""; position: absolute; top: 0.125rem; left: 0.125rem; width: 1rem; height: 1rem; background: #fff; border-radius: 50%; transition: transform 0.2s; } .mode-toggle__switch--active::after { transform: translateX(1.25rem); } .mode-toggle__switch:disabled { opacity: 0.5; cursor: not-allowed; } /* ── Pagination ───────────────────────────────────────────────────────────── */ .pagination { display: flex; align-items: center; justify-content: center; gap: 1rem; margin-top: 1.25rem; padding: 0.75rem 0; } .pagination__info { font-size: 0.8125rem; color: #6b7280; } /* ── Detail page ──────────────────────────────────────────────────────────── */ .back-link { display: inline-block; font-size: 0.875rem; color: #6b7280; text-decoration: none; margin-bottom: 0.5rem; } .back-link:hover { color: #374151; } .detail-header { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1rem; } .detail-header h2 { font-size: 1.25rem; font-weight: 700; } .detail-card { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; } .detail-field { display: flex; flex-direction: column; gap: 0.125rem; } .detail-field label { font-size: 0.6875rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: #9ca3af; } .detail-field span, .detail-field p { font-size: 0.875rem; color: #374151; } .detail-field--full { grid-column: 1 / -1; } .detail-transcript { background: #f9fafb; padding: 0.75rem; border-radius: 0.375rem; font-size: 0.8125rem; line-height: 1.6; white-space: pre-wrap; max-height: 20rem; overflow-y: auto; } /* ── Action bar ───────────────────────────────────────────────────────────── */ .action-bar { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 1rem; } .action-error { background: #fef2f2; border: 1px solid #fecaca; border-radius: 0.375rem; padding: 0.5rem 0.75rem; color: #991b1b; font-size: 0.8125rem; margin-top: 0.75rem; margin-bottom: 0.75rem; } /* ── Edit form ────────────────────────────────────────────────────────────── */ .edit-form { margin-top: 1rem; } .edit-form h3 { font-size: 1rem; font-weight: 600; margin-bottom: 0.75rem; } .edit-field { margin-bottom: 0.75rem; } .edit-field label { display: block; font-size: 0.75rem; font-weight: 600; color: #6b7280; margin-bottom: 0.25rem; } .edit-field input, .edit-field textarea, .edit-field select { width: 100%; padding: 0.5rem 0.75rem; border: 1px solid #d1d5db; border-radius: 0.375rem; font-size: 0.875rem; font-family: inherit; line-height: 1.5; color: #374151; background: #fff; transition: border-color 0.15s; } .edit-field input:focus, .edit-field textarea:focus, .edit-field select:focus { outline: none; border-color: #6366f1; box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.15); } .edit-actions { display: flex; gap: 0.5rem; margin-top: 1rem; } /* ── Dialogs (modal overlays) ─────────────────────────────────────────────── */ .dialog-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.4); display: flex; align-items: center; justify-content: center; z-index: 100; } .dialog { background: #fff; border-radius: 0.75rem; padding: 1.5rem; width: 90%; max-width: 28rem; box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15); } .dialog h3 { font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem; } .dialog__hint { font-size: 0.8125rem; color: #6b7280; margin-bottom: 1rem; } .dialog__actions { display: flex; gap: 0.5rem; margin-top: 1rem; } /* ── Loading / empty states ───────────────────────────────────────────────── */ .loading { text-align: center; padding: 3rem 1rem; color: #6b7280; font-size: 0.875rem; } .empty-state { text-align: center; padding: 3rem 1rem; color: #9ca3af; font-size: 0.875rem; } .error-text { color: #dc2626; } /* ── Responsive ───────────────────────────────────────────────────────────── */ @media (max-width: 640px) { .stats-bar { flex-direction: column; gap: 0.5rem; } .stats-card { flex-direction: row; justify-content: space-between; } .detail-card { grid-template-columns: 1fr; } .queue-header { flex-direction: column; align-items: flex-start; gap: 0.5rem; } .action-bar { flex-direction: column; } .action-bar .btn { width: 100%; justify-content: center; } .app-header { flex-direction: column; gap: 0.5rem; } .app-header__right { width: 100%; justify-content: space-between; } }