/** * PhilVerify — Content Script Styles * Floating verify button + inline report overlay. * All selectors namespaced under .pv-* to avoid collisions. */ /* ── Floating "Verify this post" button ─────────────────────────────────────── */ /* Wrapper container: sits at the end of the post, flex-end alignment */ .pv-verify-btn-wrapper { display: flex; justify-content: flex-end; padding: 4px 12px 8px; /* pointer-events must remain auto — do NOT set to none here */ } /* When button is injected directly (strategy 1, no wrapper) */ div > .pv-verify-btn:not(.pv-verify-btn-wrapper .pv-verify-btn) { margin-left: 6px; vertical-align: middle; } .pv-verify-btn { position: relative; z-index: 100; display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border: 1px solid rgba(220, 38, 38, 0.3); border-radius: 20px; background: rgba(20, 20, 20, 0.92); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); color: #f5f0e8; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; font-size: 11px; font-weight: 600; letter-spacing: 0.03em; cursor: pointer; touch-action: manipulation; -webkit-tap-highlight-color: transparent; transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); pointer-events: auto; /* Re-enable clicks on the button itself */ } .pv-verify-btn:hover { transform: translateY(-1px); border-color: rgba(220, 38, 38, 0.6); box-shadow: 0 4px 16px rgba(220, 38, 38, 0.2); } .pv-verify-btn:active { transform: scale(0.97); } .pv-verify-btn:focus-visible { outline: 2px solid #06b6d4; outline-offset: 2px; } .pv-verify-btn-icon { font-size: 13px; line-height: 1; } .pv-verify-btn-label { white-space: nowrap; } /* ── Loading state (on the button) ──────────────────────────────────────────── */ .pv-verify-btn--loading { cursor: wait; border-color: rgba(168, 159, 148, 0.3); color: #a89f94; } .pv-verify-btn--loading:hover { transform: none; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); } /* ── Error state (on the button) ────────────────────────────────────────────── */ .pv-verify-btn--error { border-color: rgba(248, 113, 113, 0.4); color: #f87171; animation: pv-shake 0.4s ease-in-out; } @keyframes pv-shake { 0%, 100% { transform: translateX(0); } 20% { transform: translateX(-3px); } 40% { transform: translateX(3px); } 60% { transform: translateX(-2px); } 80% { transform: translateX(2px); } } /* ── Spinner ────────────────────────────────────────────────────────────────── */ .pv-spinner { display: inline-block; width: 12px; height: 12px; border: 2px solid rgba(168, 159, 148, 0.3); border-top-color: #a89f94; border-radius: 50%; animation: pv-spin 0.7s linear infinite; flex-shrink: 0; } @media (prefers-reduced-motion: reduce) { .pv-spinner { animation: none; } .pv-verify-btn--error { animation: none; } .pv-verify-btn { transition: none; } } @keyframes pv-spin { to { transform: rotate(360deg); } } /* ── Modal overlay ───────────────────────────────────────────────────────────── */ .pv-modal-overlay { position: fixed; inset: 0; z-index: 2147483640; display: flex; align-items: center; justify-content: center; padding: 16px; background: rgba(0, 0, 0, 0); backdrop-filter: blur(0px); -webkit-backdrop-filter: blur(0px); transition: background 0.2s ease, backdrop-filter 0.2s ease; pointer-events: none; } .pv-modal-overlay.pv-modal--open { background: rgba(0, 0, 0, 0.65); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); pointer-events: auto; } .pv-modal-card { width: 100%; max-width: 460px; max-height: 90vh; overflow-y: auto; background: #141414; border: 1px solid rgba(245, 240, 232, 0.1); border-radius: 12px; padding: 18px 20px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; font-size: 11px; color: #f5f0e8; box-shadow: 0 24px 64px rgba(0, 0, 0, 0.7), 0 0 0 1px rgba(255,255,255,0.04); position: relative; transform: scale(0.94) translateY(12px); opacity: 0; transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), opacity 0.2s ease; } .pv-modal--open .pv-modal-card { transform: scale(1) translateY(0); opacity: 1; } /* Scrollbar styling for modal card */ .pv-modal-card::-webkit-scrollbar { width: 4px; } .pv-modal-card::-webkit-scrollbar-track { background: transparent; } .pv-modal-card::-webkit-scrollbar-thumb { background: rgba(245,240,232,0.15); border-radius: 2px; } /* ── Report internals (shared between modal & future contexts) ───────────────── */ /* — Header */ .pv-report-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; padding-bottom: 10px; border-bottom: 1px solid rgba(245, 240, 232, 0.07); } .pv-report-logo { font-weight: 800; font-size: 13px; letter-spacing: 0.12em; color: #f5f0e8; } .pv-report-close { background: none; border: none; cursor: pointer; color: #5c554e; font-size: 14px; padding: 2px 6px; border-radius: 4px; touch-action: manipulation; transition: color 0.15s ease, background 0.15s ease; } .pv-report-close:hover { color: #f5f0e8; background: rgba(245, 240, 232, 0.07); } .pv-report-close:focus-visible { outline: 2px solid #06b6d4; } /* — Verdict row */ .pv-report-verdict-row { padding: 12px 14px; margin-bottom: 14px; border-left: 3px solid #5c554e; border-radius: 4px; } .pv-report-verdict { font-size: 20px; font-weight: 800; letter-spacing: -0.01em; margin-bottom: 3px; } .pv-report-score-text { font-size: 10px; color: #a89f94; font-family: 'SF Mono', 'Menlo', monospace; } /* — Confidence bar */ .pv-confidence-bar-wrap { display: flex; align-items: center; gap: 8px; padding: 8px 0; border-bottom: 1px solid rgba(245, 240, 232, 0.05); } .pv-confidence-bar-track { flex: 1; height: 6px; background: rgba(245, 240, 232, 0.07); border-radius: 3px; overflow: hidden; } .pv-confidence-bar-fill { height: 100%; border-radius: 3px; transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1); } .pv-confidence-bar-value { font-size: 10px; font-weight: 700; color: #a89f94; font-family: 'SF Mono', 'Menlo', monospace; min-width: 36px; text-align: right; } /* — Info rows */ .pv-report-row { display: flex; justify-content: space-between; align-items: center; padding: 7px 0; border-bottom: 1px solid rgba(245, 240, 232, 0.05); } .pv-report-label { font-size: 9px; font-weight: 700; letter-spacing: 0.12em; color: #5c554e; text-transform: uppercase; flex-shrink: 0; } .pv-report-value { font-size: 11px; font-weight: 500; color: #a89f94; } /* — Suspicious signals */ .pv-report-signals { padding: 10px 0; border-bottom: 1px solid rgba(245, 240, 232, 0.05); } .pv-report-tags { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 8px; } .pv-report-tag { padding: 3px 8px; background: rgba(220, 38, 38, 0.12); color: #f87171; border: 1px solid rgba(220, 38, 38, 0.25); border-radius: 3px; font-size: 9px; letter-spacing: 0.04em; font-weight: 600; } /* — Evidence sources */ .pv-report-sources { padding: 10px 0; border-bottom: 1px solid rgba(245, 240, 232, 0.05); } .pv-report-sources-list { list-style: none; padding: 0; margin: 8px 0 0 0; display: flex; flex-direction: column; gap: 4px; } .pv-report-source-item { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 4px 0; } .pv-report-source-link { color: #06b6d4; font-size: 10px; text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; } .pv-report-source-link:hover { text-decoration: underline; } .pv-report-source-stance { font-size: 9px; font-weight: 700; letter-spacing: 0.06em; color: #5c554e; flex-shrink: 0; } /* — Claim analyzed */ .pv-report-explanation { padding: 10px 0; border-bottom: 1px solid rgba(245, 240, 232, 0.05); } .pv-report-explanation-text { margin: 6px 0 0; font-size: 10px; color: #a89f94; line-height: 1.6; font-style: italic; } /* — Full dashboard link */ .pv-report-full-link { display: block; margin-top: 14px; text-align: center; color: #dc2626; font-size: 10px; font-weight: 700; letter-spacing: 0.08em; text-decoration: none; text-transform: uppercase; padding: 8px; border: 1px solid rgba(220, 38, 38, 0.3); border-radius: 6px; transition: background 0.15s ease; } .pv-report-full-link:hover { background: rgba(220, 38, 38, 0.1); } /* ── Metadata footer (model_tier + claim_method) ────────────────────────────── */ .pv-report-meta-footer { display: flex; align-items: center; gap: 5px; padding: 8px 0 4px; border-top: 1px solid rgba(245, 240, 232, 0.05); margin-top: 4px; } .pv-report-meta-label { font-size: 8px; font-weight: 700; letter-spacing: 0.1em; color: #5c554e; text-transform: uppercase; } .pv-report-meta-val { font-size: 9px; font-family: 'SF Mono', 'Menlo', monospace; color: #6b7280; } .pv-report-meta-sep { color: rgba(245, 240, 232, 0.12); font-size: 10px; margin: 0 1px; }