Spaces:
Running
Running
| :root { | |
| --bg-color: #0f172a; | |
| --text-color: #f1f5f9; | |
| --pane-bg: #1e293b; | |
| --accent: #3b82f6; | |
| --accent-hover: #2563eb; | |
| --border-color: #334155; | |
| --success: #10b981; | |
| --error: #ef4444; | |
| --surface: #334155; | |
| --nav-height: 56px; | |
| } | |
| * { | |
| box-sizing: border-box; | |
| } | |
| body { | |
| margin: 0; | |
| padding: 0; | |
| font-family: 'Inter', ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; | |
| background-color: var(--bg-color); | |
| color: var(--text-color); | |
| display: flex; | |
| height: 100vh; | |
| overflow: hidden; | |
| } | |
| h2, | |
| h3, | |
| h4 { | |
| margin-top: 0; | |
| color: #f8fafc; | |
| } | |
| /* ββ Layout βββββββββββββββββββββββββββββββββββββββ */ | |
| /* ββ App Wrapper & Top Bar ββββββββββββββββββββββ */ | |
| .app-wrapper { | |
| display: flex; | |
| flex-direction: column; | |
| width: 100%; | |
| height: 100vh; | |
| } | |
| .top-bar { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| padding: 6px 20px; | |
| background-color: var(--pane-bg); | |
| border-bottom: 1px solid var(--border-color); | |
| flex-shrink: 0; | |
| height: 40px; | |
| } | |
| .top-bar-title { | |
| font-weight: 700; | |
| font-size: 0.85rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.08em; | |
| color: var(--accent); | |
| } | |
| .top-bar-user { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| } | |
| .user-badge { | |
| font-size: 0.8rem; | |
| font-weight: 600; | |
| color: var(--success); | |
| background: rgba(16, 185, 129, 0.1); | |
| padding: 3px 10px; | |
| border-radius: 12px; | |
| border: 1px solid rgba(16, 185, 129, 0.3); | |
| } | |
| .btn-login { | |
| font-size: 0.8rem; | |
| font-weight: 600; | |
| color: var(--text-color); | |
| background: var(--accent); | |
| padding: 4px 12px; | |
| border-radius: 6px; | |
| text-decoration: none; | |
| transition: background 0.2s; | |
| } | |
| .btn-login:hover { | |
| background: var(--accent-hover); | |
| } | |
| /* ββ Login Gate βββββββββββββββββββββββββββββββββ */ | |
| .login-gate { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 100%; | |
| height: 100vh; | |
| background: var(--bg-color); | |
| } | |
| .login-card { | |
| text-align: center; | |
| background: var(--pane-bg); | |
| border: 1px solid var(--border-color); | |
| border-radius: 16px; | |
| padding: 48px 40px; | |
| max-width: 420px; | |
| } | |
| .login-card h1 { | |
| font-size: 1.5rem; | |
| margin: 0 0 12px; | |
| color: var(--text-color); | |
| } | |
| .login-card p { | |
| color: #94a3b8; | |
| font-size: 0.9rem; | |
| margin: 0 0 24px; | |
| } | |
| .btn-login-large { | |
| display: inline-block; | |
| font-size: 1rem; | |
| font-weight: 700; | |
| color: #fff; | |
| background: var(--accent); | |
| padding: 12px 28px; | |
| border-radius: 8px; | |
| border: none; | |
| cursor: pointer; | |
| text-decoration: none; | |
| transition: background 0.2s; | |
| } | |
| .btn-login-large:hover { | |
| background: var(--accent-hover); | |
| } | |
| .login-note { | |
| font-size: 0.75rem ; | |
| color: #64748b ; | |
| margin-top: 16px ; | |
| } | |
| .container { | |
| display: flex; | |
| width: 100%; | |
| flex: 1; | |
| flex-wrap: wrap; | |
| overflow: hidden; | |
| } | |
| /* ββ Progress Bar ββββββββββββββββββββββββββββββ */ | |
| .top-bar-right { | |
| display: flex; | |
| align-items: center; | |
| gap: 16px; | |
| } | |
| .progress-container { | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| } | |
| .progress-container::before { | |
| content: 'Progress:'; | |
| font-size: 0.72rem; | |
| font-weight: 600; | |
| color: #64748b; | |
| margin-right: 2px; | |
| } | |
| .progress-pills { | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| } | |
| .progress-pill { | |
| display: flex; | |
| align-items: center; | |
| gap: 5px; | |
| font-size: 0.75rem; | |
| } | |
| .pill-icon { | |
| font-size: 0.7rem; | |
| } | |
| .pill-label { | |
| color: #64748b; | |
| font-weight: 500; | |
| } | |
| .pill-value { | |
| color: var(--text-color); | |
| font-weight: 700; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .pill-value.pill-complete { | |
| color: var(--success); | |
| } | |
| .pill-divider { | |
| width: 1px; | |
| height: 14px; | |
| background: var(--border-color); | |
| } | |
| /* ββ Leaderboard βββββββββββββββββββββββββββββββ */ | |
| .btn-leaderboard { | |
| background: none; | |
| border: 1px solid var(--border-color); | |
| color: var(--text-color); | |
| padding: 3px 10px; | |
| border-radius: 6px; | |
| font-size: 0.72rem; | |
| cursor: pointer; | |
| transition: all 0.2s; | |
| } | |
| .btn-leaderboard:hover { | |
| background: var(--surface); | |
| border-color: var(--accent); | |
| } | |
| .leaderboard-modal { | |
| position: fixed; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%); | |
| z-index: 1001; | |
| background: var(--pane-bg); | |
| border: 1px solid var(--border-color); | |
| border-radius: 16px; | |
| width: 480px; | |
| max-height: 70vh; | |
| display: flex; | |
| flex-direction: column; | |
| box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5); | |
| } | |
| .leaderboard-header { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| padding: 16px 20px; | |
| border-bottom: 1px solid var(--border-color); | |
| } | |
| .leaderboard-header h3 { | |
| margin: 0; | |
| font-size: 1rem; | |
| } | |
| .leaderboard-header-actions { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| } | |
| .btn-refresh { | |
| background: none; | |
| border: 1px solid var(--border-color); | |
| color: var(--text-color); | |
| width: 28px; | |
| height: 28px; | |
| border-radius: 6px; | |
| cursor: pointer; | |
| font-size: 0.8rem; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| transition: all 0.2s; | |
| } | |
| .btn-refresh:hover:not(:disabled) { | |
| background: var(--surface); | |
| border-color: var(--accent); | |
| } | |
| .btn-refresh:disabled { | |
| opacity: 0.5; | |
| cursor: wait; | |
| } | |
| .leaderboard-body { | |
| padding: 12px 20px; | |
| overflow-y: auto; | |
| flex: 1; | |
| } | |
| .leaderboard-loading { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 10px; | |
| padding: 30px; | |
| color: #94a3b8; | |
| } | |
| .leaderboard-empty { | |
| text-align: center; | |
| color: #94a3b8; | |
| padding: 30px; | |
| } | |
| .leaderboard-table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| font-size: 0.8rem; | |
| } | |
| .leaderboard-table th { | |
| text-align: left; | |
| padding: 6px 8px; | |
| color: #64748b; | |
| font-weight: 600; | |
| font-size: 0.72rem; | |
| border-bottom: 1px solid var(--border-color); | |
| } | |
| .leaderboard-table td { | |
| padding: 8px 8px; | |
| border-bottom: 1px solid var(--border-color); | |
| } | |
| .leaderboard-table tr:last-child td { | |
| border-bottom: none; | |
| } | |
| .rank-cell { | |
| font-size: 1rem; | |
| text-align: center; | |
| width: 32px; | |
| } | |
| .annotator-cell { | |
| font-weight: 600; | |
| } | |
| .score-cell { | |
| font-weight: 700; | |
| color: var(--accent); | |
| } | |
| .stat-verified { | |
| font-weight: 600; | |
| } | |
| .stat-detail { | |
| font-size: 0.65rem; | |
| color: #64748b; | |
| } | |
| .rank-1 { | |
| background: rgba(255, 215, 0, 0.06); | |
| } | |
| .rank-2 { | |
| background: rgba(192, 192, 192, 0.06); | |
| } | |
| .rank-3 { | |
| background: rgba(205, 127, 50, 0.06); | |
| } | |
| .leaderboard-footer { | |
| padding: 8px 20px; | |
| border-top: 1px solid var(--border-color); | |
| font-size: 0.65rem; | |
| color: #64748b; | |
| text-align: center; | |
| } | |
| .pane { | |
| flex: 1; | |
| padding: 20px 24px; | |
| display: flex; | |
| flex-direction: column; | |
| /* Both panes are non-scrollable β content must fit */ | |
| height: calc(100vh - var(--nav-height)); | |
| overflow: hidden; | |
| } | |
| .left-pane { | |
| border-right: 1px solid var(--border-color); | |
| background-color: #020617; | |
| } | |
| .right-pane { | |
| background-color: var(--pane-bg); | |
| overflow-y: auto; | |
| } | |
| .pane-header { | |
| flex-shrink: 0; | |
| margin-bottom: 12px; | |
| } | |
| .pane-header h2 { | |
| margin-bottom: 8px; | |
| } | |
| /* ββ Document Selector ββββββββββββββββββββββββββββ */ | |
| .navigation-controls { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| } | |
| .select-group { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| } | |
| .select-group label { | |
| font-size: 0.75rem; | |
| font-weight: 600; | |
| color: #94a3b8; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| .select-group select { | |
| background-color: var(--surface); | |
| color: var(--text-color); | |
| border: 1px solid var(--border-color); | |
| border-radius: 6px; | |
| padding: 4px 8px; | |
| font-size: 0.75rem; | |
| cursor: pointer; | |
| transition: border-color 0.2s; | |
| max-width: 280px; | |
| } | |
| .select-group select:hover, | |
| .select-group select:focus { | |
| border-color: var(--accent); | |
| outline: none; | |
| } | |
| /* ββ PDF Viewer βββββββββββββββββββββββββββββββββββ */ | |
| .pdf-container { | |
| flex: 1; | |
| display: flex; | |
| flex-direction: column; | |
| position: relative; | |
| min-height: 0; | |
| } | |
| .pdf-frame { | |
| flex: 1; | |
| width: 100%; | |
| min-height: 0; | |
| border: none; | |
| background: white; | |
| border-radius: 12px; | |
| box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); | |
| } | |
| .pdf-loading, | |
| .pdf-error { | |
| flex: 1; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| background-color: var(--surface); | |
| border-radius: 12px; | |
| color: #94a3b8; | |
| gap: 8px; | |
| } | |
| .pdf-loading p, | |
| .pdf-error p { | |
| margin: 0; | |
| } | |
| .pdf-loading-hint, | |
| .pdf-error-hint { | |
| font-size: 0.75rem; | |
| color: #64748b; | |
| } | |
| .pdf-placeholder { | |
| flex: 1; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| background-color: var(--surface); | |
| border-radius: 12px; | |
| color: #94a3b8; | |
| } | |
| /* ββ Bottom Navigation ββββββββββββββββββββββββββββ */ | |
| .bottom-nav { | |
| position: fixed; | |
| bottom: 0; | |
| left: 0; | |
| right: 0; | |
| height: var(--nav-height); | |
| background-color: #020617; | |
| border-top: 1px solid var(--border-color); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| z-index: 100; | |
| } | |
| .page-navigator { | |
| display: flex; | |
| align-items: center; | |
| gap: 16px; | |
| } | |
| .page-nav-group { | |
| display: flex; | |
| gap: 4px; | |
| } | |
| .page-indicator { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 2px; | |
| min-width: 100px; | |
| text-align: center; | |
| } | |
| .page-indicator strong { | |
| font-size: 1.1rem; | |
| color: #f8fafc; | |
| } | |
| .mention-dot { | |
| color: #10b981; | |
| font-size: 0.6rem; | |
| margin-left: 4px; | |
| vertical-align: middle; | |
| animation: pulse-dot 2s ease-in-out infinite; | |
| } | |
| @keyframes pulse-dot { | |
| 0%, | |
| 100% { | |
| opacity: 1; | |
| } | |
| 50% { | |
| opacity: 0.4; | |
| } | |
| } | |
| .page-count { | |
| font-size: 0.75rem; | |
| color: #64748b; | |
| } | |
| .btn-nav { | |
| background-color: var(--surface); | |
| color: var(--text-color); | |
| padding: 10px 20px; | |
| font-weight: 600; | |
| font-size: 0.9rem; | |
| border-radius: 8px; | |
| border: 1px solid var(--border-color); | |
| transition: all 0.2s; | |
| } | |
| .btn-nav.btn-jump { | |
| padding: 10px 12px; | |
| font-size: 0.8rem; | |
| } | |
| .btn-nav:hover:not(:disabled) { | |
| background-color: var(--accent); | |
| border-color: var(--accent); | |
| transform: translateY(-1px); | |
| } | |
| .btn-nav:disabled { | |
| opacity: 0.3; | |
| cursor: not-allowed; | |
| } | |
| /* ββ Annotator Header βββββββββββββββββββββββββββββ */ | |
| .annotator-container { | |
| display: flex; | |
| flex-direction: column; | |
| flex: 1; | |
| min-height: 0; | |
| } | |
| .annotator-header { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 16px; | |
| flex-shrink: 0; | |
| margin-bottom: 12px; | |
| } | |
| .annotator-header h2 { | |
| margin: 0; | |
| } | |
| .annotator-actions { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 6px; | |
| } | |
| /* ββ Markdown Content βββββββββββββββββββββββββββββ */ | |
| .markdown-content { | |
| background-color: #2dd4bf10; | |
| padding: 20px; | |
| border-radius: 12px; | |
| line-height: 1.6; | |
| border: 1px solid #2dd4bf30; | |
| font-size: 0.95rem; | |
| flex: 1; | |
| min-height: 0; | |
| overflow-y: auto; | |
| } | |
| .markdown-content-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 12px; | |
| flex-shrink: 0; | |
| } | |
| .markdown-content-header h3 { | |
| margin: 0; | |
| font-size: 0.9rem; | |
| } | |
| .dataset-count { | |
| background-color: #2dd4bf20; | |
| color: #2dd4bf; | |
| padding: 4px 10px; | |
| border-radius: 20px; | |
| font-size: 0.75rem; | |
| font-weight: 600; | |
| } | |
| /* ββ Dataset Legend βββββββββββββββββββββββββββββββ */ | |
| .dataset-legend { | |
| display: flex; | |
| gap: 12px; | |
| flex-wrap: wrap; | |
| flex-shrink: 0; | |
| margin-bottom: 8px; | |
| } | |
| .legend-item { | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| font-size: 0.75rem; | |
| color: #94a3b8; | |
| padding: 4px 10px; | |
| border-radius: 6px; | |
| background-color: #1e293b; | |
| border: 1px solid; | |
| } | |
| .legend-dot { | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 50%; | |
| flex-shrink: 0; | |
| } | |
| /* ββ Highlight marks ββββββββββββββββββββββββββββββ */ | |
| .markdown-preview mark { | |
| transition: all 0.15s ease; | |
| } | |
| .markdown-preview mark:hover { | |
| filter: brightness(1.3); | |
| transform: scale(1.02); | |
| display: inline-block; | |
| } | |
| .markdown-preview { | |
| color: #cbd5e1; | |
| } | |
| .markdown-preview h1, | |
| .markdown-preview h2, | |
| .markdown-preview h3, | |
| .markdown-preview h4 { | |
| color: #e2e8f0; | |
| margin-top: 1.2em; | |
| margin-bottom: 0.4em; | |
| } | |
| .markdown-preview p { | |
| margin-bottom: 0.8em; | |
| } | |
| .markdown-preview ul, | |
| .markdown-preview ol { | |
| margin-bottom: 0.8em; | |
| padding-left: 20px; | |
| } | |
| .markdown-preview li { | |
| margin-bottom: 0.2em; | |
| } | |
| .markdown-preview strong, | |
| .markdown-preview b { | |
| color: #e2e8f0; | |
| font-weight: 600; | |
| } | |
| .markdown-preview pre { | |
| background-color: #0f172a; | |
| padding: 12px; | |
| border-radius: 6px; | |
| overflow-x: auto; | |
| border: 1px solid var(--border-color); | |
| } | |
| .markdown-preview code { | |
| font-family: monospace; | |
| background-color: #1e293b; | |
| padding: 2px 4px; | |
| border-radius: 4px; | |
| font-size: 0.9em; | |
| color: #cbd5e1; | |
| } | |
| .markdown-preview table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| margin-bottom: 1em; | |
| } | |
| .markdown-preview th, | |
| .markdown-preview td { | |
| border: 1px solid var(--border-color); | |
| padding: 8px; | |
| text-align: left; | |
| } | |
| .markdown-preview th { | |
| background-color: #334155; | |
| color: #e2e8f0; | |
| } | |
| .markdown-content hr { | |
| border: 0; | |
| height: 1px; | |
| background: var(--border-color); | |
| margin: 16px 0; | |
| } | |
| .text-muted { | |
| color: #94a3b8; | |
| } | |
| /* ββ Buttons ββββββββββββββββββββββββββββββββββββββ */ | |
| .btn { | |
| border: none; | |
| padding: 10px 18px; | |
| font-size: 14px; | |
| border-radius: 8px; | |
| cursor: pointer; | |
| font-weight: 600; | |
| transition: all 0.2s ease; | |
| } | |
| .btn-primary { | |
| background-color: var(--accent); | |
| color: #ffffff; | |
| box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1); | |
| } | |
| .btn-primary:hover { | |
| background-color: var(--accent-hover); | |
| transform: translateY(-1px); | |
| } | |
| .btn-primary:active { | |
| transform: translateY(0); | |
| } | |
| .btn-secondary { | |
| background-color: var(--surface); | |
| color: var(--text-color); | |
| } | |
| .btn-secondary:hover { | |
| background-color: #475569; | |
| } | |
| /* ββ Annotations Side Panel βββββββββββββββββββββββ */ | |
| .panel-backdrop { | |
| position: fixed; | |
| inset: 0; | |
| background: rgba(0, 0, 0, 0.3); | |
| z-index: 200; | |
| } | |
| .annotation-panel { | |
| position: fixed; | |
| top: 0; | |
| right: 0; | |
| bottom: var(--nav-height); | |
| width: 380px; | |
| background-color: var(--pane-bg); | |
| border-left: 1px solid var(--border-color); | |
| z-index: 300; | |
| transform: translateX(100%); | |
| transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); | |
| display: flex; | |
| flex-direction: column; | |
| box-shadow: -8px 0 30px rgb(0 0 0 / 0.3); | |
| } | |
| .annotation-panel.open { | |
| transform: translateX(0); | |
| } | |
| .panel-header { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| padding: 16px 20px; | |
| border-bottom: 1px solid var(--border-color); | |
| flex-shrink: 0; | |
| } | |
| .panel-header h3 { | |
| margin: 0; | |
| flex: 1; | |
| } | |
| .panel-count { | |
| background-color: var(--accent); | |
| color: #fff; | |
| font-size: 0.75rem; | |
| font-weight: 700; | |
| padding: 2px 8px; | |
| border-radius: 10px; | |
| min-width: 24px; | |
| text-align: center; | |
| } | |
| .panel-close { | |
| background: none; | |
| border: none; | |
| color: #94a3b8; | |
| font-size: 22px; | |
| cursor: pointer; | |
| padding: 4px 8px; | |
| border-radius: 6px; | |
| transition: all 0.15s; | |
| } | |
| .panel-close:hover { | |
| background-color: var(--surface); | |
| color: var(--text-color); | |
| } | |
| .panel-body { | |
| flex: 1; | |
| overflow-y: auto; | |
| padding: 16px; | |
| } | |
| .panel-empty { | |
| text-align: center; | |
| padding: 40px 20px; | |
| color: #64748b; | |
| } | |
| .panel-empty p:first-child { | |
| font-size: 1rem; | |
| } | |
| /* ββ Panel Cards ββββββββββββββββββββββββββββββββββ */ | |
| .panel-annotation-card { | |
| background-color: #0f172a; | |
| border: 1px solid var(--border-color); | |
| border-radius: 10px; | |
| padding: 14px; | |
| margin-bottom: 12px; | |
| transition: border-color 0.2s; | |
| } | |
| .panel-annotation-card:hover { | |
| border-color: var(--accent); | |
| } | |
| .panel-card-top { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 8px; | |
| } | |
| .panel-card-author { | |
| font-size: 0.75rem; | |
| color: #64748b; | |
| font-style: italic; | |
| } | |
| .panel-card-text { | |
| margin: 0 0 6px; | |
| font-size: 0.9rem; | |
| color: #e2e8f0; | |
| line-height: 1.4; | |
| } | |
| .panel-card-position { | |
| display: inline-block; | |
| font-size: 0.7rem; | |
| color: #475569; | |
| font-family: monospace; | |
| margin-bottom: 8px; | |
| } | |
| .panel-card-actions { | |
| display: flex; | |
| gap: 8px; | |
| } | |
| .btn-panel { | |
| background: none; | |
| border: 1px solid var(--border-color); | |
| color: #94a3b8; | |
| font-size: 0.75rem; | |
| padding: 4px 10px; | |
| border-radius: 5px; | |
| cursor: pointer; | |
| transition: all 0.15s; | |
| } | |
| .btn-panel:hover { | |
| border-color: #94a3b8; | |
| color: var(--text-color); | |
| } | |
| .btn-panel.save { | |
| border-color: #10b981; | |
| color: #10b981; | |
| } | |
| .btn-panel.save:hover { | |
| background-color: #10b98120; | |
| } | |
| .btn-panel.delete.confirming { | |
| border-color: var(--error); | |
| color: var(--error); | |
| animation: pulse 0.6s ease infinite alternate; | |
| } | |
| @keyframes pulse { | |
| from { | |
| opacity: 0.7; | |
| } | |
| to { | |
| opacity: 1; | |
| } | |
| } | |
| .panel-card-time { | |
| font-size: 0.7rem; | |
| color: #475569; | |
| margin-top: 6px; | |
| } | |
| .form-select-small { | |
| background-color: var(--bg-color); | |
| color: var(--text-color); | |
| border: 1px solid var(--accent); | |
| border-radius: 5px; | |
| padding: 3px 8px; | |
| font-size: 0.75rem; | |
| cursor: pointer; | |
| } | |
| .annotation-tag-badge { | |
| font-size: 0.7rem; | |
| font-weight: 700; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| padding: 3px 8px; | |
| border-radius: 4px; | |
| } | |
| .annotation-tag-badge.clickable { | |
| cursor: pointer; | |
| transition: opacity 0.15s; | |
| } | |
| .annotation-tag-badge.clickable:hover { | |
| opacity: 0.8; | |
| } | |
| .panel-card-source { | |
| font-size: 0.7rem; | |
| color: #64748b; | |
| } | |
| .inline-edit { | |
| display: flex; | |
| align-items: center; | |
| gap: 4px; | |
| } | |
| /* Judge info row */ | |
| .panel-card-judge { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| font-size: 0.7rem; | |
| margin-top: 2px; | |
| } | |
| .judge-verdict { | |
| font-weight: 600; | |
| } | |
| .judge-verdict.correct { | |
| color: #10b981; | |
| } | |
| .judge-verdict.wrong { | |
| color: #ef4444; | |
| } | |
| .judge-tag { | |
| color: #64748b; | |
| font-style: italic; | |
| } | |
| /* Validated card accents */ | |
| .panel-annotation-card.validated-correct { | |
| border-left: 3px solid #10b981; | |
| } | |
| .panel-annotation-card.validated-wrong { | |
| border-left: 3px solid #ef4444; | |
| } | |
| /* Validation status */ | |
| .validation-status { | |
| font-size: 0.75rem; | |
| margin-top: 6px; | |
| padding: 6px 8px; | |
| border-radius: 6px; | |
| } | |
| .validation-status.correct { | |
| background-color: #10b98115; | |
| color: #10b981; | |
| } | |
| .validation-status.wrong { | |
| background-color: #ef444415; | |
| color: #ef4444; | |
| } | |
| .validation-by { | |
| color: #64748b; | |
| font-style: italic; | |
| } | |
| .validation-notes { | |
| margin: 4px 0 0; | |
| color: var(--text-muted); | |
| font-style: italic; | |
| } | |
| /* Validation form */ | |
| .validation-form { | |
| margin-top: 8px; | |
| } | |
| .validation-notes-input { | |
| width: 100%; | |
| background-color: var(--bg-color); | |
| color: var(--text-color); | |
| border: 1px solid var(--border-color); | |
| border-radius: 6px; | |
| padding: 6px 8px; | |
| font-size: 0.75rem; | |
| resize: vertical; | |
| margin-bottom: 6px; | |
| font-family: inherit; | |
| } | |
| .validation-notes-input:focus { | |
| outline: none; | |
| border-color: var(--accent); | |
| } | |
| .validation-buttons { | |
| display: flex; | |
| gap: 4px; | |
| } | |
| .btn-panel.correct { | |
| border-color: #10b981; | |
| color: #10b981; | |
| } | |
| .btn-panel.correct:hover { | |
| background-color: #10b98120; | |
| } | |
| .btn-panel.wrong { | |
| border-color: #ef4444; | |
| color: #ef4444; | |
| } | |
| .btn-panel.wrong:hover { | |
| background-color: #ef444420; | |
| } | |
| .btn-panel.validate { | |
| border-color: #6366f1; | |
| color: #6366f1; | |
| } | |
| .btn-panel.validate:hover { | |
| background-color: #6366f120; | |
| } | |
| /* ββ Floating Panel Chevron ββββββββββββββββββββββ */ | |
| .panel-chevron { | |
| position: fixed; | |
| right: 0; | |
| top: 50%; | |
| transform: translateY(-50%); | |
| z-index: 150; | |
| background-color: var(--surface); | |
| border: 1px solid var(--border-color); | |
| border-right: none; | |
| color: var(--text-color); | |
| font-size: 1.4rem; | |
| font-weight: 700; | |
| padding: 12px 6px; | |
| border-radius: 8px 0 0 8px; | |
| cursor: pointer; | |
| transition: all 0.2s; | |
| line-height: 1; | |
| } | |
| .panel-chevron:hover { | |
| background-color: var(--accent); | |
| border-color: var(--accent); | |
| } | |
| .chevron-badge { | |
| position: absolute; | |
| top: -6px; | |
| left: -6px; | |
| background-color: var(--accent); | |
| color: #fff; | |
| font-size: 0.6rem; | |
| font-weight: 700; | |
| width: 18px; | |
| height: 18px; | |
| border-radius: 50%; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| /* ββ Modal ββββββββββββββββββββββββββββββββββββββββ */ | |
| .modal-overlay { | |
| position: fixed; | |
| inset: 0; | |
| background-color: rgba(0, 0, 0, 0.6); | |
| backdrop-filter: blur(4px); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| z-index: 1000; | |
| animation: fadeIn 0.15s ease; | |
| } | |
| .modal-content { | |
| background-color: var(--pane-bg); | |
| border: 1px solid var(--border-color); | |
| border-radius: 16px; | |
| width: 90%; | |
| max-width: 520px; | |
| box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.5); | |
| animation: slideUp 0.2s ease; | |
| } | |
| .help-modal-content { | |
| max-width: 700px; | |
| } | |
| .help-modal-body { | |
| max-height: 65vh; | |
| overflow-y: auto; | |
| font-size: 0.9rem; | |
| line-height: 1.6; | |
| } | |
| .help-modal-body h2 { | |
| color: #e2e8f0; | |
| font-size: 1.1rem; | |
| margin-top: 1.2em; | |
| } | |
| .help-modal-body table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| margin: 0.8em 0; | |
| font-size: 0.85rem; | |
| } | |
| .help-modal-body th, | |
| .help-modal-body td { | |
| border: 1px solid var(--border-color); | |
| padding: 6px 10px; | |
| text-align: left; | |
| } | |
| .help-modal-body th { | |
| background-color: #334155; | |
| color: #e2e8f0; | |
| } | |
| .help-modal-body hr { | |
| border: 0; | |
| height: 1px; | |
| background: var(--border-color); | |
| margin: 16px 0; | |
| } | |
| .help-modal-body ol, | |
| .help-modal-body ul { | |
| padding-left: 20px; | |
| } | |
| .help-modal-body strong { | |
| color: #e2e8f0; | |
| } | |
| .modal-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| padding: 20px 24px 0; | |
| } | |
| .modal-header h3 { | |
| margin: 0; | |
| } | |
| .modal-close { | |
| background: none; | |
| border: none; | |
| color: #94a3b8; | |
| font-size: 24px; | |
| cursor: pointer; | |
| padding: 4px 8px; | |
| border-radius: 6px; | |
| transition: all 0.15s; | |
| } | |
| .modal-close:hover { | |
| background-color: var(--surface); | |
| color: var(--text-color); | |
| } | |
| .modal-body { | |
| padding: 20px 24px; | |
| } | |
| .modal-footer { | |
| display: flex; | |
| justify-content: flex-end; | |
| gap: 12px; | |
| padding: 0 24px 20px; | |
| } | |
| /* ββ Form Elements ββββββββββββββββββββββββββββββββ */ | |
| .form-group { | |
| margin-bottom: 16px; | |
| } | |
| .form-group label { | |
| display: block; | |
| font-size: 0.8rem; | |
| font-weight: 600; | |
| color: #94a3b8; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| margin-bottom: 6px; | |
| } | |
| .selected-text-preview { | |
| background-color: #2dd4bf15; | |
| border: 1px solid #2dd4bf30; | |
| padding: 12px; | |
| border-radius: 8px; | |
| font-style: italic; | |
| color: #2dd4bf; | |
| max-height: 100px; | |
| overflow-y: auto; | |
| font-size: 0.95rem; | |
| } | |
| .form-select { | |
| width: 100%; | |
| background-color: var(--bg-color); | |
| color: var(--text-color); | |
| border: 1px solid var(--border-color); | |
| border-radius: 8px; | |
| padding: 10px 12px; | |
| font-size: 0.95rem; | |
| font-family: inherit; | |
| cursor: pointer; | |
| transition: border-color 0.2s; | |
| } | |
| .form-select:focus { | |
| border-color: var(--accent); | |
| outline: none; | |
| } | |
| .form-help { | |
| margin-top: 6px; | |
| margin-bottom: 0; | |
| font-size: 0.8rem; | |
| color: #64748b; | |
| font-style: italic; | |
| } | |
| .form-input, | |
| .form-textarea { | |
| width: 100%; | |
| background-color: var(--bg-color); | |
| color: var(--text-color); | |
| border: 1px solid var(--border-color); | |
| border-radius: 8px; | |
| padding: 10px 12px; | |
| font-size: 0.95rem; | |
| font-family: inherit; | |
| transition: border-color 0.2s; | |
| } | |
| .form-input:focus, | |
| .form-textarea:focus { | |
| border-color: var(--accent); | |
| outline: none; | |
| } | |
| .form-textarea { | |
| resize: vertical; | |
| min-height: 80px; | |
| } | |
| /* ββ Toast Notifications ββββββββββββββββββββββββββ */ | |
| .toast { | |
| position: fixed; | |
| bottom: calc(var(--nav-height) + 16px); | |
| right: 24px; | |
| padding: 14px 24px; | |
| border-radius: 10px; | |
| font-weight: 600; | |
| font-size: 0.9rem; | |
| z-index: 2000; | |
| animation: slideInRight 0.3s ease, fadeOut 0.3s ease 2.7s forwards; | |
| box-shadow: 0 10px 25px -5px rgb(0 0 0 / 0.3); | |
| } | |
| .toast-success { | |
| background-color: var(--success); | |
| color: #fff; | |
| } | |
| .toast-error { | |
| background-color: var(--error); | |
| color: #fff; | |
| } | |
| /* ββ Loading ββββββββββββββββββββββββββββββββββββββ */ | |
| .loading-container { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| height: 100vh; | |
| width: 100%; | |
| gap: 16px; | |
| color: #94a3b8; | |
| } | |
| .loading-spinner-container { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| padding: 40px; | |
| gap: 12px; | |
| color: #94a3b8; | |
| } | |
| .loading-spinner { | |
| width: 32px; | |
| height: 32px; | |
| border: 3px solid var(--border-color); | |
| border-top-color: var(--accent); | |
| border-radius: 50%; | |
| animation: spin 0.8s linear infinite; | |
| } | |
| /* ββ Animations βββββββββββββββββββββββββββββββββββ */ | |
| @keyframes fadeIn { | |
| from { | |
| opacity: 0; | |
| } | |
| to { | |
| opacity: 1; | |
| } | |
| } | |
| @keyframes slideUp { | |
| from { | |
| transform: translateY(20px); | |
| opacity: 0; | |
| } | |
| to { | |
| transform: translateY(0); | |
| opacity: 1; | |
| } | |
| } | |
| @keyframes slideInRight { | |
| from { | |
| transform: translateX(100%); | |
| opacity: 0; | |
| } | |
| to { | |
| transform: translateX(0); | |
| opacity: 1; | |
| } | |
| } | |
| @keyframes fadeOut { | |
| from { | |
| opacity: 1; | |
| } | |
| to { | |
| opacity: 0; | |
| } | |
| } | |
| @keyframes spin { | |
| to { | |
| transform: rotate(360deg); | |
| } | |
| } | |
| @keyframes shake { | |
| 0%, | |
| 100% { | |
| transform: translateX(0); | |
| } | |
| 25% { | |
| transform: translateX(-5px); | |
| } | |
| 50% { | |
| transform: translateX(5px); | |
| } | |
| 75% { | |
| transform: translateX(-5px); | |
| } | |
| } | |
| .shake { | |
| animation: shake 0.4s ease; | |
| } |