Spaces:
Running on Zero
Running on Zero
| /* FALCONS.AI Verify Anything — theme tokens copied from the product legal | |
| pages (SPEC 3). Dark only. */ | |
| @font-face { | |
| font-family: "IBM Plex Mono"; | |
| src: url("/static/fonts/IBMPlexMono-Regular.woff2") format("woff2"); | |
| font-weight: 400; | |
| font-display: swap; | |
| } | |
| @font-face { | |
| font-family: "IBM Plex Mono"; | |
| src: url("/static/fonts/IBMPlexMono-Medium.woff2") format("woff2"); | |
| font-weight: 500; | |
| font-display: swap; | |
| } | |
| :root { | |
| --bg: #070B14; | |
| --ink: #E8F0FF; | |
| --dim: #8FA3C0; | |
| --cyan: #33E0FF; | |
| --mint: #7CF7C4; | |
| --line: #22304A; | |
| --red: #FF5D6C; | |
| --red-dim: #5A1F2A; | |
| --amber: #FFC46B; | |
| --panel: #0A1120; | |
| --mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; | |
| } | |
| * { box-sizing: border-box; } | |
| html, body { | |
| margin: 0; | |
| background: var(--bg); | |
| color: var(--ink); | |
| font-family: var(--mono); | |
| font-size: 15px; | |
| line-height: 1.5; | |
| } | |
| a { color: var(--cyan); text-decoration: none; } | |
| a:hover, a:focus-visible { text-decoration: underline; } | |
| :focus-visible { outline: 2px solid var(--cyan); outline-offset: 2px; } | |
| .visually-hidden { | |
| position: absolute; width: 1px; height: 1px; | |
| clip: rect(0 0 0 0); overflow: hidden; white-space: nowrap; | |
| } | |
| /* ---------- masthead ---------- */ | |
| .masthead { | |
| padding: 28px 20px 18px; | |
| border-bottom: 1px solid var(--line); | |
| } | |
| .masthead h1 { | |
| margin: 0; | |
| font-size: 20px; | |
| font-weight: 500; | |
| letter-spacing: 0.08em; | |
| } | |
| .masthead .sub { margin: 6px 0 0; color: var(--dim); font-size: 13px; } | |
| .masthead .brand { color: var(--cyan); } | |
| /* ---------- workbench ---------- */ | |
| .workbench { | |
| display: grid; | |
| grid-template-columns: minmax(260px, 340px) 1fr; | |
| gap: 24px; | |
| padding: 24px 20px; | |
| max-width: 1080px; | |
| margin: 0 auto; | |
| } | |
| .panel-label { | |
| margin: 0 0 12px; | |
| font-size: 12px; | |
| font-weight: 500; | |
| letter-spacing: 0.14em; | |
| color: var(--dim); | |
| } | |
| /* sample cards */ | |
| .sample-card { | |
| border: 1px solid var(--line); | |
| background: var(--panel); | |
| border-radius: 8px; | |
| padding: 14px; | |
| margin-bottom: 12px; | |
| cursor: grab; | |
| user-select: none; | |
| -webkit-user-select: none; | |
| transition: border-color 120ms ease; | |
| min-height: 44px; | |
| } | |
| .sample-card:hover, .sample-card:focus-visible { border-color: var(--cyan); } | |
| .sample-card:active { cursor: grabbing; } | |
| .sample-card.dragging { opacity: 0.5; } | |
| .sample-card .card-title { | |
| display: flex; align-items: center; gap: 8px; | |
| font-weight: 500; letter-spacing: 0.06em; | |
| } | |
| .sample-card .glyph { color: var(--cyan); } | |
| .sample-card .blurb { margin: 6px 0 0; color: var(--dim); font-size: 13px; } | |
| .samples .hint { color: var(--dim); font-size: 12px; margin: 4px 0 0; } | |
| /* the grid */ | |
| .grid { | |
| position: relative; | |
| border: 1px dashed var(--line); | |
| border-radius: 10px; | |
| background: | |
| linear-gradient(var(--line) 1px, transparent 1px) 0 0 / 32px 32px, | |
| linear-gradient(90deg, var(--line) 1px, transparent 1px) 0 0 / 32px 32px, | |
| var(--panel); | |
| min-height: 220px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| text-align: center; | |
| padding: 20px; | |
| transition: border-color 120ms ease, box-shadow 120ms ease; | |
| } | |
| .grid.dragover { | |
| border-color: var(--mint); | |
| box-shadow: 0 0 0 1px var(--mint), inset 0 0 24px rgba(124, 247, 196, 0.25); | |
| } | |
| .grid-idle p { color: var(--dim); margin: 8px 0 0; } | |
| .grid-glyph { font-size: 28px; color: var(--cyan); } | |
| .grid-busy p { margin: 8px 0 12px; } | |
| .scanline { | |
| width: 180px; height: 3px; margin: 0 auto; | |
| background: linear-gradient(90deg, transparent, var(--cyan), transparent); | |
| animation: scan 1.1s linear infinite; | |
| border-radius: 2px; | |
| } | |
| @keyframes scan { | |
| 0% { transform: translateX(-40px); opacity: 0.4; } | |
| 50% { transform: translateX(40px); opacity: 1; } | |
| 100% { transform: translateX(-40px); opacity: 0.4; } | |
| } | |
| @media (prefers-reduced-motion: reduce) { | |
| .scanline { animation: none; } | |
| } | |
| .cancel { | |
| background: none; | |
| border: 1px solid var(--line); | |
| color: var(--dim); | |
| font-family: var(--mono); | |
| font-size: 13px; | |
| border-radius: 6px; | |
| padding: 10px 16px; | |
| min-height: 44px; | |
| cursor: pointer; | |
| } | |
| .cancel:hover { border-color: var(--red); color: var(--red); } | |
| /* alt inputs */ | |
| .alt-inputs { margin-top: 14px; display: flex; flex-wrap: wrap; gap: 12px; align-items: center; } | |
| .filebtn span { | |
| display: inline-flex; align-items: center; | |
| border: 1px solid var(--line); | |
| background: var(--panel); | |
| color: var(--ink); | |
| border-radius: 6px; | |
| padding: 10px 16px; | |
| min-height: 44px; | |
| cursor: pointer; | |
| } | |
| .filebtn span:hover { border-color: var(--cyan); } | |
| .repoform { display: flex; gap: 8px; flex: 1; min-width: 260px; } | |
| .repoform input { | |
| flex: 1; | |
| min-width: 0; | |
| background: var(--panel); | |
| border: 1px solid var(--line); | |
| color: var(--ink); | |
| font-family: var(--mono); | |
| font-size: 14px; | |
| border-radius: 6px; | |
| padding: 10px 12px; | |
| min-height: 44px; | |
| } | |
| .repoform input::placeholder { color: var(--dim); opacity: 0.8; } | |
| .repoform input:focus { border-color: var(--cyan); outline: none; } | |
| .repoform button { | |
| background: var(--cyan); | |
| color: #04222B; | |
| border: none; | |
| font-family: var(--mono); | |
| font-weight: 500; | |
| letter-spacing: 0.08em; | |
| border-radius: 6px; | |
| padding: 10px 18px; | |
| min-height: 44px; | |
| cursor: pointer; | |
| } | |
| .repoform button:hover { filter: brightness(1.1); } | |
| button:disabled, input:disabled, .filebtn.disabled span, .sample-card.disabled { | |
| opacity: 0.45; pointer-events: none; | |
| } | |
| /* ---------- verdicts ---------- */ | |
| .verdicts { max-width: 1080px; margin: 0 auto; padding: 0 20px 24px; } | |
| .verdict-card { | |
| border: 1px solid var(--line); | |
| border-left-width: 4px; | |
| border-radius: 8px; | |
| background: var(--panel); | |
| padding: 16px; | |
| margin-bottom: 12px; | |
| } | |
| .verdict-card .vhead { | |
| font-size: 16px; | |
| font-weight: 500; | |
| letter-spacing: 0.06em; | |
| margin: 0 0 8px; | |
| } | |
| .verdict-card .vsub { color: var(--dim); font-size: 12px; margin: 0 0 8px; overflow-wrap: anywhere; } | |
| .verdict-card .vline { margin: 4px 0; font-size: 14px; overflow-wrap: anywhere; } | |
| .verdict-card .vdetail { font-size: 14px; margin: 8px 0 0; overflow-wrap: anywhere; } | |
| .v-verified { border-left-color: var(--mint); } | |
| .v-verified .vhead { color: var(--mint); } | |
| .v-tampered { | |
| border-left-color: var(--red); | |
| background: linear-gradient(0deg, rgba(90,31,42,.25), rgba(90,31,42,.25)), var(--panel); | |
| } | |
| .v-tampered .vhead { color: var(--red); } | |
| .v-amber { border-left-color: var(--amber); } | |
| .v-amber .vhead { color: var(--amber); } | |
| .v-error { border-left-color: var(--dim); } | |
| .v-error .vhead { color: var(--dim); } | |
| .keyid { | |
| display: inline-flex; align-items: center; gap: 8px; | |
| background: #060A12; | |
| border: 1px solid var(--line); | |
| border-radius: 6px; | |
| padding: 4px 8px; | |
| font-size: 13px; | |
| } | |
| .keyid button { | |
| background: none; border: none; color: var(--cyan); | |
| font-family: var(--mono); font-size: 12px; cursor: pointer; padding: 4px; | |
| } | |
| .kcaption { color: var(--dim); font-size: 12px; margin-left: 8px; } | |
| details.receipt { margin-top: 10px; } | |
| details.receipt summary { | |
| color: var(--cyan); font-size: 13px; cursor: pointer; user-select: none; | |
| min-height: 32px; display: flex; align-items: center; | |
| } | |
| details.receipt pre { | |
| background: #060A12; | |
| border: 1px solid var(--line); | |
| border-radius: 6px; | |
| padding: 12px; | |
| font-size: 12px; | |
| color: var(--dim); | |
| overflow-x: auto; | |
| white-space: pre-wrap; | |
| overflow-wrap: anywhere; | |
| margin: 8px 0 0; | |
| } | |
| /* ---------- footer ---------- */ | |
| .footer { | |
| border-top: 1px solid var(--line); | |
| padding: 20px; | |
| color: var(--dim); | |
| font-size: 13px; | |
| text-align: center; | |
| } | |
| .footlinks { margin-bottom: 8px; } | |
| .strapline { color: var(--dim); margin: 0; } | |
| /* ---------- mobile (SPEC 3: iPhone SE, no sideways scroll, 44px taps) ---- */ | |
| @media (max-width: 720px) { | |
| .workbench { grid-template-columns: 1fr; gap: 16px; padding: 16px 12px; } | |
| .verdicts { padding: 0 12px 16px; } | |
| .masthead { padding: 20px 12px 14px; } | |
| .masthead h1 { font-size: 17px; } | |
| .grid { min-height: 160px; } | |
| .repoform { min-width: 0; width: 100%; } | |
| } | |
| /* ---- masthead branding ---- */ | |
| .masthead{display:flex;align-items:center;gap:18px;text-align:left} | |
| .brandmark{flex:0 0 auto;display:block;line-height:0} | |
| .brandmark img{width:72px;height:72px;display:block; | |
| filter:drop-shadow(0 0 14px rgba(217,32,44,.35))} | |
| .masthead-text{min-width:0} | |
| .byline{margin:.15rem 0 .1rem;font-size:1.05rem;letter-spacing:.14em;color:var(--dim)} | |
| .byline .brand-name{color:#E0202C;font-weight:700;letter-spacing:.18em} | |
| @media (max-width:720px){ | |
| .masthead{flex-direction:column;text-align:center;gap:10px} | |
| .brandmark img{width:56px;height:56px} | |
| } | |
| .buildtag{margin:.2rem 0 0;font-size:.68rem;letter-spacing:.08em;color:var(--line);text-align:center} | |