/* LREC 2026 — LLM Annotator. Tailwind handles most; this file adds tokens / modals / polish. */ [x-cloak] { display: none !important; } html { scroll-behavior: smooth; } body { -webkit-font-smoothing: antialiased; } kbd { display: inline-block; padding: 1px 5px; font-family: 'JetBrains Mono', monospace; font-size: 11px; background: #f3f4f6; border: 1px solid #d1d5db; border-radius: 4px; color: #374151; } /* ============================================================ Top bar pills ============================================================ */ .pill { display: inline-flex; align-items: center; gap: 0.4rem; padding: 0.4rem 0.7rem; background: #f9fafb; border: 1px solid #e5e7eb; border-radius: 8px; font-size: 12px; color: #374151; transition: all 0.15s; } .pill:hover { background: #f3f4f6; border-color: #d1d5db; } .pill-icon { font-size: 14px; } .pill-label { font-weight: 500; color: #6b7280; } .pill-value { font-weight: 600; color: #111827; } .pill-ok { background: #ecfdf5; border-color: #a7f3d0; color: #065f46; } .pill-ok .pill-label { color: #047857; } .pill-ok .pill-value { color: #064e3b; } .pill-warn { background: #fffbeb; border-color: #fcd34d; color: #92400e; } .pill-warn .pill-label { color: #b45309; } .pill-warn .pill-value { color: #78350f; } .pill-moe { background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 100%); border-color: #c4b5fd; } .pill-moe .pill-label { color: #6d28d9; font-weight: 700; } .pill-moe .pill-value { color: #4c1d95; } .pill-moe:hover { background: linear-gradient(135deg, #ede9fe 0%, #ddd6fe 100%); border-color: #a78bfa; } /* ============================================================ Buttons ============================================================ */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 0.4rem; padding: 0.5rem 0.9rem; border-radius: 8px; font-size: 13px; font-weight: 500; transition: all 0.12s; border: 1px solid transparent; cursor: pointer; user-select: none; } .btn-primary { background: #4f46e5; color: white; } .btn-primary:hover { background: #4338ca; box-shadow: 0 4px 12px rgba(79, 70, 229, 0.3); } .btn-primary:disabled { background: #c7d2fe; cursor: not-allowed; box-shadow: none; } .btn-secondary { background: white; border-color: #e5e7eb; color: #374151; } .btn-secondary:hover { background: #f9fafb; border-color: #d1d5db; } .btn-ghost { background: transparent; color: #6b7280; } .btn-ghost:hover { background: #f3f4f6; color: #111827; } .btn-icon { padding: 0.4rem; min-width: 32px; min-height: 32px; } /* ============================================================ Cards ============================================================ */ .card { background: white; border: 1px solid #e5e7eb; border-radius: 12px; padding: 1rem 1.1rem; } .card-title { font-size: 13px; font-weight: 600; color: #111827; margin-bottom: 0.6rem; } /* ============================================================ Tokens — the heart of the UI ============================================================ */ .tokens-flow { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: flex-start; } .token-base { display: inline-flex; flex-direction: column; align-items: stretch; padding: 0.35rem 0.6rem; border: 1.5px solid transparent; border-radius: 8px; font-size: 14px; cursor: pointer; transition: all 0.12s; min-width: 0; position: relative; text-align: center; line-height: 1.2; } .token-surface { font-family: 'Inter', system-ui, sans-serif; font-weight: 500; color: #111827; font-size: 15px; } .token-tag { margin-top: 2px; font-family: 'JetBrains Mono', monospace; font-size: 10px; font-weight: 500; line-height: 1.1; letter-spacing: 0.02em; opacity: 0.75; } /* states */ .token-pending { background: #f9fafb; border-color: #e5e7eb; } .token-pending:hover { background: #f3f4f6; border-color: #d1d5db; } .token-pending .token-tag { color: #9ca3af; } .token-done { background: #eef2ff; border-color: #c7d2fe; } .token-done:hover { background: #e0e7ff; border-color: #a5b4fc; } .token-done .token-tag { color: #4338ca; } .token-warn { background: #fffbeb; border-color: #fcd34d; } .token-warn:hover { background: #fef3c7; border-color: #fbbf24; } .token-warn .token-tag { color: #b45309; } .token-warn::after { content: '⚠'; position: absolute; top: -6px; right: -6px; background: #f59e0b; color: white; width: 16px; height: 16px; border-radius: 50%; font-size: 9px; display: flex; align-items: center; justify-content: center; border: 2px solid white; } .token-corrected { background: #ecfdf5; border-color: #6ee7b7; } .token-corrected:hover { background: #d1fae5; border-color: #34d399; } .token-corrected .token-tag { color: #047857; } .token-corrected::after { content: '✓'; position: absolute; top: -6px; right: -6px; background: #10b981; color: white; width: 16px; height: 16px; border-radius: 50%; font-size: 10px; font-weight: 700; display: flex; align-items: center; justify-content: center; border: 2px solid white; } .token-focus { box-shadow: 0 0 0 2px #6366f1; z-index: 1; } .token-selected { background: #ddd6fe !important; border-color: #8b5cf6 !important; } /* ============================================================ Status dots ============================================================ */ .dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; margin-right: 4px; } .dot-ok { background: #10b981; } .dot-warn { background: #f59e0b; } .dot-pending { background: #d1d5db; } /* ============================================================ Modals ============================================================ */ .modal-backdrop { position: fixed; inset: 0; background: rgba(15, 23, 42, 0.45); backdrop-filter: blur(2px); z-index: 60; display: flex; align-items: center; justify-content: center; padding: 1rem; } .modal-card { background: white; border-radius: 14px; width: 100%; max-height: 90vh; overflow-y: auto; box-shadow: 0 20px 50px rgba(15, 23, 42, 0.25); } .modal-header { display: flex; align-items: center; justify-content: space-between; padding: 0.85rem 1.2rem; border-bottom: 1px solid #e5e7eb; } .modal-footer { display: flex; align-items: center; justify-content: flex-end; gap: 0.6rem; padding: 0.8rem 1.2rem; border-top: 1px solid #e5e7eb; background: #fafafa; border-radius: 0 0 14px 14px; } /* ============================================================ Form bits ============================================================ */ .lbl { display: block; font-size: 11px; font-weight: 600; color: #6b7280; margin-bottom: 0.25rem; text-transform: uppercase; letter-spacing: 0.04em; } .input { width: 100%; padding: 0.5rem 0.7rem; border: 1px solid #e5e7eb; border-radius: 8px; font-size: 13px; background: white; transition: border-color 0.12s, box-shadow 0.12s; } .input:focus { outline: none; border-color: #6366f1; box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15); } textarea.input { font-family: 'JetBrains Mono', monospace; } /* ============================================================ Chips (used in token editor for enum values) ============================================================ */ .chips { display: flex; flex-wrap: wrap; gap: 0.3rem; } .chip { padding: 0.25rem 0.55rem; background: #f3f4f6; border: 1px solid #e5e7eb; border-radius: 999px; font-size: 12px; font-family: 'JetBrains Mono', monospace; font-weight: 500; color: #374151; cursor: pointer; transition: all 0.1s; } .chip:hover { background: #e5e7eb; } .chip-active { background: #4f46e5; border-color: #4f46e5; color: white; } .chip-sm { padding: 0.18rem 0.45rem; font-size: 11px; } /* ============================================================ Badges ============================================================ */ .badge { display: inline-block; padding: 1px 6px; border-radius: 999px; font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; } .badge-sandbox { background: #e0e7ff; color: #3730a3; } .badge-corrected { background: #d1fae5; color: #065f46; } .badge-uploaded { background: #fef3c7; color: #92400e; } /* ============================================================ Tables (in modals) ============================================================ */ .th { text-align: left; font-size: 11px; font-weight: 600; color: #6b7280; padding: 0.45rem 0.7rem; text-transform: uppercase; letter-spacing: 0.04em; } .td { padding: 0.45rem 0.7rem; vertical-align: top; } /* ============================================================ Preset cards ============================================================ */ .preset-card { padding: 0.7rem 0.9rem; border: 1.5px solid #e5e7eb; border-radius: 10px; text-align: left; background: white; cursor: pointer; transition: all 0.12s; } .preset-card:hover { border-color: #a5b4fc; background: #eef2ff; } .preset-card-active { border-color: #4f46e5; background: #eef2ff; box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15); } /* ============================================================ Spinner ============================================================ */ .spinner, .spinner-sm { display: inline-block; border: 2px solid rgba(255, 255, 255, 0.3); border-top-color: white; border-radius: 50%; animation: spin 0.7s linear infinite; } .spinner { width: 14px; height: 14px; } .spinner-sm { width: 11px; height: 11px; border-width: 2px; border-color: rgba(99, 102, 241, 0.3); border-top-color: #6366f1; } @keyframes spin { to { transform: rotate(360deg); } } /* ============================================================ Context menu ============================================================ */ .ctx-item { display: block; width: 100%; text-align: left; padding: 0.4rem 0.8rem; font-size: 13px; color: #374151; } .ctx-item:hover { background: #f3f4f6; } /* ============================================================ Toasts ============================================================ */ .toast { padding: 0.6rem 0.9rem; border-radius: 10px; background: #111827; color: white; font-size: 13px; box-shadow: 0 8px 24px rgba(15, 23, 42, 0.3); animation: slideIn 0.2s ease; max-width: 360px; } .toast-ok { background: #047857; } .toast-warn { background: #b45309; } .toast-error { background: #b91c1c; } @keyframes slideIn { from { transform: translateX(20px); opacity: 0; } to { transform: translateX(0); opacity: 1; } } /* ============================================================ Organization logos footer (small) ============================================================ */ .orgs-footer { border-top: 1px solid #e5e7eb; background: white; margin-top: 1.5rem; } .org-logo { max-width: 20%; max-height: 32px; width: auto; height: auto; object-fit: contain; opacity: 0.6; filter: saturate(0.85); transition: opacity 0.15s, filter 0.15s; } .org-logo:hover { opacity: 1; filter: saturate(1); } /* ============================================================ Prose for cheatsheet ============================================================ */ .prose h1, .prose h2, .prose h3 { font-weight: 600; margin: 0.8em 0 0.4em; color: #111827; } .prose h1 { font-size: 16px; } .prose h2 { font-size: 15px; } .prose h3 { font-size: 13px; } .prose p { margin: 0.4em 0; color: #374151; } .prose ul { margin: 0.4em 0 0.4em 1.2em; } .prose li { list-style: disc; margin: 0.15em 0; color: #374151; } .prose code { background: #f3f4f6; padding: 1px 4px; border-radius: 3px; font-size: 11px; } .prose strong { color: #111827; }