verisight / styles.css
snarmatha's picture
Clarify that manual edits aren't ruled out on 'no AI' verdicts
4b9e116 verified
Raw History Blame Contribute Delete
13.2 kB
/* VeriSight — "light table" forensic UI.
Cyanotype blue for the instrument, three evidence colours for verdicts.
Font: Archivo (SIL OFL 1.1) via jsDelivr. */
@font-face {
font-family: "Archivo";
src: url("https://cdn.jsdelivr.net/npm/@fontsource-variable/archivo@5.3.0/files/archivo-latin-wdth-normal.woff2") format("woff2-variations"),
url("https://cdn.jsdelivr.net/npm/@fontsource-variable/archivo@5.3.0/files/archivo-latin-wdth-normal.woff2") format("woff2");
font-weight: 100 900;
font-stretch: 62% 125%;
font-display: swap;
}
:root {
--bg: #eef1f4;
--surface: #ffffff;
--ink: #18212b;
--muted: #5b6875;
--line: #d5dce3;
--cyan: #1f4e79;
--cyan-ink: #ffffff;
--cyan-soft: #dce7f2;
--auth: #2e7d5b;
--mid: #b7791f;
--syn: #b42318;
--radius-lg: 14px;
--radius-sm: 8px;
--shadow: 0 1px 2px rgb(24 33 43 / 0.06), 0 8px 24px -12px rgb(24 33 43 / 0.18);
--font: "Archivo", system-ui, -apple-system, "Segoe UI", sans-serif;
color-scheme: light;
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #0e151c;
--surface: #15202b;
--ink: #e4eaf0;
--muted: #93a1af;
--line: #263442;
--cyan: #7fb2e5;
--cyan-ink: #0e151c;
--cyan-soft: #1a2e44;
--auth: #4cb38a;
--mid: #e0a84a;
--syn: #f07167;
--shadow: 0 1px 2px rgb(0 0 0 / 0.3), 0 10px 30px -14px rgb(0 0 0 / 0.6);
color-scheme: dark;
}
}
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
margin: 0;
background: var(--bg);
color: var(--ink);
font: 400 1rem/1.55 var(--font);
font-variation-settings: "wdth" 100;
}
img { max-width: 100%; display: block; }
a { color: var(--cyan); text-underline-offset: 3px; }
h1, h2, h3 { line-height: 1.1; margin: 0; }
:focus-visible { outline: 3px solid var(--cyan); outline-offset: 3px; border-radius: 4px; }
[hidden] { display: none !important; }
.skip { position: absolute; left: -999px; top: 8px; background: var(--surface); padding: 8px 12px; z-index: 10; }
.skip:focus { left: 8px; }
/* ---------- top bar ---------- */
.topbar {
max-width: 1180px; margin: 0 auto; padding: 20px 24px;
display: flex; align-items: center; justify-content: space-between; gap: 16px;
}
.brand {
display: inline-flex; align-items: center; gap: 10px; text-decoration: none; color: var(--ink);
font-weight: 750; font-size: 1.15rem; font-variation-settings: "wdth" 115; letter-spacing: -0.01em;
}
.brand svg { width: 26px; height: 26px; fill: none; stroke: var(--cyan); stroke-width: 3.5; stroke-linecap: round; }
.topnav { display: flex; gap: 22px; font-size: 0.95rem; }
.topnav a { color: var(--muted); text-decoration: none; }
.topnav a:hover { color: var(--ink); }
main { max-width: 1180px; margin: 0 auto; padding: 0 24px; }
/* ---------- intake ---------- */
.intake { padding: 40px 0 56px; display: grid; grid-template-columns: 1fr 1.05fr; gap: 20px 56px; align-items: center; }
.intake h1 {
font-size: clamp(2.7rem, 6.4vw, 5rem);
font-weight: 800;
font-variation-settings: "wdth" 125;
letter-spacing: -0.035em;
line-height: 0.95;
}
.lede { color: var(--muted); font-size: 1.12rem; max-width: 34em; margin: 20px 0 0; }
.drop {
position: relative; min-height: 300px; border-radius: var(--radius-lg);
background: var(--surface);
border: 2px dashed color-mix(in srgb, var(--cyan) 35%, var(--line));
display: grid; place-items: center; text-align: center; cursor: pointer; overflow: hidden;
box-shadow: var(--shadow);
transition: border-color 0.15s, background-color 0.15s;
}
.drop:hover, .drop.is-over { border-color: var(--cyan); }
.drop.is-over { background: var(--cyan-soft); }
.drop-inner { padding: 32px 24px; display: grid; justify-items: center; gap: 12px; }
.drop-icon { width: 52px; height: 52px; fill: none; stroke: var(--cyan); stroke-width: 2.4; stroke-linejoin: round; }
.drop-title { font-size: 1.3rem; font-weight: 650; margin: 0; }
.drop-hint { color: var(--muted); font-size: 0.88rem; margin: 4px 0 0; max-width: 30em; }
.drop-busy { position: absolute; inset: 0; display: none; place-items: center; background: var(--surface); }
.drop.is-busy .drop-busy { display: grid; }
.drop.is-busy { cursor: progress; }
.drop-busy p { font-weight: 600; color: var(--cyan); position: relative; z-index: 1; }
.scanline {
position: absolute; left: 0; right: 0; height: 40%; top: -40%;
background: linear-gradient(to bottom, transparent, var(--cyan-soft) 70%, color-mix(in srgb, var(--cyan) 35%, transparent));
animation: scan 1.6s cubic-bezier(.45,.05,.55,.95) infinite;
}
@keyframes scan { to { top: 100%; } }
.samples { grid-column: 2; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 0.9rem; color: var(--muted); }
.chip {
font: inherit; font-size: 0.88rem; color: var(--ink); background: transparent; cursor: pointer;
border: 1px solid var(--line); border-radius: 999px; padding: 5px 12px;
}
.chip:hover { border-color: var(--cyan); color: var(--cyan); }
.error { grid-column: 2; margin: 0; color: var(--syn); font-weight: 600; }
/* ---------- buttons ---------- */
.btn {
font: inherit; font-weight: 600; font-size: 0.95rem; cursor: pointer;
border-radius: var(--radius-sm); padding: 10px 16px;
border: 1px solid var(--line); background: var(--surface); color: var(--ink);
}
.btn:hover { border-color: var(--cyan); }
.btn-primary { background: var(--cyan); border-color: var(--cyan); color: var(--cyan-ink); }
.btn-primary:hover { filter: brightness(1.08); }
/* ---------- results ---------- */
.results { display: grid; grid-template-columns: 370px 1fr; gap: 28px; padding: 8px 0 64px; align-items: start; }
.verdict {
position: sticky; top: 20px; background: var(--surface); border-radius: var(--radius-lg);
padding: 26px; box-shadow: var(--shadow); border-top: 6px solid var(--v, var(--mid));
}
.verdict[data-verdict="likely_authentic"] { --v: var(--auth); }
.verdict[data-verdict="inconclusive"] { --v: var(--mid); }
.verdict[data-verdict="likely_synthetic"] { --v: var(--syn); }
.verdict-file { margin: 0 0 8px; color: var(--muted); font-size: 0.9rem; overflow-wrap: anywhere; }
.verdict h2 {
font-size: 1.85rem; font-weight: 780; font-variation-settings: "wdth" 112; letter-spacing: -0.02em; color: var(--v);
}
.scale { margin: 24px 0 18px; }
.scale-track { position: relative; height: 12px; display: flex; border-radius: 6px; overflow: visible; }
.zone { height: 100%; }
.zone-auth { width: 35%; background: color-mix(in srgb, var(--auth) 55%, transparent); border-radius: 6px 0 0 6px; }
.zone-mid { width: 30%; background: color-mix(in srgb, var(--mid) 45%, transparent); }
.zone-syn { width: 35%; background: color-mix(in srgb, var(--syn) 55%, transparent); border-radius: 0 6px 6px 0; }
.marker {
position: absolute; top: 50%; left: 50%; width: 22px; height: 22px; border-radius: 50%;
transform: translate(-50%, -50%); background: var(--surface); border: 5px solid var(--ink);
transition: left 0.9s cubic-bezier(.2,.8,.2,1);
}
.scale-labels { display: flex; justify-content: space-between; font-size: 0.78rem; color: var(--muted); margin-top: 8px; }
.facts { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 16px; margin: 0 0 22px; }
.facts dt { font-size: 0.8rem; color: var(--muted); }
.facts dd { margin: 2px 0 0; font-weight: 650; font-variant-numeric: tabular-nums; }
.actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.actions .btn-primary { grid-column: 1 / -1; }
.disclaimer { color: var(--muted); font-size: 0.8rem; margin: 18px 0 0; }
.evidence { min-width: 0; }
.lens-tabs { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 12px; }
.lens-tabs button {
font: inherit; font-size: 0.92rem; font-weight: 600; cursor: pointer; color: var(--muted);
background: transparent; border: 0; border-bottom: 2px solid transparent; padding: 8px 10px;
}
.lens-tabs button[aria-selected="true"] { color: var(--ink); border-bottom-color: var(--cyan); }
.lens { margin: 0; }
.lens-stage {
position: relative; border-radius: var(--radius-lg); overflow: hidden; background: #0b1117;
box-shadow: var(--shadow); user-select: none; touch-action: pan-y;
}
.lens-stage img { width: 100%; max-height: 72vh; object-fit: contain; }
.lens-overlay { position: absolute; inset: 0; clip-path: inset(0 0 0 var(--split, 50%)); }
.lens-overlay img { width: 100%; height: 100%; object-fit: contain; }
.lens-slider { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: ew-resize; margin: 0; }
.lens-handle {
position: absolute; top: 0; bottom: 0; left: var(--split, 50%); width: 2px; background: #fff;
box-shadow: 0 0 0 1px rgb(0 0 0 / 0.35); pointer-events: none;
}
.lens-handle::after {
content: ""; position: absolute; top: 50%; left: 50%; width: 34px; height: 34px; border-radius: 50%;
transform: translate(-50%, -50%); border: 2px solid #fff; background: rgb(11 17 23 / 0.55);
backdrop-filter: blur(4px);
}
.lens-stage:not(.is-compare) .lens-overlay,
.lens-stage:not(.is-compare) .lens-slider,
.lens-stage:not(.is-compare) .lens-handle { display: none; }
.lens figcaption { color: var(--muted); font-size: 0.9rem; margin-top: 10px; max-width: 70ch; }
.timeline { margin-top: 24px; background: var(--surface); border-radius: var(--radius-lg); padding: 18px 20px; box-shadow: var(--shadow); }
.timeline h3 { font-size: 1rem; margin-bottom: 10px; }
.timeline svg { width: 100%; height: 140px; display: block; }
.timeline-axis { display: flex; justify-content: space-between; font-size: 0.78rem; color: var(--muted); }
.signals { grid-column: 1 / -1; margin-top: 12px; }
.signals h3 { font-size: 1.5rem; font-weight: 760; font-variation-settings: "wdth" 112; letter-spacing: -0.015em; }
.signals-note { color: var(--muted); margin: 8px 0 18px; max-width: 70ch; }
.signal-list { list-style: none; padding: 0; margin: 0; border-top: 1px solid var(--line); }
.signal { border-bottom: 1px solid var(--line); padding: 18px 0; display: grid; grid-template-columns: minmax(180px, 260px) 1fr minmax(160px, 220px); gap: 8px 28px; align-items: start; }
.signal-name { font-weight: 680; }
.signal-cat { display: block; color: var(--muted); font-size: 0.82rem; font-weight: 400; margin-top: 2px; }
.signal-summary { margin: 0; max-width: 65ch; }
.signal-meter { font-size: 0.82rem; color: var(--muted); }
.meter { height: 8px; border-radius: 4px; background: var(--line); overflow: hidden; margin-bottom: 6px; }
.meter > span { display: block; height: 100%; border-radius: 4px; background: var(--s, var(--muted)); }
.signal[data-status="unavailable"] .signal-summary, .signal[data-status="neutral"] .signal-summary { color: var(--muted); }
.signal details { grid-column: 2 / -1; font-size: 0.85rem; }
.signal summary { cursor: pointer; color: var(--cyan); width: fit-content; }
.signal pre {
margin: 8px 0 0; padding: 12px; background: var(--bg); border-radius: var(--radius-sm);
overflow: auto; max-height: 260px; font-size: 0.8rem; line-height: 1.45;
}
/* ---------- how ---------- */
.how { padding: 56px 0 72px; border-top: 1px solid var(--line); }
.how h2 { font-size: clamp(1.7rem, 3.4vw, 2.5rem); font-weight: 780; font-variation-settings: "wdth" 118; letter-spacing: -0.025em; max-width: 18em; }
.how-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 32px 40px; margin-top: 36px; }
.how-grid h3 { font-size: 1.05rem; margin-bottom: 6px; }
.how-grid p { margin: 0; color: var(--muted); }
.how-note { border-left: 3px solid var(--mid); padding-left: 16px; }
.footer {
max-width: 1180px; margin: 0 auto; padding: 24px; border-top: 1px solid var(--line);
display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px; color: var(--muted); font-size: 0.88rem;
}
.footer p { margin: 0; }
/* ---------- responsive ---------- */
@media (max-width: 920px) {
.intake { grid-template-columns: 1fr; padding-top: 16px; }
.samples, .error { grid-column: 1; }
.results { grid-template-columns: 1fr; }
.verdict { position: static; }
.signal { grid-template-columns: 1fr; }
.signal details { grid-column: 1; }
.how-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 560px) {
.topbar, main, .footer { padding-left: 16px; padding-right: 16px; }
.topnav { gap: 14px; }
.topnav a[href="#how"] { display: none; }
.drop { min-height: 240px; }
.how-grid { grid-template-columns: 1fr; }
.facts { grid-template-columns: 1fr 1fr; }
}
@media (prefers-reduced-motion: reduce) {
.scanline { animation: none; top: 30%; }
.marker { transition: none; }
}
/* ---------- browser edition additions ---------- */
.private-note { display: flex; align-items: center; gap: 8px; margin: 18px 0 0; color: var(--auth); font-weight: 600; font-size: 0.95rem; }
.private-note svg { width: 18px; height: 18px; flex: none; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linejoin: round; }
.model-status { margin: 8px 0 0; color: var(--muted); font-size: 0.88rem; font-variant-numeric: tabular-nums; }
.model-status[data-state="ready"] { color: var(--auth); }
.model-status[data-state="error"] { color: var(--mid); }
.verdict-note { margin: 10px 0 0; color: var(--muted); font-size: 0.9rem; }
.verdict-note:empty { display: none; }