/* 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; }