Download style.css from thegovind/blink: direct link, hf CLI and curl.
- Browser
- Download file 169 kB
-
https://huggingface.co/spaces/thegovind/blink/resolve/main/style.css
- Command line
-
hf download hf://spaces/thegovind/blink/style.css
-
curl -L -o style.css https://huggingface.co/spaces/thegovind/blink/resolve/main/style.css
169 kB
| /* blink — one quiet system: white paper, hairlines, one cobalt for blink and the action that runs it, | |
| and one lime flash for the box blink picks on a screenshot. | |
| Geist loads from app.py's head; the static build falls back to Inter or the system face. | |
| Gradio copies every top-level rule with a scoped prefix (.gradio-container.gradio-container-X .contain), | |
| and inside @media it keeps only that scoped copy. So rules inside a media query name only what sits | |
| inside the app (never .gradio-container, html or body), and no declaration value may wrap a line. */ | |
| :root { | |
| /* the palette */ | |
| --color-canvas: #ffffff; | |
| --color-paper: #ffffff; | |
| --color-surface-alt: #f7f8fa; | |
| --color-sunken: #f1f3f6; | |
| --color-ink: #0b0d12; | |
| --color-ink-soft: #272c36; | |
| --color-mid-gray: #5a6170; | |
| --color-mid-gray-canvas: #5a6170; | |
| --color-faint: #8a909c; | |
| --color-hairline: #e4e7ec; | |
| --color-hairline-strong: #cfd4dc; | |
| /* blink: the brand, the model in use, what it outputs, and the action that runs it */ | |
| --color-blink: #2447f5; | |
| --color-blink-hover: #1b3ce2; | |
| --color-blink-deep: #15237a; | |
| --color-blink-light: #a6b5fa; | |
| --color-blink-tint: #eef1fe; | |
| --color-blink-line: #c7d1fd; | |
| --color-blink-ink: #1c38d0; | |
| /* flash: the box blink picks on a screenshot */ | |
| --color-flash: #d4f55c; | |
| --color-flash-ink: #0b0d12; | |
| /* every other system stays gray, so the colours above carry meaning */ | |
| --color-ref: #6b7280; | |
| --color-other: #9aa1ad; | |
| /* red is for errors only; amber asks a person to look */ | |
| --color-error: #b42318; | |
| --color-error-bg: #fef3f2; | |
| --color-error-line: #fecdca; | |
| --color-review: #9a4a07; | |
| --color-review-bg: #fff8eb; | |
| --color-review-line: #f9d58e; | |
| --canvas: var(--color-canvas); | |
| --paper: var(--color-paper); | |
| --alt: var(--color-surface-alt); | |
| --sunken: var(--color-sunken); | |
| --ink: var(--color-ink); | |
| --ink-soft: var(--color-ink-soft); | |
| --mid: var(--color-mid-gray); | |
| --mid-c: var(--color-mid-gray-canvas); | |
| --faint: var(--color-faint); | |
| --line: var(--color-hairline); | |
| --line-strong: var(--color-hairline-strong); | |
| --track: #eceff3; | |
| --grid: #eceff3; | |
| --blink: var(--color-blink); | |
| --blink-light: var(--color-blink-light); | |
| --blink-tint: var(--color-blink-tint); | |
| --blink-line: var(--color-blink-line); | |
| --blink-ink: var(--color-blink-ink); | |
| --flash: var(--color-flash); | |
| --font-geist: Geist, Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; | |
| --font-geist-mono: "Geist Mono", ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; | |
| /* one type scale */ | |
| --text-caption: 12px; | |
| --text-small: 13px; | |
| --text-body: 14px; | |
| --text-body-lg: 15px; | |
| --text-title: 17px; | |
| --text-heading-sm: 20px; | |
| --text-heading: 24px; | |
| --text-display: 36px; | |
| /* restrained radii: controls 8, cards 12, tags round */ | |
| --radius-xs: 4px; | |
| --radius-small: 6px; | |
| --radius-control: 8px; | |
| --radius-nested: 8px; | |
| --radius-cards: 12px; | |
| --radius-pill: 8px; | |
| --radius-round: 999px; | |
| --shadow-subtle: 0 1px 2px rgba(16, 24, 40, 0.04); | |
| --shadow-control: 0 1px 2px rgba(16, 24, 40, 0.05); | |
| --shadow-pop: 0 12px 32px -10px rgba(16, 24, 40, 0.22), 0 2px 6px rgba(16, 24, 40, 0.06); | |
| --ring: 0 0 0 3px rgba(36, 71, 245, 0.2); | |
| --ease: cubic-bezier(0.22, 0.8, 0.3, 1); | |
| } | |
| /* --- the page ---------------------------------------------------------------------- */ | |
| html, | |
| body, | |
| gradio-app { | |
| background: var(--canvas) ; | |
| color-scheme: light ; | |
| } | |
| /* one centred column, one gutter; every block inside aligns to its edges */ | |
| gradio-app { | |
| display: block; | |
| } | |
| .gradio-container { | |
| max-width: 1280px ; | |
| width: 100% ; | |
| margin-left: auto ; | |
| margin-right: auto ; | |
| padding: 0 clamp(16px, 4vw, 32px) 8px ; | |
| box-sizing: border-box ; | |
| background: transparent ; | |
| color: var(--ink); | |
| font-family: var(--font-geist) ; | |
| font-size: var(--text-body); | |
| line-height: 1.5; | |
| font-feature-settings: "ss01" on, "cv11" on; | |
| -webkit-font-smoothing: antialiased; | |
| -moz-osx-font-smoothing: grayscale; | |
| text-rendering: optimizeLegibility; | |
| } | |
| /* the gutter above is the only one: gradio's fillable app adds 32px more on each side */ | |
| .gradio-container > .main, | |
| .gradio-container .main.app { | |
| padding: 0 ; | |
| } | |
| .gradio-container .contain { | |
| gap: 0 ; | |
| } | |
| .gradio-container ::selection { | |
| background: var(--blink-tint); | |
| color: var(--ink); | |
| } | |
| footer { | |
| display: none ; | |
| } | |
| /* one ring for everything a keyboard can reach; text fields draw theirs as a border */ | |
| .gradio-container :focus-visible { | |
| outline: 2px solid var(--blink) ; | |
| outline-offset: 2px ; | |
| } | |
| /* --- gradio's blocks: no boxes of their own --------------------------------------- */ | |
| .gradio-container .block, | |
| .gradio-container .form, | |
| .gradio-container .html-container { | |
| background: transparent ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| box-shadow: none ; | |
| padding-left: 0 ; | |
| padding-right: 0 ; | |
| } | |
| /* Gradio makes every block and form an overflow:auto scroll container. A closed accordion whose | |
| toggle reaches a few pixels past it then draws a scrollbar on systems with classic scrollbars. | |
| Nothing here scrolls at the block level; editors, tables and the JSON viewer scroll inside. */ | |
| .gradio-container .block:not([data-testid="json"]), | |
| .gradio-container .form { | |
| overflow: visible ; | |
| } | |
| .gradio-container .html-container { | |
| padding-top: 0 ; | |
| padding-bottom: 0 ; | |
| } | |
| .gradio-container .styler { | |
| background: transparent ; | |
| } | |
| /* a loading veil gradio lays over a block while it waits: quiet, never a coloured slab */ | |
| .gradio-container .wrap.default:not(.hide), | |
| .gradio-container .wrap.center:not(.hide) { | |
| background: rgba(255, 255, 255, 0.72) ; | |
| border: 0 ; | |
| border-radius: var(--radius-control) ; | |
| } | |
| .gradio-container .wrap.default:not(.hide) .eta-bar { | |
| background: var(--blink-tint) ; | |
| } | |
| .gradio-container .wrap .progress-text, | |
| .gradio-container .wrap .meta-text, | |
| .gradio-container .wrap .meta-text-center { | |
| font-family: var(--font-geist) ; | |
| font-size: var(--text-caption) ; | |
| color: var(--mid) ; | |
| } | |
| /* prose: gradio inks every element in it; here an element inherits unless a rule says otherwise, | |
| so a note's link, a tag's icon and a label's parts take their parent's colour */ | |
| .gradio-container .prose { | |
| font-size: var(--text-body); | |
| line-height: 1.5; | |
| } | |
| .prose * { | |
| color: inherit; | |
| } | |
| .prose a { | |
| color: var(--blink-ink); | |
| text-decoration: underline; | |
| text-decoration-thickness: 1px; | |
| text-underline-offset: 3px; | |
| } | |
| .prose a:hover { | |
| color: var(--blink); | |
| } | |
| /* --- labels ------------------------------------------------------------------------- */ | |
| .gradio-container span[data-testid="block-info"], | |
| .gradio-container .block > label > span:first-child:not(.sr-only), | |
| .gradio-container label[data-testid="block-label"] { | |
| display: block; | |
| margin: 0 0 6px ; | |
| padding: 0 ; | |
| font-family: var(--font-geist) ; | |
| font-size: var(--text-small) ; | |
| font-weight: 500 ; | |
| line-height: 18px ; | |
| letter-spacing: 0 ; | |
| text-transform: none ; | |
| color: var(--ink-soft) ; | |
| } | |
| /* File, Code and JSON hang their label as a floating badge with an icon; here it is a label */ | |
| .gradio-container label[data-testid="block-label"] { | |
| position: static ; | |
| display: flex ; | |
| align-items: center; | |
| width: auto ; | |
| background: transparent ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| box-shadow: none ; | |
| } | |
| .gradio-container label[data-testid="block-label"] > span:first-child:has(svg) { | |
| display: none ; | |
| } | |
| .gradio-container [data-testid="block-info"] + div > .info, | |
| .gradio-container .block .info, | |
| .gradio-container span.info { | |
| margin: -2px 0 8px ; | |
| font-size: var(--text-caption) ; | |
| line-height: 1.45 ; | |
| color: var(--mid) ; | |
| } | |
| /* --- text fields ---------------------------------------------------------------------- */ | |
| .gradio-container textarea, | |
| .gradio-container input[type="text"], | |
| .gradio-container input[type="number"], | |
| .gradio-container input[type="search"] { | |
| background: var(--paper) ; | |
| border: 1px solid var(--line-strong) ; | |
| border-radius: var(--radius-control) ; | |
| box-shadow: var(--shadow-control) ; | |
| color: var(--ink) ; | |
| font-family: var(--font-geist) ; | |
| font-size: var(--text-body) ; | |
| line-height: 1.5 ; | |
| transition: border-color 0.15s ease, box-shadow 0.15s ease, background-color 0.15s ease; | |
| } | |
| .gradio-container textarea { | |
| padding: 9px 12px ; | |
| } | |
| .gradio-container input[type="text"], | |
| .gradio-container input[type="number"], | |
| .gradio-container input[type="search"] { | |
| min-height: 40px; | |
| padding: 8px 12px ; | |
| } | |
| .gradio-container textarea::placeholder, | |
| .gradio-container input::placeholder { | |
| color: var(--faint) ; | |
| opacity: 1; | |
| } | |
| .gradio-container textarea:hover:not(:disabled):not(:focus), | |
| .gradio-container input[type="text"]:hover:not(:disabled):not(:focus) { | |
| border-color: #b8bfca ; | |
| } | |
| .gradio-container textarea:focus, | |
| .gradio-container input[type="text"]:focus, | |
| .gradio-container input[type="number"]:focus, | |
| .gradio-container input[type="search"]:focus { | |
| border-color: var(--blink) ; | |
| box-shadow: var(--ring) ; | |
| outline: none ; | |
| } | |
| /* read-only text is a surface to read, not a field to fill */ | |
| .gradio-container textarea:disabled, | |
| .gradio-container input:disabled, | |
| .gradio-container textarea[readonly] { | |
| color: var(--ink-soft) ; | |
| background: var(--alt) ; | |
| box-shadow: none ; | |
| -webkit-text-fill-color: var(--ink-soft); | |
| } | |
| /* --- dropdowns ------------------------------------------------------------------------ */ | |
| .gradio-container .wrap:has(> .wrap-inner) { | |
| min-height: 40px; | |
| background: var(--paper) ; | |
| border: 1px solid var(--line-strong) ; | |
| border-radius: var(--radius-control) ; | |
| box-shadow: var(--shadow-control) ; | |
| transition: border-color 0.15s ease, box-shadow 0.15s ease; | |
| } | |
| .gradio-container .wrap:has(> .wrap-inner):hover { | |
| border-color: #b8bfca ; | |
| } | |
| .gradio-container .wrap:has(> .wrap-inner):focus-within { | |
| border-color: var(--blink) ; | |
| box-shadow: var(--ring) ; | |
| } | |
| .gradio-container .wrap-inner { | |
| min-height: 38px; | |
| padding: 0 10px 0 12px ; | |
| align-items: center; | |
| } | |
| .gradio-container .wrap-inner input[role="combobox"], | |
| .gradio-container .secondary-wrap input { | |
| margin: 0 ; | |
| border: 0 ; | |
| box-shadow: none ; | |
| background: transparent ; | |
| font-family: var(--font-geist) ; | |
| font-size: var(--text-body) ; | |
| color: var(--ink) ; | |
| cursor: pointer; | |
| } | |
| /* the field's frame draws the focus ring; the input inside it draws none of its own */ | |
| .gradio-container .wrap-inner input:focus, | |
| .gradio-container .wrap-inner input:focus-visible { | |
| outline: none ; | |
| box-shadow: none ; | |
| } | |
| .gradio-container .wrap-inner .icon-wrap { | |
| color: var(--mid) ; | |
| } | |
| .gradio-container .wrap-inner .icon-wrap svg { | |
| width: 16px; | |
| height: 16px; | |
| } | |
| .gradio-container ul.options { | |
| min-width: 140px ; | |
| padding: 4px ; | |
| background: var(--paper) ; | |
| border: 1px solid var(--line) ; | |
| border-radius: var(--radius-control) ; | |
| box-shadow: var(--shadow-pop) ; | |
| } | |
| .gradio-container ul.options li { | |
| margin: 0 ; | |
| padding: 7px 10px ; | |
| border-radius: var(--radius-small) ; | |
| font-family: var(--font-geist) ; | |
| font-size: var(--text-body) ; | |
| line-height: 20px ; | |
| color: var(--ink) ; | |
| white-space: nowrap; | |
| } | |
| .gradio-container ul.options li:hover, | |
| .gradio-container ul.options li.active { | |
| background: var(--sunken) ; | |
| } | |
| .gradio-container ul.options li.selected { | |
| background: var(--blink-tint) ; | |
| color: var(--blink-ink) ; | |
| font-weight: 500; | |
| } | |
| .gradio-container ul.options li .inner-item { | |
| display: none; | |
| } | |
| /* --- choices: every radio is a segmented control ------------------------------------- */ | |
| .gradio-container fieldset.block { | |
| margin: 0 ; | |
| min-width: 0 ; | |
| } | |
| .gradio-container fieldset > .wrap:has(> label > input[type="radio"]) { | |
| display: inline-flex ; | |
| flex-wrap: wrap; | |
| gap: 2px ; | |
| max-width: 100%; | |
| padding: 3px ; | |
| border: 0 ; | |
| border-radius: 10px ; | |
| background: var(--sunken) ; | |
| box-shadow: inset 0 0 0 1px rgba(16, 24, 40, 0.03); | |
| } | |
| .gradio-container fieldset > .wrap > label:has(> input[type="radio"]) { | |
| position: relative; | |
| display: inline-flex ; | |
| align-items: center; | |
| min-height: 32px; | |
| margin: 0 ; | |
| padding: 0 12px ; | |
| border: 0 ; | |
| border-radius: 7px ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| color: var(--mid) ; | |
| cursor: pointer; | |
| transition: background-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease; | |
| } | |
| /* the radio dot is the label's job here; the input stays focusable for the keyboard */ | |
| .gradio-container fieldset > .wrap > label > input[type="radio"] { | |
| position: absolute ; | |
| width: 1px ; | |
| height: 1px ; | |
| margin: 0 ; | |
| opacity: 0 ; | |
| pointer-events: none; | |
| } | |
| .gradio-container fieldset > .wrap > label:has(> input[type="radio"]) > span { | |
| margin: 0 ; | |
| font-family: var(--font-geist) ; | |
| font-size: var(--text-small) ; | |
| font-weight: 500 ; | |
| line-height: 18px ; | |
| letter-spacing: 0 ; | |
| color: inherit ; | |
| white-space: nowrap; | |
| } | |
| .gradio-container fieldset > .wrap > label:has(> input[type="radio"]):hover { | |
| color: var(--ink) ; | |
| } | |
| .gradio-container fieldset > .wrap > label.selected:has(> input[type="radio"]) { | |
| background: var(--paper) ; | |
| color: var(--ink) ; | |
| box-shadow: 0 1px 2px rgba(16, 24, 40, 0.1), 0 0 0 1px rgba(16, 24, 40, 0.06) ; | |
| } | |
| .gradio-container fieldset > .wrap > label:has(> input[type="radio"]:focus-visible) { | |
| outline: 2px solid var(--blink); | |
| outline-offset: 1px; | |
| } | |
| .gradio-container fieldset > .wrap > label:has(> input[type="radio"]:disabled) { | |
| opacity: 0.45; | |
| cursor: not-allowed; | |
| } | |
| /* --- checkboxes ----------------------------------------------------------------------- */ | |
| .gradio-container label.checkbox-container { | |
| display: flex ; | |
| align-items: flex-start; | |
| gap: 10px; | |
| cursor: pointer; | |
| } | |
| .gradio-container label.checkbox-container input[type="checkbox"] { | |
| flex: none; | |
| width: 16px ; | |
| height: 16px ; | |
| margin: 2px 0 0 ; | |
| border: 1px solid var(--line-strong) ; | |
| border-radius: var(--radius-xs) ; | |
| background-color: var(--paper) ; | |
| box-shadow: var(--shadow-control) ; | |
| } | |
| .gradio-container label.checkbox-container input[type="checkbox"]:checked { | |
| border-color: var(--blink) ; | |
| background-color: var(--blink) ; | |
| } | |
| .gradio-container label.checkbox-container .label-text, | |
| .gradio-container label.checkbox-container > span { | |
| margin: 0 ; | |
| font-family: var(--font-geist) ; | |
| font-size: var(--text-body) ; | |
| font-weight: 400 ; | |
| line-height: 20px ; | |
| color: var(--ink-soft) ; | |
| } | |
| /* --- buttons -------------------------------------------------------------------------- */ | |
| .gradio-container button.lg, | |
| .gradio-container button.md, | |
| .gradio-container button.sm, | |
| .gradio-container button.primary, | |
| .gradio-container button.secondary { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 8px; | |
| font-family: var(--font-geist) ; | |
| font-size: var(--text-body) ; | |
| font-weight: 500 ; | |
| line-height: 20px ; | |
| letter-spacing: 0 ; | |
| text-transform: none ; | |
| border-radius: var(--radius-control) ; | |
| border: 1px solid var(--line-strong) ; | |
| background: var(--paper) ; | |
| color: var(--ink) ; | |
| box-shadow: var(--shadow-control) ; | |
| transform: none ; | |
| transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease; | |
| } | |
| .gradio-container button.lg { | |
| min-height: 40px; | |
| padding: 0 18px ; | |
| } | |
| .gradio-container button.md { | |
| min-height: 36px; | |
| padding: 0 14px ; | |
| } | |
| .gradio-container button.sm { | |
| min-height: 32px; | |
| padding: 0 12px ; | |
| font-size: var(--text-small) ; | |
| } | |
| .gradio-container button.secondary:hover:not(:disabled) { | |
| background: var(--alt) ; | |
| border-color: #b8bfca ; | |
| } | |
| /* the one filled colour in a workspace is the action that runs blink */ | |
| .gradio-container button.primary { | |
| background: var(--blink) ; | |
| border-color: var(--blink) ; | |
| color: #ffffff ; | |
| font-weight: 600 ; | |
| box-shadow: 0 1px 2px rgba(36, 71, 245, 0.24), inset 0 1px 0 rgba(255, 255, 255, 0.12) ; | |
| } | |
| .gradio-container button.primary:hover:not(:disabled) { | |
| background: var(--color-blink-hover) ; | |
| border-color: var(--color-blink-hover) ; | |
| } | |
| .gradio-container button.primary:active:not(:disabled) { | |
| background: var(--color-blink-deep) ; | |
| } | |
| .gradio-container button:disabled { | |
| opacity: 0.5; | |
| cursor: not-allowed; | |
| } | |
| /* a row of samples or presets: compact secondary buttons that wrap as a whole */ | |
| .blk-chips { | |
| flex-wrap: wrap ; | |
| gap: 6px ; | |
| } | |
| .blk-chips > * { | |
| flex: 0 0 auto ; | |
| min-width: 0 ; | |
| } | |
| .blk-chips button { | |
| white-space: nowrap; | |
| min-width: 0 ; | |
| } | |
| /* --- disclosure: one row, one chevron, for every fold on every tab ------------------------ */ | |
| /* gradio's accordions */ | |
| .gradio-container .gr-accordion { | |
| margin: 0 ; | |
| padding: 0 ; | |
| border: 1px solid var(--line) ; | |
| border-radius: 10px ; | |
| background: var(--paper) ; | |
| } | |
| .gradio-container .gr-accordion > button.label-wrap { | |
| position: relative; | |
| display: flex ; | |
| align-items: center ; | |
| justify-content: space-between ; | |
| gap: 12px; | |
| width: 100% ; | |
| min-height: 44px; | |
| margin: 0 ; | |
| padding: 0 40px 0 14px ; | |
| border: 0 ; | |
| border-radius: 10px ; | |
| background: transparent ; | |
| color: var(--ink) ; | |
| text-align: left; | |
| cursor: pointer; | |
| } | |
| .gradio-container .gr-accordion > button.label-wrap > span:first-child { | |
| font-family: var(--font-geist) ; | |
| font-size: var(--text-body) ; | |
| font-weight: 500 ; | |
| line-height: 20px ; | |
| letter-spacing: 0 ; | |
| color: inherit ; | |
| } | |
| .gradio-container .gr-accordion > button.label-wrap:hover { | |
| background: var(--alt) ; | |
| } | |
| .gradio-container .gr-accordion > button.label-wrap.open { | |
| margin-bottom: 0 ; | |
| border-bottom-left-radius: 0 ; | |
| border-bottom-right-radius: 0 ; | |
| } | |
| /* gradio's toggle is a rotated text triangle that reaches past the row; a drawn chevron stays inside */ | |
| .gradio-container .gr-accordion > button.label-wrap > .icon { | |
| display: none ; | |
| } | |
| .gradio-container .gr-accordion > button.label-wrap::after, | |
| details.blk-d > summary::after, | |
| details.blk-more > summary::after, | |
| details.doc-method > summary::after, | |
| details.doc-seg > summary::after, | |
| details.blk-model-info > summary::after { | |
| content: ""; | |
| position: absolute; | |
| top: 50%; | |
| right: 16px; | |
| width: 7px; | |
| height: 7px; | |
| margin-top: -6px; | |
| border: solid var(--mid); | |
| border-width: 0 1.6px 1.6px 0; | |
| transform: rotate(45deg); | |
| transition: transform 0.2s var(--ease), margin-top 0.2s var(--ease); | |
| } | |
| .gradio-container .gr-accordion > button.label-wrap.open::after, | |
| details.blk-d[open] > summary::after, | |
| details.blk-more[open] > summary::after, | |
| details.doc-method[open] > summary::after, | |
| details.doc-seg[open] > summary::after, | |
| details.blk-model-info[open] > summary::after { | |
| margin-top: -2px; | |
| transform: rotate(-135deg); | |
| } | |
| .gradio-container .gr-accordion > [data-testid="accordion-content"] { | |
| padding: 4px 14px 14px ; | |
| } | |
| .gradio-container .gr-accordion > [data-testid="accordion-content"] > .column { | |
| gap: 12px ; | |
| } | |
| /* the page's own folds */ | |
| details.blk-d { | |
| margin: 0; | |
| border: 1px solid var(--line); | |
| border-radius: 10px; | |
| background: var(--paper); | |
| } | |
| /* folds that follow one another read as one list */ | |
| details.blk-d + details.blk-d { | |
| margin-top: -1px; | |
| border-top-left-radius: 0; | |
| border-top-right-radius: 0; | |
| } | |
| details.blk-d:has(+ details.blk-d) { | |
| border-bottom-left-radius: 0; | |
| border-bottom-right-radius: 0; | |
| } | |
| details.blk-d > summary, | |
| details.blk-more > summary, | |
| details.doc-method > summary, | |
| details.blk-model-info > summary { | |
| position: relative; | |
| display: flex; | |
| align-items: center; | |
| min-height: 44px; | |
| padding: 0 40px 0 14px; | |
| list-style: none; | |
| font-size: var(--text-body); | |
| font-weight: 500; | |
| line-height: 20px; | |
| color: var(--ink); | |
| cursor: pointer; | |
| border-radius: 10px; | |
| transition: background-color 0.15s ease; | |
| } | |
| details.blk-d > summary:hover { | |
| background: var(--alt); | |
| } | |
| details.blk-d + details.blk-d > summary { | |
| border-radius: 0; | |
| } | |
| details.blk-d:last-child > summary, | |
| details.blk-d:not(:has(+ details.blk-d)) > summary { | |
| border-bottom-left-radius: 10px; | |
| border-bottom-right-radius: 10px; | |
| } | |
| details.blk-d[open] > summary { | |
| border-bottom-left-radius: 0; | |
| border-bottom-right-radius: 0; | |
| } | |
| details > summary::-webkit-details-marker { | |
| display: none; | |
| } | |
| details > summary::marker { | |
| content: ""; | |
| } | |
| /* what a fold holds: the same inset as its summary, the space at the bottom as padding, since | |
| gradio zeroes the last child's margin */ | |
| details.blk-d > :not(summary) { | |
| margin-left: 14px ; | |
| margin-right: 14px ; | |
| } | |
| details.blk-d > p, | |
| details.blk-d > ul, | |
| details.blk-d > ol { | |
| max-width: 720px; | |
| margin-top: 0 ; | |
| margin-bottom: 12px ; | |
| font-size: var(--text-body); | |
| line-height: 1.6; | |
| color: var(--ink-soft); | |
| } | |
| details.blk-d > :nth-child(2) { | |
| margin-top: 4px ; | |
| } | |
| details.blk-d[open] { | |
| padding-bottom: 6px; | |
| } | |
| details.blk-d > .blk-links { | |
| margin-bottom: 12px ; | |
| } | |
| /* inside a card a fold is a row of the card: a hairline above, no box of its own */ | |
| details.blk-more, | |
| details.doc-method { | |
| margin: 0; | |
| border-top: 1px solid var(--line); | |
| } | |
| details.blk-more > summary, | |
| details.doc-method > summary { | |
| min-height: 40px; | |
| padding: 0 32px 0 0; | |
| border-radius: 0; | |
| font-size: var(--text-small); | |
| color: var(--ink-soft); | |
| } | |
| details.blk-more > summary::after, | |
| details.doc-method > summary::after { | |
| right: 4px; | |
| } | |
| details.blk-more > summary:hover, | |
| details.doc-method > summary:hover { | |
| color: var(--ink); | |
| } | |
| details.blk-more[open], | |
| details.doc-method[open] { | |
| padding-bottom: 12px; | |
| } | |
| details.blk-more > p, | |
| details.doc-method > p { | |
| max-width: 720px; | |
| margin: 0 0 10px ; | |
| font-size: var(--text-small); | |
| line-height: 1.6; | |
| color: var(--ink-soft); | |
| } | |
| /* --- code and data -------------------------------------------------------------------- */ | |
| .blk-pre { | |
| margin: 4px 0 12px; | |
| padding: 12px 14px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-control); | |
| background: var(--alt); | |
| color: var(--ink-soft); | |
| font-family: var(--font-geist-mono); | |
| font-size: 12.5px; | |
| line-height: 1.65; | |
| white-space: pre-wrap; | |
| overflow-wrap: anywhere; | |
| overflow-x: auto; | |
| tab-size: 4; | |
| } | |
| .blk-pre b { | |
| color: var(--ink); | |
| font-weight: 600; | |
| } | |
| .gradio-container .cm-editor { | |
| background: var(--paper) ; | |
| border: 1px solid var(--line-strong) ; | |
| border-radius: var(--radius-control) ; | |
| overflow: hidden; | |
| font-size: 12.5px; | |
| } | |
| .gradio-container .cm-editor.cm-focused { | |
| border-color: var(--blink) ; | |
| box-shadow: var(--ring); | |
| outline: none ; | |
| } | |
| .gradio-container .cm-editor .cm-content, | |
| .gradio-container .cm-editor .cm-gutters { | |
| font-family: var(--font-geist-mono) ; | |
| font-size: 12.5px ; | |
| line-height: 1.6 ; | |
| } | |
| /* one ink for the JSON in either colour scheme: the editor's own palettes are too pale on paper */ | |
| .gradio-container .cm-content, | |
| .gradio-container .cm-content span { | |
| color: var(--ink-soft) ; | |
| caret-color: var(--ink); | |
| } | |
| .gradio-container .cm-cursor { | |
| border-left-color: var(--ink) ; | |
| } | |
| .gradio-container .cm-selectionBackground, | |
| .gradio-container .cm-focused .cm-selectionBackground { | |
| background: var(--blink-tint) ; | |
| } | |
| .gradio-container .cm-gutters { | |
| background: var(--alt) ; | |
| border-right: 1px solid var(--line) ; | |
| color: var(--faint) ; | |
| } | |
| .gradio-container .cm-activeLine, | |
| .gradio-container .cm-activeLineGutter { | |
| background: transparent ; | |
| } | |
| /* the copy and download buttons gradio pins to an editor's corner */ | |
| .gradio-container .icon-button-wrapper.top-panel { | |
| top: 30px ; | |
| right: 6px ; | |
| padding: 2px ; | |
| gap: 2px; | |
| border: 1px solid var(--line) ; | |
| border-radius: var(--radius-small) ; | |
| background: var(--paper) ; | |
| box-shadow: var(--shadow-control) ; | |
| } | |
| .gradio-container .icon-button-wrapper.top-panel button.icon-button { | |
| width: 26px ; | |
| height: 26px ; | |
| border-radius: var(--radius-xs) ; | |
| color: var(--mid) ; | |
| } | |
| /* the JSON viewer */ | |
| .gradio-container [data-testid="json"] { | |
| border: 1px solid var(--line) ; | |
| border-radius: var(--radius-control) ; | |
| background: var(--alt) ; | |
| } | |
| .gradio-container [data-testid="json"] > div:first-child:has(label) { | |
| padding: 10px 12px 0 ; | |
| } | |
| .gradio-container .json-holder { | |
| padding: 6px 12px 12px ; | |
| font-family: var(--font-geist-mono) ; | |
| font-size: 12.5px ; | |
| } | |
| .gradio-container .json-holder * { | |
| font-family: var(--font-geist-mono) ; | |
| font-size: 12.5px ; | |
| line-height: 20px ; | |
| } | |
| /* a long value wraps inside the viewer rather than pushing it sideways */ | |
| .gradio-container .json-holder .content { | |
| flex-wrap: wrap; | |
| min-width: 0; | |
| } | |
| .gradio-container .json-holder .value { | |
| min-width: 0; | |
| white-space: normal; | |
| overflow-wrap: anywhere; | |
| } | |
| /* --- files ----------------------------------------------------------------------------- */ | |
| /* a drop zone: one dashed box, the words centred */ | |
| .gradio-container button.upload-container { | |
| height: auto ; | |
| min-height: 132px ; | |
| border: 1px dashed var(--line-strong) ; | |
| border-radius: 10px ; | |
| background: var(--alt) ; | |
| transition: border-color 0.15s ease, background-color 0.15s ease; | |
| } | |
| .gradio-container button.upload-container:hover { | |
| border-color: var(--blink) ; | |
| background: var(--blink-tint) ; | |
| } | |
| .gradio-container button.upload-container .wrap { | |
| padding: 0 ; | |
| font-family: var(--font-geist) ; | |
| font-size: var(--text-body) ; | |
| line-height: 1.5 ; | |
| color: var(--mid) ; | |
| } | |
| .gradio-container button.upload-container .icon-wrap svg { | |
| width: 22px; | |
| height: 22px; | |
| color: var(--blink); | |
| } | |
| .gradio-container button.upload-container .or { | |
| color: var(--faint) ; | |
| } | |
| /* a list of files: name, size and the link to fetch it, one row each */ | |
| .gradio-container .file-preview-holder { | |
| overflow: visible ; | |
| } | |
| .gradio-container table.file-preview { | |
| width: 100%; | |
| margin: 0 ; | |
| border-collapse: separate ; | |
| border-spacing: 0; | |
| border: 1px solid var(--line) ; | |
| border-radius: var(--radius-control); | |
| overflow: hidden; | |
| } | |
| .gradio-container table.file-preview tbody, | |
| .gradio-container table.file-preview tr { | |
| border: 0 ; | |
| } | |
| .gradio-container table.file-preview tr.file { | |
| display: flex; | |
| align-items: center; | |
| min-height: 44px; | |
| background: var(--paper) ; | |
| border-top: 1px solid var(--line) ; | |
| } | |
| .gradio-container table.file-preview tr.file:first-child { | |
| border-top: 0 ; | |
| } | |
| .gradio-container table.file-preview td { | |
| border: 0 ; | |
| padding: 0 12px ; | |
| font-family: var(--font-geist) ; | |
| font-size: var(--text-body) ; | |
| color: var(--ink) ; | |
| } | |
| .gradio-container table.file-preview td.filename { | |
| flex: 1 1 auto; | |
| min-width: 0; | |
| font-weight: 500; | |
| } | |
| .gradio-container table.file-preview td.download { | |
| flex: none; | |
| margin-left: auto; | |
| } | |
| .gradio-container table.file-preview a.download-link { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| color: var(--blink-ink) ; | |
| font-size: var(--text-small) ; | |
| font-weight: 500; | |
| font-variant-numeric: tabular-nums; | |
| text-decoration: none ; | |
| } | |
| .gradio-container table.file-preview a.download-link:hover { | |
| text-decoration: underline ; | |
| text-underline-offset: 3px; | |
| } | |
| /* an uploaded file's row leaves room for the Clear button gradio pins to its corner */ | |
| #doc-upload table.file-preview td.download { | |
| padding-right: 52px ; | |
| } | |
| /* a download list offers files; it has nothing to remove */ | |
| #doc-downloads .label-clear-button, | |
| #doc-downloads td:has(> .label-clear-button) { | |
| display: none ; | |
| } | |
| /* --- navigation: three levels, three looks --------------------------------------------- | |
| Gradio measures a hidden copy of each strip's buttons to decide what fits and moves the rest | |
| into a menu, so both copies get the same size, and spacing is padding, never gap or margin. | |
| 1. The app's five places: text tabs on a hairline, the one in view underlined in cobalt. | |
| 2. Explore's five pages: quiet pill tabs, the one in view tinted. | |
| 3. The use cases: smaller text tabs on their own hairline. */ | |
| .gradio-container .tab-wrapper { | |
| height: auto ; | |
| padding: 0 ; | |
| } | |
| .gradio-container .tab-container { | |
| gap: 0 ; | |
| background: transparent ; | |
| border: 0 ; | |
| } | |
| .gradio-container .tab-container > button { | |
| height: 100% ; | |
| margin: 0 ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| font-family: var(--font-geist) ; | |
| font-weight: 500 ; | |
| letter-spacing: 0 ; | |
| color: var(--mid) ; | |
| transition: color 0.15s ease, background-color 0.15s ease; | |
| } | |
| .gradio-container .tab-container > button:hover:not(.selected) { | |
| color: var(--ink) ; | |
| background: transparent ; | |
| } | |
| .gradio-container .tab-container > button.selected { | |
| color: var(--ink) ; | |
| } | |
| .gradio-container .tab-container > button:focus-visible { | |
| outline-offset: -3px ; | |
| border-radius: var(--radius-small) ; | |
| } | |
| #blink-navigation > .tab-wrapper { | |
| margin: 0 0 28px ; | |
| } | |
| #blink-navigation > .tab-wrapper > .tab-container { | |
| height: 44px ; | |
| } | |
| #blink-navigation > .tab-wrapper > .tab-container::after { | |
| height: 1px; | |
| background-color: var(--line) ; | |
| } | |
| #blink-navigation > .tab-wrapper > .tab-container > button { | |
| padding: 0 12px ; | |
| font-size: var(--text-body) ; | |
| line-height: 20px ; | |
| } | |
| #blink-navigation > .tab-wrapper > .tab-container > button.selected::after, | |
| #blink-cases > .tab-wrapper > .tab-container > button.selected::after { | |
| content: ""; | |
| display: block ; | |
| position: absolute; | |
| left: 12px; | |
| right: 12px; | |
| bottom: 0; | |
| width: auto ; | |
| height: 2px; | |
| border-radius: 2px 2px 0 0; | |
| background-color: var(--blink) ; | |
| animation: none ; | |
| } | |
| #blink-explore > .tab-wrapper { | |
| margin: -8px 0 24px ; | |
| } | |
| #blink-explore > .tab-wrapper > .tab-container { | |
| height: 34px ; | |
| } | |
| #blink-explore > .tab-wrapper > .tab-container::after, | |
| #blink-explore > .tab-wrapper > .tab-container > button::after { | |
| display: none ; | |
| } | |
| #blink-explore > .tab-wrapper > .tab-container > button { | |
| height: 32px ; | |
| padding: 0 12px ; | |
| border-radius: var(--radius-control) ; | |
| font-size: var(--text-small) ; | |
| line-height: 18px ; | |
| } | |
| #blink-explore > .tab-wrapper > .tab-container > button:hover:not(.selected) { | |
| background: var(--sunken) ; | |
| } | |
| #blink-explore > .tab-wrapper > .tab-container > button.selected { | |
| background: var(--blink-tint) ; | |
| color: var(--blink-ink) ; | |
| } | |
| #blink-cases > .tab-wrapper { | |
| margin: 0 0 20px ; | |
| } | |
| #blink-cases > .tab-wrapper > .tab-container { | |
| height: 38px ; | |
| } | |
| #blink-cases > .tab-wrapper > .tab-container::after { | |
| height: 1px; | |
| background-color: var(--line) ; | |
| } | |
| #blink-cases > .tab-wrapper > .tab-container > button { | |
| padding: 0 12px ; | |
| font-size: var(--text-small) ; | |
| line-height: 18px ; | |
| } | |
| /* what does not fit waits behind one button */ | |
| .gradio-container .overflow-menu { | |
| margin-left: 6px ; | |
| } | |
| .gradio-container .overflow-menu > button { | |
| height: 32px ; | |
| min-width: 36px ; | |
| padding: 0 8px ; | |
| border: 1px solid var(--line) ; | |
| border-radius: var(--radius-control) ; | |
| background: var(--paper) ; | |
| color: var(--ink-soft) ; | |
| box-shadow: var(--shadow-control) ; | |
| } | |
| .gradio-container .overflow-menu > button:hover { | |
| background: var(--alt) ; | |
| } | |
| .gradio-container .overflow-dropdown { | |
| padding: 4px ; | |
| border: 1px solid var(--line) ; | |
| border-radius: var(--radius-control) ; | |
| background: var(--paper) ; | |
| box-shadow: var(--shadow-pop) ; | |
| } | |
| .gradio-container .overflow-dropdown button { | |
| height: auto ; | |
| padding: 8px 10px ; | |
| border-radius: var(--radius-small) ; | |
| font-family: var(--font-geist) ; | |
| font-size: var(--text-body) ; | |
| font-weight: 500 ; | |
| color: var(--ink) ; | |
| background: transparent ; | |
| } | |
| .gradio-container .overflow-dropdown button:hover, | |
| .gradio-container .overflow-dropdown button.overflow-item-selected { | |
| background: var(--sunken) ; | |
| } | |
| .gradio-container .tabitem { | |
| padding: 0 ; | |
| border: 0 ; | |
| background: transparent ; | |
| } | |
| /* --- masthead: one row of name, claim, model and links ------------------------------- */ | |
| .blk-top { | |
| position: relative; | |
| display: grid; | |
| grid-template-columns: auto minmax(0, 1fr) auto auto auto; | |
| grid-template-areas: "brand lede model info links"; | |
| align-items: center; | |
| column-gap: 16px; | |
| row-gap: 8px; | |
| padding: 20px 0 14px; | |
| } | |
| body:has(#huggingface-space-header) .blk-top { | |
| padding-top: 64px; | |
| } | |
| .blk-toprow { | |
| display: contents; | |
| } | |
| .blk-top h1 { | |
| grid-area: brand; | |
| margin: 0 ; | |
| font-family: var(--font-geist); | |
| font-size: 27px ; | |
| font-weight: 700 ; | |
| line-height: 1 ; | |
| letter-spacing: -0.05em; | |
| color: var(--ink); | |
| } | |
| /* the name, and after it one cobalt dot that blinks once when the page opens */ | |
| .blk-top h1 .blk-word { | |
| position: relative; | |
| display: inline-block; | |
| padding-right: 0.3em; | |
| } | |
| .blk-top h1 em.blk-mark { | |
| position: absolute; | |
| right: 0.03em; | |
| bottom: 0.06em; | |
| width: 0.21em; | |
| height: 0.21em; | |
| border-radius: 50%; | |
| background: var(--blink); | |
| transform-origin: 50% 50%; | |
| animation: blk-lid 0.42s ease-in-out 0.55s 1 both; | |
| } | |
| .blk-top .blk-lede { | |
| grid-area: lede; | |
| max-width: 600px; | |
| margin: 0 ; | |
| padding-left: 16px; | |
| border-left: 1px solid var(--line); | |
| font-size: var(--text-small); | |
| line-height: 1.45; | |
| color: var(--mid); | |
| } | |
| .blk-meta { | |
| grid-area: model; | |
| display: flex; | |
| min-width: 0; | |
| } | |
| /* which blink is answering the panel in view */ | |
| .blk-meta span.key { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 7px; | |
| max-width: 100%; | |
| height: 28px; | |
| padding: 0 10px; | |
| border: 1px solid var(--blink-line); | |
| border-radius: var(--radius-round); | |
| background: var(--blink-tint); | |
| color: var(--blink-ink); | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| line-height: 1; | |
| white-space: nowrap; | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| animation: blk-pop 0.4s var(--ease) both; | |
| } | |
| .blk-meta span.key::before { | |
| content: ""; | |
| flex: none; | |
| width: 6px; | |
| height: 6px; | |
| border-radius: 50%; | |
| background: var(--blink); | |
| } | |
| /* the base model, one click away, over the page rather than pushing it down */ | |
| details.blk-model-info { | |
| grid-area: info; | |
| position: static; | |
| } | |
| details.blk-model-info > summary { | |
| min-height: 28px; | |
| padding: 0 22px 0 4px; | |
| border-radius: var(--radius-small); | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| color: var(--mid); | |
| } | |
| details.blk-model-info > summary:hover { | |
| color: var(--ink); | |
| } | |
| details.blk-model-info > summary::after { | |
| right: 6px; | |
| width: 6px; | |
| height: 6px; | |
| margin-top: -5px; | |
| } | |
| details.blk-model-info[open] > summary::after { | |
| margin-top: -1px; | |
| } | |
| details.blk-model-info > p { | |
| position: absolute; | |
| top: calc(100% - 6px); | |
| right: 0; | |
| z-index: 20; | |
| width: max-content; | |
| max-width: min(360px, 80vw); | |
| margin: 0 ; | |
| padding: 10px 12px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-control); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-pop); | |
| font-size: var(--text-small); | |
| line-height: 1.5; | |
| color: var(--ink-soft); | |
| } | |
| .blk-toplinks { | |
| grid-area: links; | |
| display: flex; | |
| align-items: center; | |
| gap: 2px; | |
| } | |
| .blk-toplinks a { | |
| display: inline-flex; | |
| align-items: center; | |
| height: 32px; | |
| padding: 0 10px; | |
| border-radius: var(--radius-control); | |
| color: var(--mid) ; | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| line-height: 1; | |
| text-decoration: none ; | |
| white-space: nowrap; | |
| transition: background-color 0.15s ease, color 0.15s ease; | |
| } | |
| .blk-toplinks a:hover { | |
| background: var(--sunken); | |
| color: var(--ink) ; | |
| } | |
| /* the links a page points to: quiet outlined buttons */ | |
| .blk-links { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 6px; | |
| margin: 12px 0 0; | |
| } | |
| .blk-links a { | |
| display: inline-flex; | |
| align-items: center; | |
| min-height: 30px; | |
| padding: 0 12px; | |
| border: 1px solid var(--line-strong); | |
| border-radius: var(--radius-control); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-control); | |
| color: var(--ink) ; | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| line-height: 1; | |
| text-decoration: none ; | |
| white-space: nowrap; | |
| transition: background-color 0.15s ease, border-color 0.15s ease; | |
| } | |
| .blk-links a::after { | |
| content: "\2197"; | |
| margin-left: 6px; | |
| font-size: 12px; | |
| color: var(--mid); | |
| } | |
| .blk-links a:hover { | |
| background: var(--alt); | |
| border-color: #b8bfca; | |
| } | |
| .blk-foot { | |
| margin: 56px 0 0 ; | |
| padding: 16px 0 8px; | |
| border-top: 1px solid var(--line); | |
| font-size: var(--text-caption); | |
| line-height: 1.6; | |
| color: var(--mid); | |
| } | |
| /* --- words ------------------------------------------------------------------------------ */ | |
| .blk-note { | |
| max-width: 720px; | |
| margin: 0 0 4px ; | |
| font-size: var(--text-body); | |
| line-height: 1.6; | |
| color: var(--mid); | |
| } | |
| .blk-eyebrow { | |
| margin: 0 0 10px ; | |
| font-size: var(--text-caption); | |
| font-weight: 600; | |
| line-height: 1.4; | |
| letter-spacing: 0.06em; | |
| text-transform: uppercase; | |
| color: var(--mid); | |
| } | |
| .blk-h2, | |
| .doc-intro h2, | |
| .blk-cuax-title { | |
| margin: 0 0 6px ; | |
| font-family: var(--font-geist); | |
| font-size: var(--text-heading); | |
| font-weight: 600 ; | |
| line-height: 1.25 ; | |
| letter-spacing: -0.022em; | |
| color: var(--ink); | |
| } | |
| /* a section inside a page: its title, then a note, then what it holds */ | |
| .blk-section { | |
| margin: 0 0 4px ; | |
| font-family: var(--font-geist); | |
| font-size: var(--text-title) ; | |
| font-weight: 600 ; | |
| line-height: 1.35 ; | |
| letter-spacing: -0.01em; | |
| color: var(--ink); | |
| } | |
| .blk-section + .blk-cuax-cards { | |
| margin-top: 12px; | |
| } | |
| .blk-label { | |
| display: block; | |
| margin: 0 0 6px; | |
| font-size: var(--text-small); | |
| font-weight: 600; | |
| line-height: 18px; | |
| color: var(--ink-soft); | |
| } | |
| .blk-form-head { | |
| display: flex; | |
| align-items: baseline; | |
| flex-wrap: wrap; | |
| gap: 4px 8px; | |
| margin: 0 ; | |
| } | |
| .blk-form-head span { | |
| font-size: var(--text-small); | |
| font-weight: 400; | |
| color: var(--mid); | |
| } | |
| .blk-hint { | |
| color: var(--mid); | |
| } | |
| .blk-demo { | |
| max-width: 62ch; | |
| margin: 0 ; | |
| font-size: var(--text-small); | |
| line-height: 1.5; | |
| color: var(--mid); | |
| } | |
| /* --- tags: small, round, one line ------------------------------------------------------- */ | |
| .blk-tag, | |
| .blk-kind { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| height: 22px; | |
| padding: 0 8px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-round); | |
| background: var(--paper); | |
| font-family: var(--font-geist); | |
| font-size: var(--text-caption); | |
| font-style: normal; | |
| font-weight: 500; | |
| line-height: 1; | |
| letter-spacing: 0; | |
| color: var(--mid); | |
| white-space: nowrap; | |
| vertical-align: middle; | |
| } | |
| .blk-kind { | |
| height: 20px; | |
| border-color: transparent; | |
| background: var(--sunken); | |
| color: var(--ink-soft); | |
| } | |
| /* where an answer came from: a saved run of the model, a live run with its time, or the mock */ | |
| .blk-tag.blk-from { | |
| cursor: help; | |
| } | |
| .blk-tag.blk-from::before { | |
| content: ""; | |
| flex: none; | |
| width: 6px; | |
| height: 6px; | |
| border-radius: 50%; | |
| box-shadow: inset 0 0 0 1.5px var(--mid); | |
| } | |
| .blk-tag.blk-from.saved { | |
| color: var(--ink-soft); | |
| } | |
| .blk-tag.blk-from.live { | |
| border-color: var(--blink-line); | |
| background: var(--blink-tint); | |
| color: var(--blink-ink); | |
| } | |
| .blk-tag.blk-from.live::before { | |
| background: var(--blink); | |
| box-shadow: none; | |
| } | |
| .blk-tag.blk-from.mock { | |
| border-style: dashed; | |
| border-color: var(--line-strong); | |
| } | |
| /* --- notices ----------------------------------------------------------------------------- */ | |
| /* an error, and only an error, is red */ | |
| .blk-warn { | |
| margin: 0 0 12px ; | |
| padding: 10px 12px; | |
| border: 1px solid var(--color-error-line); | |
| border-radius: var(--radius-control); | |
| background: var(--color-error-bg); | |
| color: var(--color-error) ; | |
| font-size: var(--text-small); | |
| line-height: 1.5; | |
| } | |
| /* mock mode is a fact about the numbers, not a failure */ | |
| .blk-warn.blk-mock, | |
| .blk-warn.blk-synthetic { | |
| border-color: var(--line); | |
| background: var(--alt); | |
| color: var(--ink-soft) ; | |
| } | |
| .blk-warn.blk-mock::before { | |
| content: "Mock"; | |
| display: inline-block; | |
| margin-right: 8px; | |
| padding: 1px 6px; | |
| border: 1px dashed var(--line-strong); | |
| border-radius: var(--radius-xs); | |
| font-size: 11px; | |
| font-weight: 600; | |
| letter-spacing: 0.04em; | |
| text-transform: uppercase; | |
| color: var(--mid); | |
| } | |
| .blk-notice, | |
| .blk-empty { | |
| display: flex; | |
| align-items: flex-start; | |
| gap: 10px; | |
| padding: 14px 16px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--alt); | |
| animation: blk-rise 0.4s var(--ease) both; | |
| } | |
| .blk-empty { | |
| border-style: dashed; | |
| border-color: var(--line-strong); | |
| background: var(--paper); | |
| } | |
| .blk-notice p, | |
| .blk-empty p { | |
| max-width: 62ch; | |
| margin: 0 ; | |
| font-size: var(--text-body); | |
| line-height: 1.55; | |
| color: var(--ink-soft); | |
| } | |
| .blk-dotmark { | |
| flex: none; | |
| width: 8px; | |
| height: 8px; | |
| margin-top: 7px; | |
| border-radius: 50%; | |
| background: var(--faint); | |
| animation: blk-lid 0.42s ease-in-out 0.2s 1 both; | |
| } | |
| .blk-problems { | |
| display: grid; | |
| gap: 2px; | |
| margin: 0 ; | |
| padding: 10px 12px ; | |
| list-style: none; | |
| border: 1px solid var(--color-error-line); | |
| border-radius: var(--radius-control); | |
| background: var(--color-error-bg); | |
| color: var(--color-error); | |
| font-size: var(--text-small); | |
| line-height: 1.6; | |
| } | |
| .blk-problems li { | |
| margin: 0 ; | |
| color: var(--color-error) ; | |
| } | |
| .blk-locked { | |
| margin: 6px 0 0 ; | |
| font-size: var(--text-caption); | |
| color: var(--mid); | |
| } | |
| /* an empty problem strip takes no room at all */ | |
| .blk-trouble:has(.prose:empty), | |
| .blk-trouble:has(.html-container:empty) { | |
| display: none ; | |
| } | |
| /* --- waiting on the model -------------------------------------------------------------- */ | |
| .blk-sk-card { | |
| animation: blk-rise 0.35s var(--ease) both; | |
| animation-delay: var(--d, 0ms); | |
| } | |
| /* a flat tone that breathes while the model runs; no gradient */ | |
| .blk-sk { | |
| background: #eef0f3; | |
| border-radius: var(--radius-small); | |
| animation: blk-shimmer 1.4s ease-in-out infinite; | |
| } | |
| .blk-sk-kicker { | |
| width: 34%; | |
| height: 12px; | |
| margin-bottom: 14px; | |
| } | |
| .blk-sk-head { | |
| width: 46%; | |
| height: 26px; | |
| margin-bottom: 18px; | |
| } | |
| .blk-sk-row { | |
| height: 8px; | |
| margin-bottom: 12px; | |
| border-radius: var(--radius-round); | |
| animation-delay: calc(var(--i, 0) * 120ms); | |
| } | |
| .blk-sk-row:nth-child(3) { | |
| width: 92%; | |
| } | |
| .blk-sk-row:nth-child(4) { | |
| width: 76%; | |
| } | |
| .blk-sk-row:nth-child(5) { | |
| width: 84%; | |
| margin-bottom: 0; | |
| } | |
| .blk-run::before { | |
| content: ""; | |
| display: inline-block; | |
| width: 7px; | |
| height: 7px; | |
| margin-right: 8px; | |
| border-radius: 50%; | |
| background: var(--blink); | |
| vertical-align: 1px; | |
| animation: blk-pulse 1.2s ease-in-out infinite; | |
| } | |
| /* --- probabilities: name, bar, number ---------------------------------------------------- */ | |
| .blk-opts { | |
| display: grid; | |
| gap: 8px; | |
| margin: 14px 0 0 ; | |
| padding: 0 ; | |
| list-style: none ; | |
| } | |
| .blk-opt { | |
| display: grid; | |
| grid-template-columns: minmax(0, 200px) minmax(0, 1fr) 60px; | |
| align-items: center; | |
| gap: 14px; | |
| margin: 0 ; | |
| font-size: var(--text-small); | |
| line-height: 18px; | |
| } | |
| .blk-opt .k { | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| white-space: nowrap; | |
| color: var(--mid) ; | |
| } | |
| .blk-opt.win .k { | |
| color: var(--ink) ; | |
| font-weight: 600; | |
| } | |
| .blk-opt .track { | |
| height: 6px; | |
| border-radius: var(--radius-round); | |
| background: var(--track); | |
| overflow: hidden; | |
| } | |
| /* every bar is blink's own probability; the one it picked is the full cobalt */ | |
| .blk-opt .track i { | |
| display: block; | |
| height: 100%; | |
| border-radius: var(--radius-round); | |
| background: var(--blink-light); | |
| transform-origin: left center; | |
| animation: blk-wipe 0.5s var(--ease) both; | |
| animation-delay: calc(var(--d, 0ms) + var(--i, 0) * 40ms); | |
| } | |
| .blk-opt.win .track i { | |
| background: var(--blink); | |
| } | |
| .blk-opt .v { | |
| text-align: right; | |
| font-variant-numeric: tabular-nums; | |
| color: var(--mid) ; | |
| } | |
| .blk-opt.win .v { | |
| color: var(--ink) ; | |
| font-weight: 600; | |
| } | |
| /* --- facts about a run: a quiet line, numbers inked ----------------------------------- */ | |
| .blk-stats { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| gap: 6px 16px; | |
| margin: 0 ; | |
| font-size: var(--text-small); | |
| line-height: 20px; | |
| color: var(--mid); | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .blk-stats b { | |
| color: var(--ink); | |
| font-weight: 600; | |
| } | |
| /* the blink that answered, tagged as the masthead tags it */ | |
| .blk-stats span.blk-by { | |
| display: inline-flex; | |
| align-items: center; | |
| height: 22px; | |
| padding: 0 8px; | |
| border-radius: var(--radius-round); | |
| background: var(--blink-tint); | |
| } | |
| .blk-stats span.blk-by b { | |
| color: var(--blink-ink); | |
| font-weight: 500; | |
| } | |
| /* --- a result: one card, its parts divided by hairlines ---------------------------------- */ | |
| .blk-result, | |
| .blk-q, | |
| .blk-verdict { | |
| background: var(--paper); | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| box-shadow: var(--shadow-subtle); | |
| } | |
| .blk-result { | |
| overflow: hidden; | |
| animation: blk-rise 0.4s var(--ease) both; | |
| } | |
| .blk-q, | |
| .blk-verdict { | |
| padding: 18px 20px; | |
| } | |
| .blk-answers { | |
| display: grid; | |
| gap: 12px; | |
| } | |
| .blk-result .blk-answers { | |
| gap: 0; | |
| } | |
| .blk-result .blk-q, | |
| .blk-result > .blk-verdict { | |
| border: 0; | |
| border-radius: 0; | |
| box-shadow: none; | |
| } | |
| .blk-result .blk-q + .blk-q, | |
| .blk-result > .blk-verdict + .blk-answers { | |
| border-top: 1px solid var(--line); | |
| } | |
| .blk-result > .blk-warn.blk-mock { | |
| margin: 0 ; | |
| padding: 9px 20px; | |
| border: 0; | |
| border-bottom: 1px solid var(--line); | |
| border-radius: 0; | |
| font-size: var(--text-small); | |
| } | |
| .blk-q { | |
| animation: blk-rise 0.42s var(--ease) both; | |
| animation-delay: var(--d, 0ms); | |
| } | |
| /* a question reads as a question: what it asks first, its name and type quietly under it */ | |
| .blk-q-head { | |
| display: grid; | |
| gap: 6px; | |
| } | |
| .blk-q-head p { | |
| margin: 0 ; | |
| font-size: var(--text-body-lg); | |
| font-weight: 500; | |
| line-height: 1.45; | |
| color: var(--ink) ; | |
| overflow-wrap: anywhere; | |
| } | |
| .blk-q-head p:empty { | |
| display: none; | |
| } | |
| .blk-q-meta { | |
| display: flex; | |
| align-items: center; | |
| flex-wrap: wrap; | |
| gap: 8px; | |
| } | |
| .blk-q-head h4, | |
| .blk-q-meta b { | |
| margin: 0 ; | |
| font-family: var(--font-geist-mono) ; | |
| font-size: var(--text-caption) ; | |
| font-weight: 500 ; | |
| line-height: 20px ; | |
| color: var(--mid) ; | |
| } | |
| /* the answer, large; what it means, small beside it */ | |
| .blk-headline { | |
| display: flex; | |
| align-items: baseline; | |
| flex-wrap: wrap; | |
| gap: 4px 10px; | |
| margin: 14px 0 0; | |
| } | |
| .blk-headline b { | |
| font-size: 26px; | |
| font-weight: 600; | |
| line-height: 1.15; | |
| letter-spacing: -0.02em; | |
| color: var(--ink) ; | |
| overflow-wrap: anywhere; | |
| } | |
| .blk-headline .blk-sub { | |
| font-size: var(--text-small); | |
| color: var(--mid) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| /* the policy's reading of the answers: one mark, one line */ | |
| .blk-verdict { | |
| display: flex; | |
| align-items: flex-start; | |
| gap: 14px; | |
| margin: 0 0 12px; | |
| animation: blk-rise 0.4s var(--ease) both; | |
| } | |
| .blk-result > .blk-verdict { | |
| margin: 0; | |
| background: linear-gradient(180deg, var(--alt), var(--paper)); | |
| } | |
| /* go is blink's cobalt; hold is an open ring; stop is a filled square */ | |
| .blk-verdict .blk-dotmark { | |
| width: 12px; | |
| height: 12px; | |
| margin-top: 8px; | |
| background: var(--faint); | |
| animation: blk-lid 0.42s ease-in-out 0.35s 1 both; | |
| } | |
| .blk-verdict.go .blk-dotmark { | |
| background: var(--blink); | |
| } | |
| .blk-verdict.hold .blk-dotmark { | |
| background: transparent; | |
| box-shadow: inset 0 0 0 2.5px var(--ink-soft); | |
| } | |
| .blk-verdict.stop .blk-dotmark { | |
| border-radius: 3px; | |
| background: var(--ink-soft); | |
| } | |
| .blk-verdict h3 { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| gap: 6px 10px; | |
| margin: 0 ; | |
| font-family: var(--font-geist); | |
| font-size: var(--text-heading-sm) ; | |
| font-weight: 600 ; | |
| line-height: 28px ; | |
| letter-spacing: -0.015em; | |
| color: var(--ink) ; | |
| } | |
| .blk-verdict p { | |
| margin: 4px 0 0 ; | |
| font-size: var(--text-body); | |
| line-height: 1.5; | |
| color: var(--mid) ; | |
| } | |
| /* the run's facts, then its folds, along the card's foot */ | |
| .blk-answer-foot { | |
| margin: 12px 0 0; | |
| } | |
| .blk-result .blk-answer-foot { | |
| margin: 0; | |
| padding: 12px 20px 0; | |
| border-top: 1px solid var(--line); | |
| background: var(--alt); | |
| } | |
| .blk-answer-foot .blk-stats { | |
| margin: 0 0 12px ; | |
| } | |
| .blk-result .blk-answer-foot details.blk-more { | |
| margin: 0 -20px; | |
| padding-left: 20px; | |
| padding-right: 20px; | |
| } | |
| .blk-result .blk-answer-foot details.blk-more > summary::after { | |
| right: 4px; | |
| } | |
| .blk-result .blk-answer-foot .blk-pre { | |
| background: var(--paper); | |
| } | |
| .blk-drafted { | |
| margin: 0 0 12px ; | |
| font-size: var(--text-caption); | |
| color: var(--mid); | |
| } | |
| /* while the model runs the card keeps its place, with a quiet line along its foot */ | |
| .blk-pending .blk-stats { | |
| padding: 12px 20px; | |
| border-top: 1px solid var(--line); | |
| background: var(--alt); | |
| } | |
| /* --- a workspace: inputs on the left, the result on the right --------------------------- */ | |
| .row:has(> .blk-side) { | |
| gap: 28px ; | |
| align-items: flex-start ; | |
| } | |
| .blk-side { | |
| gap: 14px ; | |
| min-width: 0 ; | |
| } | |
| .blk-side > * { | |
| margin-left: 0 ; | |
| margin-right: 0 ; | |
| } | |
| .blk-main { | |
| gap: 12px ; | |
| min-width: 0 ; | |
| } | |
| /* the questions and the rule behind a use case, folded under its action */ | |
| .blk-side details.blk-d > summary { | |
| font-size: var(--text-body); | |
| } | |
| /* a label belongs to the field under it, not to the gap above it */ | |
| .blk-head { | |
| min-height: 0 ; | |
| margin-bottom: -4px ; | |
| padding: 0 ; | |
| } | |
| /* --- ask ----------------------------------------------------------------------------- */ | |
| .blk-askrow { | |
| align-items: stretch ; | |
| flex-wrap: nowrap ; | |
| gap: 8px ; | |
| max-width: 720px; | |
| } | |
| .blk-askrow > * { | |
| min-width: 0 ; | |
| } | |
| .blk-askrow > button.blk-askgo { | |
| flex: 0 0 auto ; | |
| min-width: 88px ; | |
| align-self: stretch ; | |
| } | |
| .blk-ask input, | |
| .blk-ask textarea { | |
| min-height: 44px; | |
| font-size: var(--text-body-lg) ; | |
| } | |
| .blk-askout { | |
| margin-top: 4px; | |
| } | |
| /* the note keeps its own small room so the drafting state does not shift the page */ | |
| .blk-asknote { | |
| min-height: 0 ; | |
| padding: 0 ; | |
| } | |
| .blk-ask-note { | |
| min-height: 1.2em; | |
| margin: 0 ; | |
| font-size: var(--text-small); | |
| color: var(--mid); | |
| } | |
| .blk-ask-note .blk-run::before { | |
| vertical-align: 0; | |
| } | |
| .blk-ask-bad { | |
| max-width: 720px; | |
| padding: 10px 12px; | |
| border: 1px solid var(--color-error-line); | |
| border-radius: var(--radius-control); | |
| background: var(--color-error-bg); | |
| color: var(--color-error) ; | |
| font-size: var(--text-small); | |
| line-height: 1.55; | |
| box-sizing: border-box; | |
| } | |
| /* the drafted questions, read only: what each asks, its name and type, its options */ | |
| .blk-draft { | |
| display: grid; | |
| gap: 0; | |
| margin: 0 ; | |
| padding: 0 ; | |
| list-style: none ; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-subtle); | |
| overflow: hidden; | |
| } | |
| .blk-draft-q { | |
| margin: 0 ; | |
| padding: 16px 18px; | |
| animation: blk-rise 0.4s var(--ease) both; | |
| } | |
| .blk-draft-q + .blk-draft-q { | |
| border-top: 1px solid var(--line); | |
| } | |
| .blk-draft-q ul { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 6px; | |
| margin: 12px 0 0 ; | |
| padding: 0 ; | |
| list-style: none ; | |
| } | |
| .blk-draft-q ul li { | |
| margin: 0 ; | |
| padding: 2px 8px; | |
| border-radius: var(--radius-small); | |
| background: var(--sunken); | |
| font-family: var(--font-geist-mono); | |
| font-size: var(--text-caption); | |
| line-height: 20px; | |
| color: var(--ink-soft) ; | |
| } | |
| button.blk-handoff { | |
| align-self: flex-start; | |
| width: auto ; | |
| margin-top: 4px ; | |
| } | |
| /* --- groups: gradio paints a group in its border colour with 1px gaps; here a group is only a frame */ | |
| .gradio-container .gr-group { | |
| gap: 0 ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| overflow: visible ; | |
| } | |
| .gradio-container .gr-group > .styler { | |
| overflow: visible ; | |
| } | |
| /* --- the question form ---------------------------------------------------------------- */ | |
| .blk-qblock { | |
| padding: 0 18px ; | |
| border: 1px solid var(--line) ; | |
| border-radius: var(--radius-cards) ; | |
| background: var(--paper) ; | |
| box-shadow: var(--shadow-subtle) ; | |
| } | |
| /* gradio renders a group as two nested divs that both carry the class; the inner copy stays flat */ | |
| .blk-qblock .blk-qblock, | |
| .blk-qrow .blk-qrow { | |
| padding: 0 ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| } | |
| .blk-qrow { | |
| padding: 14px 0 12px ; | |
| border: 0 ; | |
| border-top: 1px solid var(--line) ; | |
| border-radius: 0 ; | |
| } | |
| .blk-qrow:first-of-type { | |
| border-top: 0 ; | |
| } | |
| /* one question, stacked tight: gradio's own gaps and block paddings go */ | |
| .blk-qrow .styler, | |
| .blk-qhead, | |
| .blk-qhead .form { | |
| gap: 4px ; | |
| } | |
| .blk-qrow .block { | |
| min-height: 0 ; | |
| padding: 0 ; | |
| } | |
| .blk-qhead > * { | |
| min-width: 0 ; | |
| } | |
| /* the question itself: words first, a field only once it is edited. The field reaches past the | |
| words by its own padding so they line up with everything under them */ | |
| .blk-qask textarea { | |
| width: calc(100% + 18px) ; | |
| max-width: none ; | |
| margin: 0 -9px ; | |
| padding: 4px 8px ; | |
| border: 1px solid transparent ; | |
| border-radius: var(--radius-control) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| font-size: var(--text-body-lg) ; | |
| font-weight: 500 ; | |
| line-height: 1.45 ; | |
| color: var(--ink) ; | |
| resize: none ; | |
| } | |
| .blk-qask textarea:hover:not(:disabled):not(:focus), | |
| .blk-qname input:hover:not(:disabled):not(:focus) { | |
| border-color: transparent ; | |
| background: var(--alt) ; | |
| } | |
| .blk-qask textarea:focus, | |
| .blk-qname input:focus, | |
| .blk-qopts textarea:focus { | |
| border-color: var(--blink) ; | |
| background: var(--paper) ; | |
| box-shadow: var(--ring) ; | |
| } | |
| /* its name and type: quiet metadata on one line */ | |
| .blk-qmeta { | |
| flex-wrap: nowrap ; | |
| align-items: center ; | |
| gap: 8px ; | |
| } | |
| /* gradio sizes these blocks as a scale-0 flex of zero; they take their content's width */ | |
| .blk-qmeta > *, | |
| .blk-qmeta .form, | |
| .blk-qmeta .form > .block { | |
| flex: 0 0 auto ; | |
| width: auto ; | |
| min-width: 0 ; | |
| } | |
| .blk-qmeta .form { | |
| display: flex ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| gap: 8px ; | |
| } | |
| .blk-qname input { | |
| min-width: 6ch; | |
| max-width: 24ch; | |
| height: 26px; | |
| min-height: 0 ; | |
| margin-left: -9px ; | |
| padding: 0 8px ; | |
| border: 1px solid transparent ; | |
| border-radius: var(--radius-small) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| font-family: var(--font-geist-mono) ; | |
| font-size: var(--text-caption) ; | |
| font-weight: 500 ; | |
| line-height: 1.33 ; | |
| color: var(--mid) ; | |
| } | |
| /* the name's wrappers take the field's width, not the other way round */ | |
| .blk-qname label, | |
| .blk-qname .input-container { | |
| width: max-content ; | |
| max-width: 100%; | |
| } | |
| /* the type: a soft badge that opens the three kinds */ | |
| .blk-qtype .wrap:has(> .wrap-inner) { | |
| min-height: 24px; | |
| border: 1px solid transparent ; | |
| border-radius: var(--radius-small) ; | |
| background: var(--sunken) ; | |
| box-shadow: none ; | |
| } | |
| .blk-qtype .wrap:has(> .wrap-inner):hover { | |
| border-color: var(--line-strong) ; | |
| } | |
| .blk-qtype .wrap-inner, | |
| .blk-qtype .secondary-wrap { | |
| min-height: 24px; | |
| padding: 0 ; | |
| } | |
| .blk-qtype .secondary-wrap input, | |
| .blk-qtype input { | |
| width: 78px ; | |
| height: 24px; | |
| margin: 0 ; | |
| padding: 0 22px 0 8px ; | |
| box-sizing: border-box; | |
| font-size: var(--text-caption) ; | |
| font-weight: 500 ; | |
| color: var(--ink-soft) ; | |
| } | |
| .blk-qtype .icon-wrap { | |
| right: 6px ; | |
| width: 12px ; | |
| } | |
| .blk-qtype .icon-wrap svg { | |
| width: 12px; | |
| height: 12px; | |
| } | |
| /* the options, at a glance, before anything is opened */ | |
| .blk-chipslot, | |
| .blk-chipslot .html-container { | |
| min-height: 0 ; | |
| padding: 0 ; | |
| } | |
| .blk-optchips { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 6px; | |
| margin: 6px 0 0 ; | |
| padding: 0 ; | |
| list-style: none ; | |
| } | |
| .blk-optchips:empty { | |
| display: none; | |
| } | |
| .blk-optchips li { | |
| margin: 0 ; | |
| padding: 2px 8px ; | |
| border-radius: var(--radius-small); | |
| background: var(--sunken); | |
| font-family: var(--font-geist-mono); | |
| font-size: var(--text-caption); | |
| line-height: 20px; | |
| color: var(--ink-soft) ; | |
| overflow-wrap: anywhere; | |
| animation: blk-fade 0.3s ease-out both; | |
| } | |
| /* a score's levels carry their number */ | |
| .blk-optchips li i { | |
| margin-right: 6px; | |
| font-style: normal; | |
| color: var(--mid) ; | |
| } | |
| /* editing the options is one step further in: the box and Remove show while the toggle is open */ | |
| .blk-qmore { | |
| margin: 0 ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| background: transparent ; | |
| } | |
| .blk-qmore > button.label-wrap { | |
| min-height: 26px; | |
| padding: 0 16px 0 0 ; | |
| border-radius: var(--radius-xs) ; | |
| justify-content: flex-start ; | |
| color: var(--mid) ; | |
| } | |
| .blk-qmore > button.label-wrap > span:first-child { | |
| font-size: var(--text-caption) ; | |
| font-weight: 500 ; | |
| white-space: nowrap; | |
| } | |
| .blk-qmore > button.label-wrap:hover { | |
| background: transparent ; | |
| color: var(--ink) ; | |
| } | |
| .blk-qmore > button.label-wrap::after { | |
| right: 3px; | |
| width: 5px; | |
| height: 5px; | |
| margin-top: -4px; | |
| border-color: currentColor; | |
| border-width: 0 1.5px 1.5px 0; | |
| } | |
| .blk-qmore > button.label-wrap.open::after { | |
| margin-top: -1px; | |
| } | |
| .blk-qmore [data-testid="accordion-content"] { | |
| display: none ; | |
| } | |
| .blk-qrow .blk-qopts, | |
| .blk-qrow .blk-qdrop { | |
| display: none ; | |
| } | |
| .blk-qrow:has(.blk-qmore button.label-wrap.open) .blk-qopts, | |
| .blk-qrow:has(.blk-qmore button.label-wrap.open) .blk-qdrop { | |
| display: block ; | |
| } | |
| .blk-qopts textarea { | |
| margin-top: 6px; | |
| border-color: var(--line) ; | |
| background: var(--alt) ; | |
| box-shadow: none ; | |
| font-family: var(--font-geist-mono) ; | |
| font-size: 12.5px ; | |
| line-height: 1.6 ; | |
| } | |
| /* a request the rows cannot hold is shown, not edited */ | |
| .blk-qrow textarea:disabled, | |
| .blk-qrow input:disabled { | |
| background: transparent ; | |
| color: var(--ink-soft) ; | |
| cursor: default; | |
| } | |
| /* removing a question is the one destructive act here */ | |
| button.blk-qdrop { | |
| align-self: flex-start ; | |
| width: auto ; | |
| min-height: 28px; | |
| margin: 8px 0 2px ; | |
| padding: 0 10px ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| font-size: var(--text-caption) ; | |
| color: var(--mid) ; | |
| white-space: nowrap; | |
| } | |
| button.blk-qdrop:hover:not(:disabled) { | |
| border-color: var(--color-error-line) ; | |
| background: var(--color-error-bg) ; | |
| color: var(--color-error) ; | |
| } | |
| button.blk-qadd { | |
| border-style: dashed ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| color: var(--ink-soft) ; | |
| } | |
| button.blk-qadd:hover:not(:disabled) { | |
| border-color: var(--blink) ; | |
| background: var(--blink-tint) ; | |
| color: var(--blink-ink) ; | |
| } | |
| /* --- the playground ---------------------------------------------------------------------- | |
| Unprefixed on purpose: gradio adds a scoped copy of each rule, and only an unprefixed selector | |
| outranks the scoped copies of the rules it adjusts. */ | |
| /* Decide leads the answers: beside the inputs on a desk, right under them on a phone */ | |
| .blk-play button.blk-decide { | |
| align-self: flex-start; | |
| width: auto ; | |
| min-width: 168px ; | |
| margin: 0 ; | |
| padding: 0 32px ; | |
| } | |
| .blk-play .blk-side { | |
| gap: 12px ; | |
| } | |
| .blk-play .blk-state { | |
| padding: 0 ; | |
| } | |
| .blk-play .blk-qblock { | |
| padding: 0 16px ; | |
| } | |
| .blk-play .blk-qrow { | |
| padding: 12px 0 10px ; | |
| } | |
| .blk-play .blk-qblock .blk-qblock, | |
| .blk-play .blk-qrow .blk-qrow { | |
| padding: 0 ; | |
| } | |
| /* the options toggle closes the name-and-type line instead of taking a line of its own */ | |
| .blk-play .blk-qrow .styler { | |
| display: grid ; | |
| grid-template-columns: minmax(0, 1fr) auto; | |
| column-gap: 12px ; | |
| row-gap: 4px ; | |
| align-items: center; | |
| } | |
| .blk-play .blk-qrow .styler > *, | |
| .blk-play .blk-qhead > * { | |
| grid-column: 1 / -1; | |
| } | |
| .blk-play .blk-qhead { | |
| display: contents ; | |
| } | |
| .blk-play .blk-qhead > .blk-qmeta { | |
| grid-column: 1; | |
| grid-row: 2; | |
| } | |
| .blk-play .blk-qrow .styler > .blk-qmore { | |
| grid-column: 2; | |
| grid-row: 2; | |
| margin: 0 ; | |
| } | |
| .blk-play .blk-optchips { | |
| margin: 2px 0 0 ; | |
| } | |
| .blk-play button.blk-qadd { | |
| margin-top: 0 ; | |
| } | |
| .blk-play .blk-acc .cm-editor { | |
| max-height: 420px; | |
| } | |
| /* --- home ------------------------------------------------------------------------------- */ | |
| .home-intro { | |
| padding: 8px 0 4px; | |
| } | |
| .home-intro h2 { | |
| max-width: 18ch; | |
| margin: 0 0 12px ; | |
| font-size: clamp(30px, 4.2vw, 44px) ; | |
| font-weight: 600 ; | |
| line-height: 1.08 ; | |
| letter-spacing: -0.035em; | |
| color: var(--ink); | |
| } | |
| .blk-home-lede { | |
| max-width: 52ch; | |
| margin: 0 ; | |
| font-size: 17px ; | |
| line-height: 1.55 ; | |
| color: var(--mid) ; | |
| } | |
| /* the four places to start: one card each, the whole card is the button */ | |
| .row.blk-cards { | |
| display: grid ; | |
| grid-template-columns: repeat(auto-fit, minmax(min(232px, 100%), 1fr)); | |
| align-items: stretch ; | |
| gap: 12px ; | |
| margin: 28px 0 36px ; | |
| } | |
| .blk-tilewrap { | |
| position: relative; | |
| min-width: 0 ; | |
| gap: 0 ; | |
| } | |
| .blk-tilewrap > .block { | |
| flex: 1 1 auto; | |
| } | |
| .blk-tilewrap .block, | |
| .blk-tilewrap .html-container, | |
| .blk-tilewrap .prose { | |
| height: 100%; | |
| } | |
| .blk-face { | |
| position: relative; | |
| display: grid; | |
| grid-template-columns: minmax(0, 1fr) auto; | |
| grid-template-rows: auto auto 1fr; | |
| align-content: start; | |
| gap: 4px 12px; | |
| height: 100%; | |
| min-height: 148px; | |
| padding: 18px 18px 20px; | |
| box-sizing: border-box; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-subtle); | |
| color: var(--ink) ; | |
| transition: border-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; | |
| } | |
| .blk-face-icon { | |
| grid-column: 1; | |
| grid-row: 1; | |
| display: grid; | |
| place-items: center; | |
| width: 36px; | |
| height: 36px; | |
| margin-bottom: 10px; | |
| border-radius: var(--radius-control); | |
| background: var(--blink-tint); | |
| color: var(--blink); | |
| } | |
| .blk-face-icon svg { | |
| width: 20px; | |
| height: 20px; | |
| fill: none; | |
| stroke: currentColor; | |
| stroke-width: 1.7; | |
| stroke-linecap: round; | |
| stroke-linejoin: round; | |
| } | |
| .blk-face b { | |
| grid-column: 1 / -1; | |
| font-size: var(--text-body-lg); | |
| font-weight: 600; | |
| line-height: 1.35; | |
| color: var(--ink) ; | |
| } | |
| .blk-face > span:not(.blk-face-icon) { | |
| grid-column: 1 / -1; | |
| font-size: var(--text-small); | |
| line-height: 1.5; | |
| color: var(--mid) ; | |
| } | |
| .blk-face em { | |
| grid-column: 2; | |
| grid-row: 1; | |
| align-self: start; | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 4px; | |
| font-size: var(--text-caption); | |
| font-style: normal; | |
| font-weight: 500; | |
| color: var(--mid) ; | |
| white-space: nowrap; | |
| } | |
| .blk-face em::after { | |
| content: "\2192"; | |
| font-size: 14px; | |
| transition: transform 0.15s ease; | |
| } | |
| .blk-tilewrap:hover .blk-face { | |
| border-color: var(--blink-line); | |
| box-shadow: 0 8px 24px -14px rgba(16, 24, 40, 0.28), var(--shadow-subtle); | |
| } | |
| .blk-tilewrap:hover .blk-face em { | |
| color: var(--blink-ink) ; | |
| } | |
| .blk-tilewrap:hover .blk-face em::after { | |
| transform: translateX(2px); | |
| } | |
| .blk-tilewrap:focus-within .blk-face { | |
| border-color: var(--blink); | |
| box-shadow: var(--ring); | |
| } | |
| /* an in-app card is a real button wearing the card: the click is a gradio event, so it works the | |
| same at every width */ | |
| button.blk-tile-hit { | |
| position: absolute ; | |
| inset: 0; | |
| width: 100% ; | |
| height: 100% ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| border-radius: var(--radius-cards) ; | |
| opacity: 0; | |
| cursor: pointer; | |
| } | |
| /* outside links: the quieter variant, inside their fold */ | |
| .blk-cards.out { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(min(220px, 100%), 1fr)); | |
| gap: 8px; | |
| margin: 4px 0 8px; | |
| } | |
| a.blk-tile { | |
| display: grid; | |
| grid-template-columns: minmax(0, 1fr) auto; | |
| align-items: baseline; | |
| text-align: left; | |
| gap: 2px 12px; | |
| padding: 12px 14px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-control); | |
| background: var(--paper); | |
| color: var(--ink) ; | |
| text-decoration: none ; | |
| transition: border-color 0.15s ease, background-color 0.15s ease; | |
| } | |
| a.blk-tile:hover { | |
| border-color: var(--blink-line); | |
| background: var(--alt); | |
| } | |
| .blk-tile b { | |
| font-size: var(--text-body); | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| } | |
| .blk-tile span { | |
| grid-column: 1 / -1; | |
| font-size: var(--text-small); | |
| line-height: 1.45; | |
| color: var(--mid) ; | |
| } | |
| .blk-tile em { | |
| grid-row: 1; | |
| grid-column: 2; | |
| font-size: var(--text-caption); | |
| font-style: normal; | |
| font-weight: 500; | |
| color: var(--mid) ; | |
| } | |
| .blk-tile em::after { | |
| content: " \2197"; | |
| } | |
| details.home-fold[open] { | |
| padding-bottom: 16px; | |
| } | |
| /* inside the fold a section label sits a section away from what came before */ | |
| details.home-fold > .blk-eyebrow:not(:nth-child(2)) { | |
| margin-top: 20px ; | |
| } | |
| details.home-fold .blk-pair .blk-eyebrow { | |
| margin-top: 4px ; | |
| } | |
| /* a computer-use run, inside its fold: the run looping beside where to watch and try it */ | |
| .blk-cua { | |
| gap: 24px ; | |
| align-items: center ; | |
| margin: 0 ; | |
| padding: 4px 0 0 ; | |
| } | |
| .blk-cua-shot { | |
| margin: 0 ; | |
| } | |
| .blk-cua-shot img, | |
| .blk-cua-shot video { | |
| display: block; | |
| width: 100%; | |
| height: auto; | |
| margin: 0 ; | |
| border-radius: var(--radius-control); | |
| box-shadow: 0 0 0 1px var(--line); | |
| background: #0b0d12; | |
| } | |
| .blk-cua-shot figcaption { | |
| margin-top: 8px; | |
| font-size: var(--text-small); | |
| color: var(--mid) ; | |
| } | |
| .blk-cua-pitch { | |
| margin: 0 0 8px ; | |
| font-size: var(--text-heading-sm) ; | |
| font-weight: 600 ; | |
| line-height: 1.3 ; | |
| letter-spacing: -0.015em; | |
| color: var(--ink); | |
| } | |
| .blk-cua-go { | |
| flex-wrap: wrap ; | |
| gap: 8px ; | |
| margin-top: 6px; | |
| } | |
| .blk-cua-go button { | |
| flex: 0 0 auto ; | |
| width: auto ; | |
| min-width: 0 ; | |
| } | |
| /* the headline figures, side by side, stacking when there is no room */ | |
| .blk-pair { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(min(330px, 100%), 1fr)); | |
| gap: 16px 24px; | |
| align-items: start; | |
| } | |
| .blk-pair .blk-half > .blk-note { | |
| margin-bottom: 0 ; | |
| font-size: var(--text-small); | |
| } | |
| .blk-half .blk-figure { | |
| margin-bottom: 12px; | |
| } | |
| .blk-narrowfig { | |
| max-width: 680px; | |
| } | |
| /* --- documents ------------------------------------------------------------------------ */ | |
| .doc-intro { | |
| margin: 0; | |
| } | |
| .doc-intro .blk-note { | |
| margin: 0 ; | |
| } | |
| .doc-workspace { | |
| gap: 32px ; | |
| align-items: flex-start ; | |
| margin-top: 24px ; | |
| } | |
| .doc-col { | |
| gap: 14px ; | |
| min-width: 0 ; | |
| } | |
| .doc-step { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| margin: 0 ; | |
| font-size: 16px ; | |
| font-weight: 600 ; | |
| line-height: 24px ; | |
| letter-spacing: -0.01em; | |
| color: var(--ink); | |
| } | |
| .doc-step > span { | |
| display: grid; | |
| place-items: center; | |
| flex: none; | |
| width: 24px; | |
| height: 24px; | |
| border-radius: 50%; | |
| background: var(--blink-tint); | |
| color: var(--blink-ink) ; | |
| font-size: var(--text-caption); | |
| font-weight: 600; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| /* the result's heading is a section away from the run button */ | |
| .doc-col-task .block:has(.doc-runnote) + .doc-stephead { | |
| margin-top: 18px ; | |
| } | |
| .doc-caption { | |
| margin: 0 ; | |
| font-size: var(--text-small); | |
| line-height: 1.5; | |
| color: var(--mid); | |
| } | |
| /* the PDF in view: its name, its pages and how they were read */ | |
| .doc-source { | |
| display: grid; | |
| grid-template-columns: 36px minmax(0, 1fr); | |
| align-items: center; | |
| column-gap: 12px; | |
| row-gap: 2px; | |
| padding: 12px 14px; | |
| border: 1px solid var(--line); | |
| border-radius: 10px; | |
| background: var(--alt); | |
| } | |
| .doc-file { | |
| grid-row: 1 / span 2; | |
| display: grid; | |
| place-items: center; | |
| width: 36px; | |
| height: 36px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-control); | |
| background: var(--paper); | |
| color: var(--blink); | |
| } | |
| .doc-file svg { | |
| width: 18px; | |
| height: 18px; | |
| fill: none; | |
| stroke: currentColor; | |
| stroke-width: 1.7; | |
| stroke-linecap: round; | |
| stroke-linejoin: round; | |
| } | |
| .doc-source p { | |
| margin: 0 ; | |
| } | |
| .doc-source > p:first-of-type { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: baseline; | |
| gap: 0 10px; | |
| } | |
| .doc-source b { | |
| font-size: var(--text-body); | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| overflow-wrap: anywhere; | |
| } | |
| .doc-source > p > span { | |
| font-size: var(--text-small); | |
| color: var(--mid) ; | |
| } | |
| .doc-source .doc-caption { | |
| grid-column: 2; | |
| font-size: var(--text-caption); | |
| } | |
| /* the original page, as paper on a quiet desk */ | |
| .doc-preview { | |
| margin: 0 ; | |
| padding: 16px 16px 12px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: #f2f4f7; | |
| } | |
| .doc-sheet { | |
| max-width: 520px; | |
| margin: 0 auto; | |
| background: var(--paper); | |
| box-shadow: 0 0 0 1px rgba(16, 24, 40, 0.08), 0 2px 10px rgba(16, 24, 40, 0.08); | |
| } | |
| .doc-preview img { | |
| display: block; | |
| width: 100%; | |
| height: auto; | |
| margin: 0 ; | |
| border-radius: 0; | |
| } | |
| .doc-preview figcaption { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 8px; | |
| max-width: 520px; | |
| margin: 12px auto 0; | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| color: var(--ink-soft) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .doc-preview figcaption .doc-how { | |
| display: inline-flex; | |
| align-items: center; | |
| height: 22px; | |
| padding: 0 8px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-round); | |
| background: var(--paper); | |
| font-size: var(--text-caption); | |
| font-weight: 500; | |
| color: var(--mid) ; | |
| } | |
| .doc-empty { | |
| padding: 16px; | |
| border: 1px dashed var(--line-strong); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| } | |
| .doc-empty p { | |
| margin: 0 ; | |
| font-size: var(--text-body); | |
| line-height: 1.55; | |
| color: var(--mid) ; | |
| } | |
| #doc-text textarea { | |
| font-size: var(--text-small) ; | |
| line-height: 1.6 ; | |
| } | |
| /* the result: one panel, its parts divided by hairlines */ | |
| #doc-outputs { | |
| gap: 0 ; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-subtle); | |
| overflow: hidden; | |
| } | |
| #doc-outputs.doc-stale { | |
| display: none ; | |
| } | |
| #doc-outputs > .form, | |
| #doc-outputs > .block:not(.gr-accordion):not(#doc-result) { | |
| padding: 16px 20px 0 ; | |
| } | |
| #doc-outputs > .form:has(#doc-inspect) { | |
| border-top: 1px solid var(--line) ; | |
| } | |
| /* the JSON fold keeps a gap from whatever sits above it in the panel */ | |
| #doc-outputs > .gr-accordion:not(:first-child) { | |
| margin-top: 20px ; | |
| } | |
| /* inside the panel the JSON fold is the panel's last row */ | |
| #doc-outputs > .gr-accordion { | |
| border: 0 ; | |
| border-top: 1px solid var(--line) ; | |
| border-radius: 0 ; | |
| } | |
| #doc-outputs > .gr-accordion > button.label-wrap { | |
| min-height: 48px; | |
| padding: 0 44px 0 20px ; | |
| border-radius: 0 ; | |
| } | |
| #doc-outputs > .gr-accordion > button.label-wrap::after { | |
| right: 22px; | |
| } | |
| #doc-outputs > .gr-accordion > [data-testid="accordion-content"] { | |
| padding: 0 20px 20px ; | |
| } | |
| #doc-result .doc-empty, | |
| #doc-result .blk-warn { | |
| margin: 20px 20px 0 ; | |
| } | |
| .doc-result { | |
| min-width: 0; | |
| } | |
| .doc-result-head { | |
| padding: 18px 20px 18px; | |
| } | |
| .doc-provenance { | |
| display: flex; | |
| align-items: center; | |
| flex-wrap: wrap; | |
| gap: 8px; | |
| margin: 0 0 6px ; | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| color: var(--ink-soft) ; | |
| } | |
| .doc-dot { | |
| flex: none; | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 50%; | |
| background: var(--blink); | |
| } | |
| .doc-result.saved .doc-dot { | |
| background: transparent; | |
| box-shadow: inset 0 0 0 2px var(--blink); | |
| } | |
| .doc-result.mock .doc-dot { | |
| background: transparent; | |
| box-shadow: inset 0 0 0 2px var(--mid); | |
| } | |
| .doc-result h3 { | |
| margin: 0 ; | |
| font-size: 26px ; | |
| font-weight: 600 ; | |
| line-height: 1.2 ; | |
| letter-spacing: -0.02em; | |
| color: var(--ink); | |
| } | |
| .doc-verdict-note { | |
| margin: 4px 0 0 ; | |
| font-size: var(--text-body); | |
| color: var(--mid) ; | |
| } | |
| /* the packet in page order, each document as wide as its pages */ | |
| .doc-timeline { | |
| display: flex; | |
| gap: 4px; | |
| margin: 0 20px 20px ; | |
| padding: 0 ; | |
| list-style: none ; | |
| } | |
| .doc-timeline li { | |
| display: flex; | |
| flex: var(--pages) 1 0; | |
| flex-direction: column; | |
| gap: 2px; | |
| min-width: 0; | |
| margin: 0 ; | |
| padding: 8px 8px 9px; | |
| overflow: hidden; | |
| border-top: 3px solid var(--blink); | |
| border-radius: 2px 2px var(--radius-small) var(--radius-small); | |
| background: var(--blink-tint); | |
| } | |
| .doc-timeline li.flag { | |
| border-top-color: var(--color-review); | |
| background: var(--color-review-bg); | |
| } | |
| .doc-timeline b { | |
| overflow: hidden; | |
| font-size: var(--text-small); | |
| font-weight: 600; | |
| line-height: 1.3; | |
| color: var(--blink-ink) ; | |
| white-space: nowrap; | |
| text-overflow: ellipsis; | |
| } | |
| .doc-timeline span { | |
| font-size: var(--text-caption); | |
| color: var(--mid) ; | |
| white-space: nowrap; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .doc-list-head { | |
| display: flex; | |
| justify-content: space-between; | |
| gap: 12px; | |
| margin: 0 ; | |
| padding: 0 44px 8px 20px; | |
| font-size: var(--text-caption); | |
| font-weight: 500; | |
| color: var(--mid) ; | |
| } | |
| .doc-segments { | |
| margin: 0 ; | |
| padding: 0 ; | |
| list-style: none ; | |
| border-top: 1px solid var(--line); | |
| } | |
| .doc-segment { | |
| margin: 0 ; | |
| border-bottom: 1px solid var(--line); | |
| } | |
| .doc-segment:last-child { | |
| border-bottom: 0; | |
| } | |
| details.doc-seg > summary { | |
| position: relative; | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 12px; | |
| min-height: 48px; | |
| padding: 6px 44px 6px 20px; | |
| list-style: none; | |
| cursor: pointer; | |
| transition: background-color 0.15s ease; | |
| } | |
| details.doc-seg > summary:hover { | |
| background: var(--alt); | |
| } | |
| details.doc-seg > summary::after { | |
| right: 22px; | |
| } | |
| .doc-seg-name { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| gap: 2px 10px; | |
| min-width: 0; | |
| } | |
| .doc-seg-name b { | |
| font-size: var(--text-body); | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| } | |
| .doc-seg-name span { | |
| font-size: var(--text-small); | |
| color: var(--mid) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .doc-review { | |
| display: inline-flex; | |
| align-items: center; | |
| height: 20px; | |
| padding: 0 7px; | |
| border: 1px solid var(--color-review-line); | |
| border-radius: var(--radius-round); | |
| background: var(--color-review-bg); | |
| font-size: var(--text-caption); | |
| font-style: normal; | |
| font-weight: 500; | |
| color: var(--color-review) ; | |
| } | |
| .doc-seg-p { | |
| flex: none; | |
| font-size: var(--text-body); | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .doc-sr { | |
| position: absolute; | |
| width: 1px; | |
| height: 1px; | |
| overflow: hidden; | |
| clip: rect(0 0 0 0); | |
| white-space: nowrap; | |
| } | |
| details.doc-seg > .blk-opts { | |
| margin: 0 ; | |
| padding: 4px 20px 16px ; | |
| } | |
| .doc-review-reasons { | |
| margin: 0 ; | |
| padding: 0 20px 12px 38px ; | |
| list-style: disc ; | |
| font-size: var(--text-small); | |
| line-height: 1.55; | |
| } | |
| .doc-review-reasons li { | |
| margin: 0 0 2px ; | |
| color: var(--color-review) ; | |
| } | |
| /* one label: its scores in full, no fold */ | |
| .doc-scores { | |
| margin: 0 20px; | |
| padding: 16px 0 18px; | |
| border-top: 1px solid var(--line); | |
| } | |
| .doc-scores .doc-list-head { | |
| padding: 0; | |
| } | |
| .doc-scores .blk-opts { | |
| margin-top: 10px ; | |
| } | |
| .doc-scores .doc-review-reasons { | |
| padding: 12px 0 0 18px ; | |
| } | |
| .doc-metrics { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 8px 32px; | |
| padding: 14px 20px; | |
| border-top: 1px solid var(--line); | |
| } | |
| .doc-metrics > span { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 1px; | |
| font-size: var(--text-caption); | |
| color: var(--mid) ; | |
| } | |
| .doc-metrics b { | |
| font-size: var(--text-title); | |
| font-weight: 600; | |
| line-height: 1.3; | |
| color: var(--ink) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .doc-result details.doc-method { | |
| padding: 0 20px; | |
| } | |
| .doc-result details.doc-method > summary::after { | |
| right: 2px; | |
| } | |
| .doc-result details.doc-method[open] { | |
| padding-bottom: 14px; | |
| } | |
| /* the second model's answer to the same pages, as its own card */ | |
| .doc-compare-head { | |
| margin: 0 0 8px ; | |
| font-size: var(--text-small); | |
| font-weight: 600; | |
| color: var(--ink-soft) ; | |
| } | |
| #doc-comparison .doc-result { | |
| border: 1px solid var(--line); | |
| border-radius: 10px; | |
| overflow: hidden; | |
| } | |
| #doc-comparison .doc-result h3 { | |
| font-size: var(--text-heading-sm) ; | |
| } | |
| .doc-stale-notice { | |
| display: none; | |
| margin: 0 ; | |
| padding: 14px 16px; | |
| border: 1px dashed var(--line-strong); | |
| border-radius: var(--radius-cards); | |
| font-size: var(--text-body); | |
| color: var(--mid) ; | |
| } | |
| .doc-col-task:has(#doc-outputs.doc-stale) .doc-stale-notice { | |
| display: block; | |
| } | |
| /* --- screen click: a screenshot, the box blink picks, and two checks --------------------- */ | |
| /* a probability the marks and rings animate between answers */ | |
| @property --sp { | |
| syntax: "<number>"; | |
| inherits: false; | |
| initial-value: 0; | |
| } | |
| /* which model reads the screenshot: blink's own tag, worn where a switch sits elsewhere */ | |
| .blk-eyechip { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 8px; | |
| margin: 0 ; | |
| padding: 0 12px 0 10px; | |
| height: 30px; | |
| border: 1px solid var(--blink-line); | |
| border-radius: var(--radius-round); | |
| background: var(--blink-tint); | |
| color: var(--blink-ink) ; | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| line-height: 1; | |
| } | |
| .blk-eyechip span { | |
| color: inherit ; | |
| } | |
| .blk-eyechip svg { | |
| flex: none; | |
| width: 16px; | |
| height: 16px; | |
| fill: none; | |
| stroke: currentColor; | |
| stroke-width: 2; | |
| stroke-linecap: round; | |
| stroke-linejoin: round; | |
| } | |
| /* the visitor's own screenshot: its grid and boxes, together under the task */ | |
| .blk-upgroup { | |
| gap: 10px ; | |
| padding: 14px ; | |
| border: 1px solid var(--line) ; | |
| border-radius: var(--radius-cards) ; | |
| background: var(--alt) ; | |
| } | |
| .blk-upgroup .blk-upgroup, | |
| .blk-upgroup .styler { | |
| gap: 10px ; | |
| padding: 0 ; | |
| border: 0 ; | |
| background: transparent ; | |
| } | |
| .blk-upgroup button.blk-clear { | |
| align-self: flex-start; | |
| width: auto ; | |
| } | |
| .blk-livenote { | |
| display: flex; | |
| align-items: flex-start; | |
| gap: 8px; | |
| margin: 0 ; | |
| font-size: var(--text-small); | |
| line-height: 1.5; | |
| color: var(--mid) ; | |
| } | |
| .blk-livedot { | |
| flex: none; | |
| width: 8px; | |
| height: 8px; | |
| margin-top: 6px; | |
| border-radius: 50%; | |
| background: var(--blink); | |
| animation: blk-beat 2.4s ease-in-out infinite; | |
| } | |
| /* how the screenshot is read: a fold with one visible line */ | |
| details.blk-howread > summary { | |
| min-height: 0; | |
| padding-top: 11px; | |
| padding-bottom: 11px; | |
| } | |
| .blk-howread summary > span { | |
| display: block; | |
| } | |
| .blk-howline { | |
| display: block; | |
| margin-top: 2px; | |
| font-size: var(--text-small); | |
| font-weight: 400; | |
| line-height: 1.45; | |
| color: var(--mid) ; | |
| } | |
| .blk-howsteps { | |
| margin: 0 14px 12px ; | |
| padding-left: 20px ; | |
| font-size: var(--text-small); | |
| line-height: 1.55; | |
| } | |
| .blk-howsteps li { | |
| margin: 0 0 4px ; | |
| color: var(--ink-soft) ; | |
| } | |
| .blk-scr { | |
| display: grid; | |
| gap: 12px; | |
| min-width: 0; | |
| } | |
| /* the verdict: one mark, one line */ | |
| .blk-sv { | |
| display: flex; | |
| align-items: center; | |
| gap: 14px; | |
| min-width: 0; | |
| min-height: 76px; | |
| padding: 14px 18px; | |
| box-sizing: border-box; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-subtle); | |
| animation: blk-rise 0.4s var(--ease) both; | |
| transition: opacity 0.2s ease; | |
| } | |
| .blk-sv-mark { | |
| display: grid; | |
| place-items: center; | |
| flex: none; | |
| width: 40px; | |
| height: 40px; | |
| border-radius: 10px; | |
| background: var(--flash); | |
| box-shadow: inset 0 0 0 1px rgba(11, 13, 18, 0.12); | |
| color: var(--color-flash-ink) ; | |
| font-size: 18px; | |
| font-weight: 600; | |
| font-variant-numeric: tabular-nums; | |
| animation: blk-pop 0.45s var(--ease) 0.1s both; | |
| } | |
| .blk-sv-mark svg { | |
| width: 22px; | |
| height: 22px; | |
| fill: none; | |
| stroke: currentColor; | |
| stroke-width: 2.6; | |
| stroke-linecap: round; | |
| stroke-linejoin: round; | |
| stroke-dasharray: 24; | |
| stroke-dashoffset: 24; | |
| animation: blk-draw 0.5s var(--ease) 0.3s forwards; | |
| } | |
| /* hold: an open mark */ | |
| .blk-sv[data-act="ask"] .blk-sv-mark, | |
| .blk-sv[data-act="unsure"] .blk-sv-mark { | |
| background: transparent; | |
| box-shadow: inset 0 0 0 2px var(--ink-soft); | |
| color: var(--ink) ; | |
| } | |
| .blk-sv-text { | |
| min-width: 0; | |
| } | |
| .blk-sv h3 { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| gap: 4px 10px; | |
| margin: 0 ; | |
| font-family: var(--font-geist); | |
| font-size: var(--text-heading-sm) ; | |
| font-weight: 600 ; | |
| line-height: 1.3 ; | |
| letter-spacing: -0.015em; | |
| color: var(--ink) ; | |
| } | |
| .blk-sv p { | |
| margin: 2px 0 0 ; | |
| font-size: var(--text-small); | |
| line-height: 1.45; | |
| color: var(--mid) ; | |
| overflow-wrap: anywhere; | |
| } | |
| .blk-sv-wait .blk-sv-mark { | |
| background: var(--track); | |
| box-shadow: none; | |
| animation: blk-shimmer 1.2s ease-in-out infinite; | |
| } | |
| /* before an answer: an open mark and one quiet line, at the verdict's own height */ | |
| .blk-sv-idle { | |
| box-shadow: none; | |
| } | |
| .blk-sv-idle .blk-sv-mark { | |
| background: transparent; | |
| box-shadow: inset 0 0 0 2px var(--line-strong); | |
| animation: none; | |
| } | |
| .blk-sv-idle p { | |
| margin: 0 ; | |
| font-size: var(--text-body); | |
| color: var(--mid) ; | |
| } | |
| /* the screenshot, exactly as blink reads it, with the page's own marks laid on top */ | |
| .blk-shot { | |
| margin: 0 ; | |
| min-width: 0; | |
| } | |
| .blk-shot-frame { | |
| position: relative; | |
| overflow: hidden; | |
| container-type: inline-size; | |
| width: 100%; | |
| border-radius: 10px; | |
| background: var(--alt); | |
| box-shadow: 0 0 0 1px var(--line), var(--shadow-subtle); | |
| touch-action: manipulation; | |
| -webkit-tap-highlight-color: transparent; | |
| } | |
| .blk-shot-frame img { | |
| display: block; | |
| width: 100%; | |
| height: 100%; | |
| max-width: none; | |
| margin: 0 ; | |
| object-fit: fill; | |
| border-radius: 0; | |
| user-select: none; | |
| -webkit-user-select: none; | |
| -webkit-user-drag: none; | |
| pointer-events: none; | |
| } | |
| .blk-marks { | |
| position: absolute; | |
| inset: 0; | |
| pointer-events: none; | |
| } | |
| /* every mark sits on the box blink reads; answered, it glows by its probability */ | |
| .blk-som { | |
| position: absolute; | |
| left: var(--sx); | |
| top: var(--sy); | |
| width: var(--sw); | |
| height: var(--sh); | |
| z-index: 2; | |
| border-radius: 3px; | |
| box-shadow: inset 0 0 0 2px var(--blink), 0 0 0 1px rgba(255, 255, 255, 0.9); | |
| transition: --sp 0.7s var(--ease), box-shadow 0.5s var(--ease), background-color 0.5s var(--ease); | |
| } | |
| .blk-shot.answered .blk-som { | |
| background: rgba(36, 71, 245, calc(var(--sp) * 0.12)); | |
| box-shadow: inset 0 0 0 2px var(--blink), 0 0 0 1px rgba(255, 255, 255, 0.9), 0 0 0 calc(2px + var(--sp) * 5px) rgba(36, 71, 245, calc(0.08 + var(--sp) * 0.3)), 0 0 calc(6px + var(--sp) * 30px) calc(var(--sp) * 6px) rgba(36, 71, 245, calc(var(--sp) * 0.55)); | |
| animation: blk-fill 0.9s var(--ease) 0.1s backwards; | |
| } | |
| /* the one blink picked: lit in the flash colour, the rest of the screen dimmed a little */ | |
| .blk-shot.answered .blk-som.win { | |
| z-index: 1; | |
| background: rgba(212, 245, 92, 0.18); | |
| box-shadow: inset 0 0 0 2px var(--blink), 0 0 0 3px var(--flash), 0 0 0 4px rgba(11, 13, 18, 0.32), 0 0 28px 6px rgba(212, 245, 92, 0.85), 0 0 0 200vmax rgba(11, 13, 18, 0.07); | |
| } | |
| .blk-shot.answered .blk-som.win::after { | |
| content: ""; | |
| position: absolute; | |
| inset: -2px; | |
| border-radius: 6px; | |
| border: 2px solid var(--flash); | |
| opacity: 0; | |
| animation: blk-ping 1s var(--ease) 0.35s both; | |
| } | |
| /* a finished task: nothing is lit, the marks fade back */ | |
| .blk-shot[data-act="done"] .blk-som { | |
| opacity: 0.55; | |
| } | |
| .blk-som.cell { | |
| border-radius: 0; | |
| box-shadow: inset 0 0 0 1px rgba(36, 71, 245, 0.45); | |
| } | |
| /* a grid answers as a heat map */ | |
| .blk-shot.answered .blk-som.cell { | |
| background: rgba(36, 71, 245, calc(var(--sp) * 0.42)); | |
| box-shadow: inset 0 0 0 1px rgba(36, 71, 245, 0.45); | |
| } | |
| .blk-shot.answered .blk-som.cell.win { | |
| background: rgba(212, 245, 92, 0.3); | |
| box-shadow: inset 0 0 0 3px var(--flash), inset 0 0 0 4px rgba(11, 13, 18, 0.45); | |
| } | |
| .blk-shot.answered .blk-som.cell.win::after { | |
| display: none; | |
| } | |
| /* where the run was expected to act, when blink picked another box */ | |
| .blk-shot.answered .blk-som.expect { | |
| box-shadow: inset 0 0 0 2px var(--blink), 0 0 0 3px #ffffff, 0 0 0 5px var(--ink-soft); | |
| outline: 2px dashed #ffffff; | |
| outline-offset: 3px; | |
| } | |
| /* each number covers the one burned into the image and grows away from its box to stay legible; | |
| its drawn size is known (--tc characters of a monospaced face), so it never leaves the screenshot */ | |
| .blk-somtag { | |
| --w: max(var(--tw), 22px, calc(12px + var(--tc, 1) * 1ch + var(--tg, 0px))); | |
| --h: max(var(--th), 20px); | |
| position: absolute; | |
| z-index: 3; | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 4px; | |
| box-sizing: border-box; | |
| min-width: var(--w); | |
| height: var(--h); | |
| padding: 0 6px; | |
| border-radius: 4px; | |
| background: var(--blink); | |
| color: #ffffff ; | |
| font-family: var(--font-geist-mono); | |
| font-size: clamp(12px, calc(var(--tr) * 64cqw), 15px); | |
| font-weight: 600; | |
| line-height: 1; | |
| white-space: nowrap; | |
| pointer-events: none; | |
| transition: background-color 0.4s var(--ease), color 0.4s var(--ease); | |
| } | |
| .blk-somtag b, | |
| .blk-somtag i { | |
| color: inherit ; | |
| } | |
| .blk-somtag.above { | |
| left: clamp(0px, var(--tx), calc(100% - var(--w))); | |
| top: max(0px, calc(var(--ty) + var(--th) - var(--h))); | |
| } | |
| .blk-somtag.left { | |
| left: max(0px, calc(var(--tx) + var(--tw) - var(--w))); | |
| top: clamp(0px, var(--ty), calc(100% - var(--h))); | |
| } | |
| .blk-somtag.inside { | |
| left: clamp(0px, var(--tx), calc(100% - var(--w))); | |
| top: clamp(0px, var(--ty), calc(100% - var(--h))); | |
| } | |
| .blk-somtag i { | |
| font-style: normal; | |
| font-weight: 500; | |
| opacity: 0.85; | |
| } | |
| .blk-somtag.win { | |
| background: var(--flash); | |
| color: var(--color-flash-ink) ; | |
| box-shadow: 0 0 0 1px rgba(11, 13, 18, 0.5); | |
| animation: blk-flash 0.5s ease-out 0.38s both; | |
| } | |
| .blk-somtag.win i { | |
| opacity: 1; | |
| } | |
| .blk-shot-pill { | |
| position: absolute; | |
| top: 10px; | |
| right: 10px; | |
| z-index: 4; | |
| padding: 2px 10px; | |
| border-radius: var(--radius-round); | |
| background: rgba(255, 255, 255, 0.94); | |
| box-shadow: 0 0 0 1px rgba(16, 24, 40, 0.08), var(--shadow-subtle); | |
| font-size: var(--text-caption); | |
| font-weight: 500; | |
| line-height: 18px; | |
| color: var(--ink-soft) ; | |
| pointer-events: none; | |
| } | |
| /* while blink reads: a sweep down the screenshot, the marks breathing */ | |
| .blk-shot.busy .blk-shot-frame::after { | |
| content: ""; | |
| position: absolute; | |
| inset: 0; | |
| z-index: 5; | |
| pointer-events: none; | |
| background: linear-gradient(180deg, rgba(36, 71, 245, 0) 0%, rgba(36, 71, 245, 0.08) 40%, rgba(36, 71, 245, 0.26) 49.5%, rgba(36, 71, 245, 0) 50.5%); | |
| background-size: 100% 200%; | |
| animation: blk-scan 1.6s linear infinite; | |
| } | |
| .blk-shot.busy .blk-som { | |
| animation: blk-shimmer 1.2s ease-in-out infinite; | |
| } | |
| .blk-scr.busy .blk-sv:not(.blk-sv-wait), | |
| .blk-scr.busy .blk-meters, | |
| .blk-scr.busy .blk-answer-foot { | |
| opacity: 0.45; | |
| } | |
| /* drawing on a visitor's own screenshot */ | |
| .blk-shot[data-draw="1"] .blk-shot-frame { | |
| cursor: crosshair; | |
| } | |
| .blk-shot[data-draw="1"] .blk-somtag:not(.cell) { | |
| pointer-events: auto; | |
| cursor: pointer; | |
| } | |
| .blk-shot[data-draw="1"] .blk-somtag:not(.cell):hover { | |
| background: var(--ink); | |
| color: #ffffff ; | |
| } | |
| .blk-ghost { | |
| position: absolute; | |
| z-index: 4; | |
| border: 2px dashed var(--blink); | |
| border-radius: 3px; | |
| background: rgba(36, 71, 245, 0.1); | |
| pointer-events: none; | |
| } | |
| .blk-ghost.sent { | |
| animation: blk-shimmer 1s ease-in-out infinite; | |
| } | |
| .blk-corner { | |
| position: absolute; | |
| z-index: 4; | |
| width: 14px; | |
| height: 14px; | |
| margin: -7px 0 0 -7px; | |
| border-radius: 50%; | |
| background: var(--flash); | |
| box-shadow: 0 0 0 2px var(--blink), 0 0 0 6px rgba(36, 71, 245, 0.2); | |
| pointer-events: none; | |
| animation: blk-pop 0.25s var(--ease) both; | |
| } | |
| /* the two checks, as rings with their names */ | |
| .blk-meters { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 10px; | |
| transition: opacity 0.2s ease; | |
| } | |
| .blk-meter { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 10px; | |
| padding: 6px 14px 6px 6px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-round); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-subtle); | |
| animation: blk-rise 0.4s var(--ease) 0.15s both; | |
| } | |
| .blk-ring { | |
| --ring: var(--blink-light); | |
| position: relative; | |
| display: grid; | |
| place-items: center; | |
| flex: none; | |
| width: 40px; | |
| height: 40px; | |
| border-radius: 50%; | |
| background: conic-gradient(var(--ring) calc(var(--sp) * 1turn), var(--track) 0); | |
| transition: --sp 0.8s var(--ease); | |
| animation: blk-fill 0.9s var(--ease) 0.2s backwards; | |
| } | |
| .blk-ring::before { | |
| content: ""; | |
| position: absolute; | |
| inset: 4px; | |
| border-radius: 50%; | |
| background: var(--paper); | |
| } | |
| .blk-ring b { | |
| position: relative; | |
| font-size: var(--text-caption); | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .blk-meter .k { | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| color: var(--ink-soft) ; | |
| } | |
| .blk-meter.empty { | |
| box-shadow: none; | |
| animation: none; | |
| } | |
| .blk-meter.empty .blk-ring b, | |
| .blk-meter.empty .k { | |
| color: var(--mid) ; | |
| } | |
| .blk-meter.on[data-kind="done"] .blk-ring { | |
| --ring: var(--color-blink-deep); | |
| } | |
| .blk-meter.on[data-kind="done"] { | |
| border-color: var(--flash); | |
| box-shadow: 0 0 0 2px var(--flash); | |
| } | |
| .blk-meter.on[data-kind="risky"] .blk-ring { | |
| --ring: var(--ink); | |
| } | |
| .blk-meter.on[data-kind="risky"] { | |
| border-color: var(--ink-soft); | |
| } | |
| /* the screenshot's facts and folds, as an answer's foot, outside a card */ | |
| .blk-scr > .blk-answer-foot { | |
| margin: 0; | |
| padding: 12px 0 0; | |
| border-top: 1px solid var(--line); | |
| } | |
| .blk-read { | |
| display: block; | |
| width: 100%; | |
| max-width: 480px; | |
| margin: 4px 0 0 ; | |
| border-radius: var(--radius-control); | |
| box-shadow: 0 0 0 1px var(--line); | |
| } | |
| .blk-scr > .blk-runit { | |
| margin: 0; | |
| } | |
| /* --- computer use: real runs first, then how, then try --------------------------------- */ | |
| .blk-cuax { | |
| display: block; | |
| min-width: 0; | |
| } | |
| .blk-cuax-pitch { | |
| margin: 0 0 20px ; | |
| } | |
| /* the stage: a strip of real runs, or one run in the player */ | |
| .blk-cuax-stage { | |
| container-type: inline-size; | |
| scroll-margin-top: 12px; | |
| } | |
| /* three reels fill the row exactly: two screens and a phone, or three screens */ | |
| .blk-cuax-strip { | |
| --fit: 3.8; | |
| --reel-h: clamp(190px, calc((100cqw - 28px) / var(--fit)), 330px); | |
| display: flex; | |
| gap: 14px; | |
| height: var(--reel-h); | |
| margin: 0 -2px; | |
| padding: 2px 2px 6px; | |
| overflow-x: auto; | |
| overflow-y: hidden; | |
| scroll-snap-type: x mandatory; | |
| scrollbar-width: none; | |
| } | |
| .blk-cuax-strip.wide { | |
| --fit: 5; | |
| } | |
| .blk-cuax-strip::-webkit-scrollbar { | |
| display: none; | |
| } | |
| a.blk-cuax-reel { | |
| position: relative; | |
| display: block; | |
| flex: none; | |
| height: 100%; | |
| aspect-ratio: var(--ar); | |
| padding: 0; | |
| overflow: hidden; | |
| border-radius: var(--radius-cards); | |
| background: #0b0d12; | |
| box-shadow: 0 0 0 1px var(--line), var(--shadow-subtle); | |
| color: var(--ink); | |
| text-decoration: none; | |
| scroll-snap-align: start; | |
| animation: blk-rise 0.5s var(--ease) both; | |
| animation-delay: calc(var(--i) * 90ms); | |
| transition: box-shadow 0.2s var(--ease); | |
| } | |
| a.blk-cuax-reel:hover { | |
| box-shadow: 0 0 0 2px var(--blink), 0 10px 30px -14px rgba(11, 13, 18, 0.4); | |
| } | |
| .blk-cuax-reel video, | |
| .blk-cuax-reel img { | |
| display: block; | |
| width: 100%; | |
| height: 100%; | |
| margin: 0 ; | |
| object-fit: cover; | |
| object-position: top center; | |
| border-radius: 0; | |
| } | |
| .blk-cuax-cap { | |
| position: absolute; | |
| left: 10px; | |
| bottom: 10px; | |
| display: inline-flex; | |
| align-items: baseline; | |
| gap: 8px; | |
| max-width: calc(100% - 20px); | |
| padding: 5px 10px; | |
| border-radius: var(--radius-control); | |
| background: rgba(255, 255, 255, 0.94); | |
| -webkit-backdrop-filter: blur(8px); | |
| backdrop-filter: blur(8px); | |
| box-shadow: 0 0 0 1px rgba(11, 13, 18, 0.06), 0 2px 8px rgba(11, 13, 18, 0.12); | |
| font-size: var(--text-small); | |
| line-height: 1.3; | |
| white-space: nowrap; | |
| } | |
| .blk-cuax-cap b { | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| } | |
| .blk-cuax-cap em { | |
| font-style: normal; | |
| color: var(--mid) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .blk-cuax-reel.tall .blk-cuax-cap { | |
| right: 8px; | |
| left: 8px; | |
| flex-direction: column; | |
| align-items: flex-start; | |
| gap: 0; | |
| padding: 5px 8px; | |
| white-space: normal; | |
| } | |
| /* the headline numbers, as stat blocks */ | |
| .blk-cuax-stats { | |
| display: grid; | |
| grid-template-columns: repeat(4, minmax(0, 1fr)); | |
| margin: 16px 0 32px; | |
| padding: 16px 0; | |
| border-top: 1px solid var(--line); | |
| border-bottom: 1px solid var(--line); | |
| } | |
| .blk-cuax-stats span { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 2px; | |
| min-width: 0; | |
| padding: 0 20px; | |
| border-left: 1px solid var(--line); | |
| font-size: var(--text-small); | |
| line-height: 1.4; | |
| color: var(--mid) ; | |
| animation: blk-rise 0.45s var(--ease) both; | |
| animation-delay: calc(200ms + var(--i) * 80ms); | |
| } | |
| .blk-cuax-stats span:first-child { | |
| padding-left: 0; | |
| border-left: 0; | |
| } | |
| .blk-cuax-stats b { | |
| font-size: var(--text-heading); | |
| font-weight: 600; | |
| line-height: 1.15; | |
| letter-spacing: -0.02em; | |
| color: var(--ink) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| /* the scenarios: a poster each, its name, and every run it had */ | |
| .blk-cuax-gl { | |
| margin-top: 0 ; | |
| } | |
| .blk-cuax-cards { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); | |
| gap: 12px; | |
| margin: 0 0 8px; | |
| } | |
| a.blk-cuax-card { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 6px; | |
| min-width: 0; | |
| padding: 8px 8px 12px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-subtle); | |
| color: var(--ink); | |
| text-decoration: none; | |
| animation: blk-rise 0.45s var(--ease) both; | |
| animation-delay: calc(var(--i) * 45ms); | |
| transition: border-color 0.15s ease, box-shadow 0.15s ease; | |
| } | |
| a.blk-cuax-card:hover { | |
| border-color: var(--blink-line); | |
| box-shadow: 0 8px 24px -14px rgba(16, 24, 40, 0.3); | |
| } | |
| a.blk-cuax-card.on { | |
| border-color: var(--blink); | |
| box-shadow: 0 0 0 1px var(--blink); | |
| } | |
| .blk-cuax-thumb { | |
| position: relative; | |
| display: block; | |
| aspect-ratio: 5 / 3; | |
| overflow: hidden; | |
| border-radius: var(--radius-control); | |
| background: var(--alt); | |
| box-shadow: 0 0 0 1px var(--line); | |
| } | |
| .blk-cuax-thumb video, | |
| .blk-cuax-thumb img { | |
| display: block; | |
| width: 100%; | |
| height: 100%; | |
| margin: 0 ; | |
| object-fit: cover; | |
| object-position: top center; | |
| border-radius: 0; | |
| } | |
| .blk-cuax-thumb.tall { | |
| background: linear-gradient(180deg, var(--blink-tint), var(--alt)); | |
| } | |
| .blk-cuax-thumb.tall video, | |
| .blk-cuax-thumb.tall img { | |
| width: 42%; | |
| margin: 0 auto ; | |
| box-shadow: 0 0 0 1px var(--line), 0 6px 18px -8px rgba(11, 13, 18, 0.4); | |
| } | |
| .blk-cuax-kind { | |
| position: absolute; | |
| top: 8px; | |
| right: 8px; | |
| padding: 2px 8px; | |
| border-radius: var(--radius-round); | |
| background: rgba(255, 255, 255, 0.94); | |
| box-shadow: 0 0 0 1px rgba(11, 13, 18, 0.08); | |
| font-size: var(--text-caption); | |
| font-style: normal; | |
| font-weight: 500; | |
| line-height: 16px; | |
| color: var(--ink-soft) ; | |
| } | |
| a.blk-cuax-card > b { | |
| display: -webkit-box; | |
| padding: 4px 4px 0; | |
| overflow: hidden; | |
| font-size: var(--text-body); | |
| font-weight: 600; | |
| line-height: 1.35; | |
| color: var(--ink) ; | |
| -webkit-box-orient: vertical; | |
| -webkit-line-clamp: 2; | |
| } | |
| .blk-cuax-rate { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| padding: 0 4px; | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| color: var(--ink-soft) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .blk-cuax-rate > span:last-child { | |
| color: inherit ; | |
| white-space: nowrap; | |
| } | |
| .blk-cuax-by { | |
| padding: 0 4px; | |
| font-size: var(--text-caption); | |
| color: var(--mid) ; | |
| } | |
| /* one dot per run: filled when it finished, open when it did not; none is left out */ | |
| .blk-cuax-dots { | |
| display: inline-flex; | |
| flex-wrap: wrap; | |
| gap: 3px; | |
| max-width: 120px; | |
| } | |
| .blk-cuax-dots i { | |
| width: 7px; | |
| height: 7px; | |
| border-radius: 50%; | |
| background: var(--blink); | |
| } | |
| .blk-cuax-dots i.no { | |
| background: transparent; | |
| box-shadow: inset 0 0 0 1.5px var(--mid); | |
| } | |
| /* --- the player ------------------------------------------------------------------------- */ | |
| .blk-cuax-player { | |
| display: grid; | |
| gap: 12px; | |
| padding: 16px 18px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-subtle); | |
| outline: none; | |
| animation: blk-rise 0.4s var(--ease) both; | |
| } | |
| .blk-cuax-bar { | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| min-width: 0; | |
| } | |
| .blk-cuax-x { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 4px; | |
| flex: none; | |
| height: 32px; | |
| padding: 0 12px 0 8px; | |
| border: 1px solid var(--line-strong); | |
| border-radius: var(--radius-control); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-control); | |
| color: var(--ink-soft); | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| cursor: pointer; | |
| } | |
| .blk-cuax-x:hover { | |
| background: var(--alt); | |
| } | |
| .blk-cuax-x svg, | |
| .blk-cuax-step svg { | |
| width: 16px; | |
| height: 16px; | |
| fill: none; | |
| stroke: currentColor; | |
| stroke-width: 2; | |
| stroke-linecap: round; | |
| stroke-linejoin: round; | |
| } | |
| .blk-cuax-name { | |
| min-width: 0; | |
| margin: 0 ; | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| white-space: nowrap; | |
| font-size: var(--text-title) ; | |
| font-weight: 600 ; | |
| letter-spacing: -0.01em; | |
| color: var(--ink); | |
| } | |
| .blk-cuax-who { | |
| flex: none; | |
| margin-left: auto; | |
| padding: 0 10px; | |
| border-radius: var(--radius-round); | |
| background: var(--blink-tint); | |
| color: var(--blink-ink) ; | |
| font-size: var(--text-caption); | |
| font-weight: 500; | |
| line-height: 24px; | |
| } | |
| .blk-cuax-task { | |
| margin: 0 ; | |
| font-size: var(--text-body); | |
| line-height: 1.5; | |
| color: var(--ink-soft) ; | |
| } | |
| .blk-cuax-task span { | |
| display: inline-block; | |
| margin-right: 8px; | |
| padding: 0 7px; | |
| border-radius: var(--radius-xs); | |
| background: var(--sunken); | |
| color: var(--mid) ; | |
| font-size: var(--text-caption); | |
| font-weight: 600; | |
| line-height: 20px; | |
| } | |
| .blk-cuax-body { | |
| display: grid; | |
| grid-template-columns: minmax(0, 1.8fr) minmax(260px, 1fr); | |
| grid-template-areas: "screen side" "nav side"; | |
| grid-template-rows: auto 1fr; | |
| gap: 12px 20px; | |
| align-items: start; | |
| } | |
| .blk-cuax-player.tall .blk-cuax-body { | |
| grid-template-columns: minmax(0, 330px) minmax(0, 1fr); | |
| } | |
| /* under a phone's narrow screen, Video or Steps takes a line of its own above the steps */ | |
| .blk-cuax-player.tall .blk-cuax-nav { | |
| flex-direction: column; | |
| align-items: stretch; | |
| } | |
| .blk-cuax-player.tall .blk-cuax-views { | |
| justify-content: center; | |
| } | |
| .blk-cuax-player.tall .blk-cuax-views button { | |
| flex: 1 1 0; | |
| } | |
| .blk-cuax-screen { | |
| grid-area: screen; | |
| min-width: 0; | |
| } | |
| .blk-cuax-nav { | |
| grid-area: nav; | |
| } | |
| .blk-cuax-vid { | |
| overflow: hidden; | |
| border-radius: 10px; | |
| background: #0b0d12; | |
| box-shadow: 0 0 0 1px var(--line); | |
| } | |
| .blk-cuax-vid video { | |
| display: block; | |
| width: 100%; | |
| height: 100%; | |
| margin: 0 ; | |
| object-fit: contain; | |
| border-radius: 0; | |
| } | |
| .blk-cuax-vid.wait img { | |
| display: block; | |
| width: 100%; | |
| height: 100%; | |
| margin: 0 ; | |
| object-fit: contain; | |
| opacity: 0.55; | |
| border-radius: 0; | |
| } | |
| .blk-cuax-side { | |
| grid-area: side; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 12px; | |
| min-width: 0; | |
| animation: blk-fade 0.3s ease both; | |
| } | |
| .blk-cuax-side .blk-sv { | |
| min-height: 64px; | |
| padding: 10px 14px; | |
| box-shadow: none; | |
| } | |
| .blk-cuax-side .blk-sv h3 { | |
| font-size: var(--text-title) ; | |
| } | |
| .blk-cuax-side .blk-sv-mark { | |
| width: 34px; | |
| height: 34px; | |
| border-radius: var(--radius-control); | |
| font-size: 15px; | |
| } | |
| .blk-cuax-side .blk-opts { | |
| margin: 0 ; | |
| } | |
| .blk-cuax-side .blk-opt { | |
| grid-template-columns: minmax(0, 1fr) minmax(48px, 0.7fr) 52px; | |
| gap: 10px; | |
| } | |
| .blk-cuax-side .blk-meter { | |
| box-shadow: none; | |
| } | |
| .blk-cuax-stepn { | |
| display: flex; | |
| align-items: baseline; | |
| justify-content: space-between; | |
| gap: 8px; | |
| margin: 0 ; | |
| font-size: var(--text-small); | |
| color: var(--mid) ; | |
| } | |
| .blk-cuax-stepn b { | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| } | |
| .blk-cuax-stepn span { | |
| color: var(--mid) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .blk-cuax-miss { | |
| margin: -4px 0 0 ; | |
| font-size: var(--text-small); | |
| color: var(--mid) ; | |
| } | |
| .blk-cuax-miss::before { | |
| content: ""; | |
| display: inline-block; | |
| width: 10px; | |
| height: 10px; | |
| margin: 0 6px -1px 0; | |
| border: 1.5px dashed var(--ink-soft); | |
| border-radius: 3px; | |
| } | |
| .blk-cuax-outcome { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| gap: 8px; | |
| margin: 0 ; | |
| font-size: var(--text-small); | |
| color: var(--mid) ; | |
| } | |
| .blk-cuax-outcome span { | |
| padding: 3px 12px; | |
| border-radius: var(--radius-round); | |
| background: var(--flash); | |
| color: var(--color-flash-ink) ; | |
| font-weight: 600; | |
| animation: blk-pop 0.4s var(--ease) both; | |
| } | |
| .blk-cuax-outcome.no span { | |
| background: transparent; | |
| box-shadow: inset 0 0 0 1.5px var(--ink-soft); | |
| color: var(--ink) ; | |
| } | |
| .blk-cuax-outcome em { | |
| font-style: normal; | |
| color: var(--mid) ; | |
| } | |
| .blk-cuax-facts { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 4px 0; | |
| margin: 0 ; | |
| font-size: var(--text-small); | |
| color: var(--ink-soft) ; | |
| } | |
| .blk-cuax-facts span { | |
| color: inherit ; | |
| } | |
| .blk-cuax-facts span + span::before { | |
| content: "\00b7"; | |
| margin: 0 8px; | |
| color: var(--faint); | |
| } | |
| .blk-cuax-runs { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| gap: 6px 10px; | |
| font-size: var(--text-small); | |
| color: var(--mid) ; | |
| } | |
| .blk-cuax-runs b { | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .blk-cuax-runs span { | |
| color: var(--mid) ; | |
| } | |
| .blk-cuax-acc { | |
| margin: -4px 0 0 ; | |
| font-size: var(--text-small); | |
| color: var(--mid) ; | |
| } | |
| .blk-cuax-alt { | |
| align-self: flex-start; | |
| padding: 0; | |
| border: 0; | |
| background: none; | |
| color: var(--blink-ink); | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| text-decoration: underline; | |
| text-underline-offset: 3px; | |
| cursor: pointer; | |
| } | |
| ul.blk-cuax-cmp { | |
| display: grid; | |
| gap: 2px; | |
| margin: -4px 0 0 ; | |
| padding: 0 ; | |
| list-style: none ; | |
| } | |
| .blk-cuax-cmp li { | |
| margin: 0 ; | |
| } | |
| .blk-cuax-cmp button { | |
| display: grid; | |
| grid-template-columns: 110px minmax(0, 1fr) auto; | |
| align-items: center; | |
| gap: 10px; | |
| width: 100%; | |
| padding: 6px 8px; | |
| border: 0; | |
| border-radius: var(--radius-control); | |
| background: transparent; | |
| color: var(--ink-soft); | |
| font-size: var(--text-small); | |
| text-align: left; | |
| cursor: pointer; | |
| } | |
| .blk-cuax-cmp button:hover { | |
| background: var(--alt); | |
| } | |
| .blk-cuax-cmp li.on button { | |
| background: var(--blink-tint); | |
| color: var(--blink-ink); | |
| } | |
| .blk-cuax-cmp span { | |
| font-size: var(--text-caption); | |
| color: inherit ; | |
| } | |
| .blk-cuax-cmp i { | |
| position: relative; | |
| height: 6px; | |
| overflow: hidden; | |
| border-radius: var(--radius-round); | |
| background: var(--track); | |
| } | |
| .blk-cuax-cmp i::after { | |
| content: ""; | |
| position: absolute; | |
| inset: 0 auto 0 0; | |
| width: calc(var(--p) * 100%); | |
| border-radius: var(--radius-round); | |
| background: var(--blink-light); | |
| transform-origin: left center; | |
| animation: blk-wipe 0.6s var(--ease) both; | |
| } | |
| .blk-cuax-cmp li.on i::after { | |
| background: var(--blink); | |
| } | |
| .blk-cuax-cmp b { | |
| font-weight: 600; | |
| color: inherit ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| /* Video or Steps, then the steps themselves, on one line that never wraps */ | |
| .blk-cuax-nav { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| min-width: 0; | |
| } | |
| .blk-cuax-walk { | |
| display: flex; | |
| flex: 1 1 auto; | |
| align-items: center; | |
| gap: 6px; | |
| min-width: 0; | |
| } | |
| .blk-cuax-views { | |
| display: inline-flex; | |
| flex: none; | |
| gap: 2px; | |
| padding: 3px; | |
| border-radius: 10px; | |
| background: var(--sunken); | |
| } | |
| .blk-cuax-views button { | |
| height: 28px; | |
| padding: 0 12px; | |
| border: 0; | |
| border-radius: 7px; | |
| background: transparent; | |
| color: var(--mid); | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| cursor: pointer; | |
| transition: background-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease; | |
| } | |
| .blk-cuax-views button:hover { | |
| color: var(--ink); | |
| } | |
| .blk-cuax-views button.on { | |
| background: var(--paper); | |
| color: var(--ink); | |
| box-shadow: 0 1px 2px rgba(16, 24, 40, 0.1), 0 0 0 1px rgba(16, 24, 40, 0.06); | |
| } | |
| .blk-cuax-step { | |
| display: grid; | |
| place-items: center; | |
| flex: none; | |
| width: 32px; | |
| height: 32px; | |
| padding: 0; | |
| border: 1px solid var(--line-strong); | |
| border-radius: var(--radius-control); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-control); | |
| color: var(--ink-soft); | |
| cursor: pointer; | |
| } | |
| .blk-cuax-step:hover { | |
| background: var(--alt); | |
| } | |
| /* play the steps: the one control drawn filled, since it moves on its own */ | |
| .blk-cuax-autoplay { | |
| border-color: var(--blink); | |
| color: var(--blink); | |
| } | |
| .blk-cuax-autoplay svg { | |
| fill: currentColor; | |
| stroke-width: 0; | |
| } | |
| .blk-cuax-autoplay[aria-pressed="true"] { | |
| background: var(--blink); | |
| color: #ffffff; | |
| } | |
| .blk-cuax-autoplay[aria-pressed="true"] svg { | |
| fill: none; | |
| stroke-width: 2.6; | |
| } | |
| /* the steps scroll under the arrows on a narrow screen; the step in view is always brought into it */ | |
| ol.blk-cuax-rail { | |
| display: flex; | |
| flex: 1 1 auto; | |
| gap: 4px; | |
| min-width: 0; | |
| margin: 0 ; | |
| padding: 3px 2px ; | |
| overflow-x: auto; | |
| list-style: none ; | |
| scrollbar-width: none; | |
| } | |
| ol.blk-cuax-rail::-webkit-scrollbar { | |
| display: none; | |
| } | |
| .blk-cuax-rail li { | |
| flex: none; | |
| margin: 0 ; | |
| } | |
| .blk-cuax-rail button { | |
| display: grid; | |
| place-items: center; | |
| width: 28px; | |
| height: 28px; | |
| padding: 0; | |
| border: 0; | |
| border-radius: 50%; | |
| background: var(--paper); | |
| box-shadow: inset 0 0 0 1.5px var(--blink-light); | |
| color: var(--ink-soft); | |
| font-size: var(--text-caption); | |
| font-weight: 600; | |
| font-variant-numeric: tabular-nums; | |
| cursor: pointer; | |
| transition: background-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease; | |
| } | |
| .blk-cuax-rail button:hover { | |
| box-shadow: inset 0 0 0 1.5px var(--blink); | |
| } | |
| .blk-cuax-rail button.miss { | |
| box-shadow: inset 0 0 0 1.5px var(--faint); | |
| color: var(--mid); | |
| } | |
| .blk-cuax-rail button.gate { | |
| box-shadow: inset 0 0 0 2px var(--ink); | |
| } | |
| .blk-cuax-rail button.done { | |
| background: var(--flash); | |
| box-shadow: inset 0 0 0 1px rgba(11, 13, 18, 0.3); | |
| color: var(--color-flash-ink); | |
| } | |
| .blk-cuax-rail button.on { | |
| background: var(--blink); | |
| box-shadow: none; | |
| color: #ffffff; | |
| } | |
| .blk-cuax-load { | |
| display: flex; | |
| gap: 6px; | |
| margin: 8px 0 ; | |
| } | |
| .blk-cuax-load i { | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 50%; | |
| background: var(--blink-light); | |
| animation: blk-pulse 1s ease-in-out infinite; | |
| } | |
| .blk-cuax-load i:nth-child(2) { | |
| animation-delay: 0.15s; | |
| } | |
| .blk-cuax-load i:nth-child(3) { | |
| animation-delay: 0.3s; | |
| } | |
| /* --- how a screenshot is read: six nodes, told in order once on screen ------------------------ */ | |
| .blk-cx { | |
| margin: 36px 0 0; | |
| } | |
| .blk-cx ol.blk-cx-flow { | |
| display: grid; | |
| grid-template-columns: repeat(6, minmax(0, 1fr)); | |
| gap: 12px; | |
| margin: 14px 0 0 ; | |
| padding: 0 ; | |
| list-style: none ; | |
| } | |
| .blk-cx-flow > li { | |
| position: relative; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 3px; | |
| margin: 0 ; | |
| padding: 12px 12px 14px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| font-size: var(--text-small); | |
| line-height: 1.45; | |
| color: var(--mid); | |
| } | |
| /* the thread from one node to the next */ | |
| .blk-cx-flow > li + li::before { | |
| content: ""; | |
| position: absolute; | |
| left: -13px; | |
| top: 54px; | |
| width: 12px; | |
| height: 2px; | |
| background: var(--blink-line); | |
| transform-origin: left center; | |
| } | |
| .blk-cx-flow > li > b { | |
| margin-top: 8px; | |
| font-size: var(--text-body); | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| } | |
| .blk-cx-flow > li > .blk-cx-cap { | |
| color: var(--mid) ; | |
| } | |
| .blk-cx-flow > li > code { | |
| display: block; | |
| margin-top: 4px; | |
| padding: 0; | |
| background: none; | |
| font-family: var(--font-geist); | |
| font-size: var(--text-caption); | |
| font-weight: 500; | |
| line-height: 1.45; | |
| color: var(--blink-ink) ; | |
| font-variant-numeric: tabular-nums; | |
| overflow-wrap: anywhere; | |
| } | |
| .blk-cx-n { | |
| position: absolute; | |
| top: 8px; | |
| right: 10px; | |
| font-size: var(--text-caption); | |
| font-weight: 500; | |
| color: var(--faint) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .blk-cx-art { | |
| position: relative; | |
| display: flex; | |
| align-items: center; | |
| justify-content: flex-start; | |
| height: 84px; | |
| margin-top: 12px; | |
| } | |
| /* 1: the numbered screenshot, with the sweep that reads it */ | |
| .blk-cx-shot, | |
| .blk-cx-grid { | |
| position: relative; | |
| display: block; | |
| height: 72px; | |
| aspect-ratio: 5 / 3; | |
| overflow: hidden; | |
| border-radius: var(--radius-small); | |
| background: var(--alt); | |
| box-shadow: 0 0 0 1px var(--line); | |
| } | |
| .blk-cx-shot img, | |
| .blk-cx-grid img { | |
| display: block; | |
| width: 100%; | |
| height: 100%; | |
| margin: 0 ; | |
| object-fit: cover; | |
| border-radius: 0; | |
| } | |
| .blk-cx-shot::after { | |
| content: ""; | |
| position: absolute; | |
| inset: 0; | |
| background: linear-gradient(180deg, rgba(36, 71, 245, 0) 0%, rgba(36, 71, 245, 0.08) 40%, rgba(36, 71, 245, 0.3) 49.5%, rgba(36, 71, 245, 0) 50.5%); | |
| background-size: 100% 200%; | |
| opacity: 0; | |
| } | |
| /* 2: the encoder's blocks, lit one after another */ | |
| .blk-cx-enc { | |
| display: flex; | |
| flex-direction: column-reverse; | |
| justify-content: center; | |
| gap: 1px; | |
| height: 72px; | |
| padding: 0 6px; | |
| } | |
| .blk-cx-enc i { | |
| display: block; | |
| width: 64px; | |
| height: 1.6px; | |
| border-radius: 1px; | |
| background: var(--blink); | |
| opacity: 0.85; | |
| } | |
| /* 3: the screenshot cut into the patches that become image tokens */ | |
| .blk-cx-cells { | |
| position: absolute; | |
| inset: 0; | |
| background-image: linear-gradient(to right, rgba(36, 71, 245, 0.55) 1px, transparent 1px), linear-gradient(to bottom, rgba(36, 71, 245, 0.55) 1px, transparent 1px); | |
| background-size: calc(100% / var(--cols)) calc(100% / var(--rows)); | |
| background-color: rgba(36, 71, 245, 0.1); | |
| } | |
| .blk-cx-count, | |
| .blk-cxp-tally { | |
| position: absolute; | |
| right: 5px; | |
| bottom: 5px; | |
| padding: 0 6px; | |
| border-radius: var(--radius-xs); | |
| background: var(--blink); | |
| color: #ffffff ; | |
| font-size: var(--text-caption); | |
| font-weight: 600; | |
| line-height: 18px; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| /* 4: three typed questions */ | |
| .blk-cx-qs { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: flex-start; | |
| gap: 4px; | |
| } | |
| .blk-cx-qs em { | |
| padding: 0 8px; | |
| border-radius: var(--radius-round); | |
| background: var(--blink-tint); | |
| box-shadow: inset 0 0 0 1px var(--blink-line); | |
| color: var(--blink-ink) ; | |
| font-size: var(--text-caption); | |
| font-style: normal; | |
| font-weight: 500; | |
| line-height: 20px; | |
| } | |
| /* 5: a probability for every offered answer */ | |
| ul.blk-cx-bars { | |
| display: grid; | |
| gap: 2px; | |
| width: 100%; | |
| margin: 0 ; | |
| padding: 0 ; | |
| list-style: none ; | |
| } | |
| .blk-cx-bars li { | |
| display: grid; | |
| grid-template-columns: 44px minmax(0, 1fr) 32px; | |
| align-items: center; | |
| gap: 5px; | |
| margin: 0 ; | |
| padding: 0; | |
| font-size: var(--text-caption); | |
| line-height: 14px; | |
| color: var(--mid); | |
| } | |
| .blk-cx-bars span { | |
| overflow: hidden; | |
| white-space: nowrap; | |
| text-overflow: ellipsis; | |
| color: var(--mid) ; | |
| } | |
| .blk-cx-bars i { | |
| position: relative; | |
| height: 5px; | |
| overflow: hidden; | |
| border-radius: var(--radius-round); | |
| background: var(--track); | |
| } | |
| .blk-cx-bars i::after { | |
| content: ""; | |
| position: absolute; | |
| inset: 0 auto 0 0; | |
| width: calc(var(--p) * 100%); | |
| border-radius: var(--radius-round); | |
| background: var(--blink-light); | |
| transform-origin: left center; | |
| } | |
| .blk-cx-bars li.win i::after { | |
| background: var(--blink); | |
| } | |
| .blk-cx-bars b { | |
| margin: 0; | |
| font-size: var(--text-caption); | |
| font-weight: 500; | |
| text-align: right; | |
| color: var(--ink-soft) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| /* 6: the action, in the flash colour */ | |
| .blk-cx-act b { | |
| display: inline-block; | |
| padding: 6px 12px; | |
| border-radius: var(--radius-control); | |
| background: var(--flash); | |
| box-shadow: inset 0 0 0 1px rgba(11, 13, 18, 0.2); | |
| color: var(--color-flash-ink) ; | |
| font-size: 15px; | |
| font-weight: 600; | |
| } | |
| /* told in order once it is on screen; without the script it simply stands still */ | |
| .blk-cx.arm:not(.on) .blk-cx-flow > li { | |
| opacity: 0; | |
| } | |
| .blk-cx.on .blk-cx-flow > li { | |
| animation: blk-rise 0.5s var(--ease) both; | |
| animation-delay: calc(var(--i) * 420ms); | |
| } | |
| .blk-cx.on .blk-cx-flow > li + li::before { | |
| animation: blk-wipe 0.35s var(--ease) both; | |
| animation-delay: calc(var(--i) * 420ms - 120ms); | |
| } | |
| .blk-cx.on .blk-cx-shot::after { | |
| opacity: 1; | |
| animation: blk-scan 1.1s linear 0.2s 2 both; | |
| } | |
| .blk-cx.on .blk-cx-enc i { | |
| animation: blk-cx-layer 0.5s var(--ease) both; | |
| animation-delay: calc(420ms + var(--k) * 26ms); | |
| } | |
| .blk-cx.on .blk-cx-cells { | |
| animation: blk-cx-sweep 1.3s var(--ease) 0.9s both; | |
| } | |
| .blk-cx.on .blk-cx-qs em { | |
| animation: blk-pop 0.35s var(--ease) both; | |
| animation-delay: calc(1260ms + var(--k) * 140ms); | |
| } | |
| .blk-cx.on .blk-cx-bars i::after { | |
| animation: blk-wipe 0.7s var(--ease) both; | |
| animation-delay: calc(1700ms + var(--i) * 90ms); | |
| } | |
| .blk-cx.on .blk-cx-act b { | |
| animation: blk-pop 0.45s var(--ease) 2.2s both, blk-flash 0.6s ease-out 2.4s both; | |
| } | |
| /* --- how one step works: a recorded step from its raw screen to blink's decision -------------- | |
| Two rows of four: the browser's work (no model) with the real screens large, then blink's. | |
| Told in order once the first row is on screen, a little quicker than the six-node version. */ | |
| .blk-cuax-howbtn { | |
| display: inline; | |
| margin: 0; | |
| padding: 0; | |
| border: 0; | |
| border-radius: var(--radius-xs); | |
| background: none; | |
| color: var(--blink-ink) ; | |
| font: inherit; | |
| font-weight: 500; | |
| text-decoration: underline; | |
| text-underline-offset: 3px; | |
| cursor: pointer; | |
| } | |
| .blk-cuax-howbtn:hover { | |
| color: var(--color-blink-hover) ; | |
| } | |
| .blk-cuax-howbtn:focus-visible, | |
| .blk-cxp-open:focus-visible, | |
| a.blk-cxp-shot:focus-visible { | |
| outline: none; | |
| box-shadow: var(--ring); | |
| } | |
| .blk-cuax-side > .blk-cuax-howbtn { | |
| align-self: flex-start; | |
| margin: 0; | |
| font-size: var(--text-small); | |
| } | |
| .blk-cxp-head { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 6px 16px; | |
| } | |
| .blk-cxp-head .blk-section { | |
| margin: 0 ; | |
| } | |
| .blk-cxp-open { | |
| flex: none; | |
| height: 32px; | |
| padding: 0 12px; | |
| border: 1px solid var(--line-strong); | |
| border-radius: var(--radius-control); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-control); | |
| color: var(--ink-soft); | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| cursor: pointer; | |
| } | |
| .blk-cxp-open:hover { | |
| background: var(--alt); | |
| } | |
| .blk-cxp > .blk-note { | |
| margin-top: 4px ; | |
| } | |
| p.blk-eyebrow.blk-cxp-row { | |
| margin: 20px 0 0 ; | |
| } | |
| .blk-cx ol.blk-cx-flow.blk-cx-four { | |
| grid-template-columns: repeat(4, minmax(0, 1fr)); | |
| margin-top: 10px ; | |
| } | |
| /* the browser's row: the real screens, as large as the cards allow */ | |
| .blk-cxp-big > li > .blk-cx-art { | |
| display: block; | |
| width: 100%; | |
| min-width: 0; | |
| height: auto; | |
| } | |
| .blk-cx-flow.blk-cxp-big > li + li::before { | |
| display: none; | |
| } | |
| .blk-cxp-big > li + li > .blk-cx-art::before { | |
| content: ""; | |
| position: absolute; | |
| left: -25px; | |
| top: 50%; | |
| width: 12px; | |
| height: 2px; | |
| background: var(--blink-line); | |
| transform-origin: left center; | |
| } | |
| .blk-cxp-shot { | |
| position: relative; | |
| display: block; | |
| width: 100%; | |
| aspect-ratio: 5 / 3; | |
| overflow: hidden; | |
| border-radius: var(--radius-small); | |
| background: var(--alt); | |
| box-shadow: 0 0 0 1px var(--line); | |
| } | |
| a.blk-cxp-shot { | |
| transition: box-shadow 0.15s ease; | |
| } | |
| a.blk-cxp-shot:hover { | |
| box-shadow: 0 0 0 1px var(--blink-line), var(--shadow-control); | |
| } | |
| .blk-cxp-shot img { | |
| display: block; | |
| width: 100%; | |
| height: 100%; | |
| margin: 0 ; | |
| object-fit: cover; | |
| border-radius: 0; | |
| } | |
| /* 2: what the DOM listed, outlined where it sits; no numbers yet */ | |
| .blk-cxp-boxes { | |
| position: absolute; | |
| inset: 0; | |
| } | |
| .blk-cxp-boxes i { | |
| position: absolute; | |
| left: var(--x); | |
| top: var(--y); | |
| width: var(--w); | |
| height: var(--h); | |
| box-sizing: border-box; | |
| border: 1.5px dashed var(--blink); | |
| border-radius: 2px; | |
| background: rgba(36, 71, 245, 0.08); | |
| } | |
| /* 4: the request's own fields, one line each */ | |
| .blk-cxp-req { | |
| display: flex; | |
| flex-direction: column; | |
| justify-content: center; | |
| gap: 4px; | |
| width: 100%; | |
| aspect-ratio: 5 / 3; | |
| padding: 10px 12px; | |
| box-sizing: border-box; | |
| overflow: hidden; | |
| border-radius: var(--radius-small); | |
| background: var(--alt); | |
| box-shadow: 0 0 0 1px var(--line); | |
| font-family: var(--font-geist-mono); | |
| font-size: var(--text-caption); | |
| line-height: 1.4; | |
| } | |
| .blk-cxp-req > span { | |
| display: block; | |
| overflow: hidden; | |
| white-space: nowrap; | |
| text-overflow: ellipsis; | |
| color: var(--ink-soft) ; | |
| } | |
| .blk-cxp-req i { | |
| font-style: normal; | |
| color: var(--blink-ink) ; | |
| } | |
| .blk-cxp-req em { | |
| padding: 0 5px; | |
| border-radius: var(--radius-xs); | |
| background: var(--blink-tint); | |
| box-shadow: inset 0 0 0 1px var(--blink-line); | |
| font-style: normal; | |
| color: var(--blink-ink) ; | |
| } | |
| /* where the boxes come from, in every app */ | |
| .blk-cxp-src { | |
| margin: 22px 0 0; | |
| padding: 14px 16px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--alt); | |
| } | |
| .blk-cxp-src > p.blk-eyebrow { | |
| margin: 0 0 8px ; | |
| } | |
| .blk-cxp-src ul { | |
| display: grid; | |
| grid-template-columns: repeat(3, minmax(0, 1fr)); | |
| gap: 10px 24px; | |
| margin: 0 ; | |
| padding: 0 ; | |
| list-style: none ; | |
| } | |
| .blk-cxp-src li { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 2px; | |
| margin: 0 ; | |
| font-size: var(--text-small); | |
| line-height: 1.45; | |
| } | |
| .blk-cxp-src li b { | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| } | |
| .blk-cxp-src li span { | |
| color: var(--mid) ; | |
| } | |
| .blk-cxp-none { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| margin: 12px 0 0 ; | |
| padding-top: 12px; | |
| border-top: 1px solid var(--line); | |
| font-size: var(--text-small); | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| } | |
| .blk-cxp-none::before { | |
| content: ""; | |
| flex: none; | |
| width: 5px; | |
| height: 10px; | |
| margin: -3px 2px 0 5px; | |
| border: solid var(--blink); | |
| border-width: 0 2px 2px 0; | |
| transform: rotate(45deg); | |
| } | |
| .blk-cxp-time { | |
| max-width: 880px; | |
| margin: 10px 0 0 ; | |
| font-size: var(--text-caption); | |
| line-height: 1.5; | |
| color: var(--mid) ; | |
| } | |
| .blk-cxp-folds { | |
| margin: 16px 0 0; | |
| } | |
| .blk-cxp-folds details.blk-d > .blk-pre { | |
| max-height: 440px; | |
| margin-bottom: 12px ; | |
| } | |
| .blk-cxp-folds details.blk-d > .blk-tablewrap { | |
| margin-bottom: 12px ; | |
| } | |
| table.blk-cxp-table th:nth-child(2), | |
| table.blk-cxp-table td:nth-child(2), | |
| table.blk-cxp-table th:nth-child(3), | |
| table.blk-cxp-table td:nth-child(3) { | |
| text-align: left; | |
| } | |
| table.blk-cxp-table td:nth-child(3) { | |
| width: 100%; | |
| white-space: normal; | |
| } | |
| table.blk-cxp-table td:last-child { | |
| font-family: var(--font-geist-mono); | |
| font-size: var(--text-caption); | |
| } | |
| .blk-cxp.on .blk-cx-flow > li { | |
| animation-delay: calc(var(--i) * 300ms); | |
| } | |
| .blk-cxp.on .blk-cx-flow > li + li::before, | |
| .blk-cxp.on .blk-cxp-big > li + li > .blk-cx-art::before { | |
| animation: blk-wipe 0.35s var(--ease) both; | |
| animation-delay: calc(var(--i) * 300ms - 100ms); | |
| } | |
| .blk-cxp.on .blk-cxp-boxes i { | |
| animation: blk-pop 0.3s var(--ease) both; | |
| animation-delay: calc(450ms + var(--k) * 40ms); | |
| } | |
| .blk-cxp.on .blk-cx-cells { | |
| animation: blk-cx-sweep 1.3s var(--ease) 1.4s both; | |
| } | |
| .blk-cxp.on .blk-cx-qs em { | |
| animation: blk-pop 0.35s var(--ease) both; | |
| animation-delay: calc(1650ms + var(--k) * 140ms); | |
| } | |
| .blk-cxp.on .blk-cx-bars i::after { | |
| animation: blk-wipe 0.7s var(--ease) both; | |
| animation-delay: calc(1950ms + var(--i) * 90ms); | |
| } | |
| .blk-cxp.on .blk-cx-act b { | |
| animation: blk-pop 0.45s var(--ease) 2.25s both, blk-flash 0.6s ease-out 2.45s both; | |
| } | |
| /* the player: what blink was sent at a step, under what it answered */ | |
| details.blk-cuax-got { | |
| margin: 0; | |
| border: 1px solid var(--line); | |
| border-radius: 10px; | |
| background: var(--alt); | |
| } | |
| details.blk-cuax-got > summary { | |
| position: relative; | |
| display: flex; | |
| align-items: center; | |
| min-height: 38px; | |
| padding: 0 36px 0 12px; | |
| list-style: none; | |
| border-radius: 10px; | |
| font-size: var(--text-caption); | |
| font-weight: 600; | |
| letter-spacing: 0.06em; | |
| text-transform: uppercase; | |
| color: var(--mid) ; | |
| cursor: pointer; | |
| } | |
| details.blk-cuax-got > summary:hover { | |
| color: var(--ink) ; | |
| } | |
| details.blk-cuax-got > summary::after { | |
| content: ""; | |
| position: absolute; | |
| top: 50%; | |
| right: 14px; | |
| width: 6px; | |
| height: 6px; | |
| margin-top: -5px; | |
| border: solid var(--mid); | |
| border-width: 0 1.6px 1.6px 0; | |
| transform: rotate(45deg); | |
| transition: transform 0.2s var(--ease), margin-top 0.2s var(--ease); | |
| } | |
| details.blk-cuax-got[open] > summary::after { | |
| margin-top: -1px; | |
| transform: rotate(-135deg); | |
| } | |
| details.blk-cuax-got > dl { | |
| display: grid; | |
| grid-template-columns: 104px minmax(0, 1fr); | |
| gap: 8px 12px; | |
| margin: 0 12px 10px ; | |
| font-size: var(--text-small); | |
| line-height: 1.45; | |
| } | |
| .blk-cuax-got dt { | |
| margin: 0 ; | |
| font-weight: 600; | |
| color: var(--ink-soft) ; | |
| } | |
| .blk-cuax-got dd { | |
| min-width: 0; | |
| margin: 0 ; | |
| color: var(--ink-soft) ; | |
| } | |
| .blk-cuax-got dd ol { | |
| display: grid; | |
| gap: 4px; | |
| margin: 0 ; | |
| padding: 0 ; | |
| list-style: none ; | |
| } | |
| .blk-cuax-got dd li { | |
| margin: 0 ; | |
| overflow-wrap: anywhere; | |
| color: var(--ink-soft) ; | |
| } | |
| .blk-cuax-got dd li.more { | |
| color: var(--faint) ; | |
| } | |
| .blk-cuax-got dd li .opts { | |
| display: block; | |
| margin-top: 2px; | |
| font-size: var(--text-caption); | |
| color: var(--mid) ; | |
| } | |
| .blk-cuax-got dd li .opts b { | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| } | |
| .blk-cuax-got dd em { | |
| padding: 0 6px; | |
| border-radius: var(--radius-round); | |
| background: var(--paper); | |
| box-shadow: inset 0 0 0 1px var(--line); | |
| font-size: var(--text-caption); | |
| font-style: normal; | |
| white-space: nowrap; | |
| color: var(--mid) ; | |
| } | |
| p.blk-cuax-gotn { | |
| margin: 0 12px 8px ; | |
| font-size: var(--text-caption); | |
| line-height: 1.5; | |
| color: var(--mid) ; | |
| } | |
| details.blk-cuax-json { | |
| margin: 0 12px 10px; | |
| } | |
| details.blk-cuax-json > summary { | |
| display: inline-block; | |
| list-style: none; | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| color: var(--blink-ink) ; | |
| text-decoration: underline; | |
| text-underline-offset: 3px; | |
| cursor: pointer; | |
| } | |
| details.blk-cuax-json .blk-pre { | |
| max-height: 360px; | |
| margin: 8px 0 4px ; | |
| font-size: var(--text-caption); | |
| } | |
| details.blk-cuax-json > p.blk-cuax-gotn { | |
| margin: 8px 0 0 ; | |
| } | |
| details.blk-cuax-got > .blk-cuax-howbtn { | |
| display: inline-block; | |
| margin: 0 12px 12px; | |
| font-size: var(--text-small); | |
| } | |
| /* --- try it, and beyond clicks -------------------------------------------------------------- */ | |
| .blk-cuax-try { | |
| margin: 40px 0 4px; | |
| padding-top: 28px; | |
| border-top: 1px solid var(--line); | |
| scroll-margin-top: 12px; | |
| } | |
| .blk-cuax-try .blk-note { | |
| margin: 0 ; | |
| } | |
| .blk-cuax-try h3 { | |
| margin: 0 ; | |
| font-size: var(--text-heading-sm) ; | |
| font-weight: 600 ; | |
| line-height: 1.3 ; | |
| letter-spacing: -0.015em; | |
| color: var(--ink); | |
| } | |
| .blk-cuax-more { | |
| margin: 40px 0 0; | |
| padding-top: 28px; | |
| border-top: 1px solid var(--line); | |
| } | |
| .blk-cuax-tiles { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); | |
| gap: 12px; | |
| margin-top: 14px; | |
| } | |
| .blk-cuax-tile { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: stretch; | |
| gap: 6px; | |
| min-width: 0; | |
| padding: 8px 8px 12px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-subtle); | |
| color: var(--ink); | |
| text-align: left; | |
| cursor: pointer; | |
| animation: blk-rise 0.45s var(--ease) both; | |
| animation-delay: calc(var(--i) * 60ms); | |
| transition: border-color 0.15s ease, box-shadow 0.15s ease; | |
| } | |
| .blk-cuax-tile:hover { | |
| border-color: var(--blink-line); | |
| } | |
| .blk-cuax-tile.on { | |
| border-color: var(--blink); | |
| box-shadow: 0 0 0 1px var(--blink); | |
| } | |
| .blk-cuax-still { | |
| position: relative; | |
| display: block; | |
| aspect-ratio: 16 / 10; | |
| overflow: hidden; | |
| border-radius: var(--radius-control); | |
| background: var(--alt); | |
| box-shadow: 0 0 0 1px var(--line); | |
| } | |
| .blk-cuax-still img { | |
| display: block; | |
| width: 100%; | |
| height: 100%; | |
| margin: 0 ; | |
| object-fit: cover; | |
| border-radius: 0; | |
| } | |
| .blk-cuax-play { | |
| position: absolute; | |
| inset: 0; | |
| width: 38px; | |
| height: 38px; | |
| margin: auto; | |
| border-radius: 50%; | |
| background: rgba(255, 255, 255, 0.94); | |
| box-shadow: 0 2px 10px rgba(11, 13, 18, 0.25); | |
| } | |
| .blk-cuax-play::after { | |
| content: ""; | |
| position: absolute; | |
| left: 15px; | |
| top: 12px; | |
| border-style: solid; | |
| border-width: 7px 0 7px 11px; | |
| border-color: transparent transparent transparent var(--ink); | |
| } | |
| .blk-cuax-tile > b { | |
| padding: 4px 4px 0; | |
| font-size: var(--text-body); | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| } | |
| .blk-cuax-metric { | |
| display: flex; | |
| align-items: baseline; | |
| gap: 6px; | |
| padding: 0 4px; | |
| font-size: var(--text-small); | |
| color: var(--mid) ; | |
| } | |
| .blk-cuax-metric strong { | |
| font-size: var(--text-title); | |
| font-weight: 600; | |
| letter-spacing: -0.01em; | |
| color: var(--ink) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .blk-cuax-open { | |
| margin-top: 14px; | |
| } | |
| .blk-cuax-pane { | |
| display: grid; | |
| gap: 10px; | |
| padding: 16px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-subtle); | |
| animation: blk-rise 0.35s var(--ease) both; | |
| } | |
| .blk-cuax-pane h4 { | |
| margin: 0 ; | |
| font-size: var(--text-title) ; | |
| font-weight: 600 ; | |
| color: var(--ink); | |
| } | |
| .blk-cuax-pane .blk-note { | |
| margin: -6px 0 0 ; | |
| } | |
| .blk-cuax-pane video, | |
| .blk-cuax-pane .blk-cuax-chart { | |
| display: block; | |
| width: 100%; | |
| max-height: 70vh; | |
| margin: 0 ; | |
| border-radius: var(--radius-control); | |
| background: #0b0d12; | |
| object-fit: contain; | |
| } | |
| .blk-cuax-pane .blk-cuax-chart { | |
| max-width: 880px; | |
| background: var(--paper); | |
| box-shadow: 0 0 0 1px var(--line); | |
| } | |
| .blk-cuax-imgs { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); | |
| gap: 8px; | |
| } | |
| .blk-cuax-imgs img { | |
| display: block; | |
| width: 100%; | |
| margin: 0 ; | |
| border-radius: var(--radius-control); | |
| box-shadow: 0 0 0 1px var(--line); | |
| } | |
| .blk-cuax-sound { | |
| margin: -4px 0 0 ; | |
| font-size: var(--text-small); | |
| color: var(--mid) ; | |
| } | |
| /* --- results: each figure a card, its numbers drawn by results.py ----------------------------- */ | |
| .blk-figure { | |
| margin: 0 0 16px; | |
| padding: 20px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-subtle); | |
| animation: blk-rise 0.45s var(--ease) both; | |
| } | |
| .blk-figure.blk-bare { | |
| padding: 0; | |
| border: 0; | |
| background: transparent; | |
| box-shadow: none; | |
| } | |
| .blk-figure figcaption { | |
| margin: 0 0 12px; | |
| font-size: var(--text-small); | |
| font-weight: 600; | |
| line-height: 1.4; | |
| color: var(--ink-soft) ; | |
| } | |
| .blk-fig { | |
| display: block; | |
| overflow: visible; | |
| font-family: var(--font-geist); | |
| } | |
| .blk-grid { | |
| stroke: var(--grid); | |
| stroke-width: 1; | |
| } | |
| .blk-ref { | |
| stroke: var(--color-ref); | |
| stroke-width: 1.2; | |
| stroke-dasharray: 3 4; | |
| } | |
| .blk-ax { | |
| font-family: var(--font-geist); | |
| font-size: 10.5px; | |
| font-variant-numeric: tabular-nums; | |
| fill: var(--mid); | |
| } | |
| .blk-cap { | |
| font-family: var(--font-geist); | |
| font-size: 11px; | |
| font-weight: 600; | |
| letter-spacing: 0.05em; | |
| text-transform: uppercase; | |
| fill: var(--mid); | |
| } | |
| .blk-name { | |
| font-family: var(--font-geist); | |
| font-size: 13px; | |
| fill: var(--mid); | |
| } | |
| .blk-name.on { | |
| fill: var(--ink); | |
| font-weight: 600; | |
| } | |
| .blk-val { | |
| font-family: var(--font-geist); | |
| font-size: 12px; | |
| font-weight: 500; | |
| font-variant-numeric: tabular-nums; | |
| fill: var(--mid); | |
| stroke: var(--paper); | |
| stroke-width: 3px; | |
| stroke-linejoin: round; | |
| paint-order: stroke fill; | |
| } | |
| .blk-val.on { | |
| fill: var(--ink); | |
| font-weight: 600; | |
| } | |
| .blk-ring-lab { | |
| font-family: var(--font-geist); | |
| font-size: 10px; | |
| fill: var(--mid); | |
| stroke: var(--paper); | |
| stroke-width: 3px; | |
| stroke-linejoin: round; | |
| paint-order: stroke fill; | |
| } | |
| .blk-grow { | |
| transform-box: fill-box; | |
| transform-origin: left center; | |
| animation: blk-wipe 0.6s var(--ease) both; | |
| } | |
| .blk-fig .blk-ring { | |
| fill: none; | |
| stroke: var(--grid); | |
| stroke-width: 1; | |
| } | |
| .blk-spoke { | |
| stroke: var(--line); | |
| stroke-width: 1; | |
| } | |
| .blk-radar { | |
| transform-box: fill-box; | |
| transform-origin: center; | |
| animation: blk-pop 0.55s var(--ease) both; | |
| } | |
| .blk-dot, | |
| .blk-pt { | |
| animation: blk-pop 0.45s var(--ease) both; | |
| } | |
| /* the frontier is a fact about every system, so it is drawn in neutral ink */ | |
| .blk-halo { | |
| fill: var(--ink); | |
| fill-opacity: 0.06; | |
| animation: blk-pop 0.5s var(--ease) both; | |
| } | |
| .blk-front { | |
| fill: none; | |
| stroke: var(--color-ref); | |
| stroke-width: 1.5; | |
| stroke-linejoin: round; | |
| stroke-dasharray: 2400; | |
| stroke-dashoffset: 2400; | |
| animation: blk-draw 1.4s cubic-bezier(0.3, 0.7, 0.3, 1) 0.15s forwards; | |
| } | |
| /* 11px keeps Geist's taller line box inside the room results.py leaves around a label | |
| (11 above the baseline, 4 below); the figure scales it to about 12px on screen */ | |
| .blk-pt-lab { | |
| font-family: var(--font-geist); | |
| font-size: 11px; | |
| fill: var(--mid); | |
| stroke: var(--paper); | |
| stroke-width: 3.5px; | |
| stroke-linejoin: round; | |
| paint-order: stroke fill; | |
| } | |
| .blk-pt-lab.on { | |
| fill: var(--ink); | |
| font-weight: 600; | |
| } | |
| .blk-lead { | |
| fill: none; | |
| stroke: var(--color-other); | |
| stroke-width: 1; | |
| } | |
| /* an interval is drawn twice: a dark outline that reads on the card, a light core | |
| that reads on the bar */ | |
| .blk-whisk-edge { | |
| stroke: var(--ink); | |
| stroke-width: 3.6; | |
| stroke-linecap: round; | |
| } | |
| .blk-whisk { | |
| stroke: var(--paper); | |
| stroke-width: 1.5; | |
| stroke-linecap: round; | |
| } | |
| /* systems as rows: a swatch, the name, the number */ | |
| .blk-rows { | |
| display: grid; | |
| gap: 6px; | |
| margin: 0 ; | |
| padding: 0 ; | |
| list-style: none ; | |
| } | |
| .blk-row { | |
| display: grid; | |
| grid-template-columns: minmax(0, 1fr) auto; | |
| align-items: baseline; | |
| gap: 6px 14px; | |
| margin: 0 ; | |
| padding: 12px 14px; | |
| border: 1px solid var(--line); | |
| border-radius: 10px; | |
| background: var(--paper); | |
| } | |
| .blk-row.on { | |
| border-color: var(--blink-line); | |
| background: var(--blink-tint); | |
| } | |
| .blk-row b { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| font-size: var(--text-body); | |
| font-weight: 500; | |
| color: var(--ink) ; | |
| } | |
| .blk-row b::before { | |
| content: ""; | |
| flex: none; | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 50%; | |
| background: var(--c); | |
| } | |
| .blk-row strong { | |
| font-size: var(--text-heading-sm); | |
| font-weight: 600; | |
| line-height: 1.1; | |
| letter-spacing: -0.02em; | |
| color: var(--ink) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .blk-row .blk-axvals { | |
| grid-column: 1 / -1; | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 4px 16px; | |
| font-size: var(--text-caption); | |
| color: var(--ink-soft) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .blk-row .blk-axvals i { | |
| margin-right: 6px; | |
| font-style: normal; | |
| color: var(--mid) ; | |
| } | |
| .blk-row.quiet { | |
| border-style: dashed; | |
| border-color: var(--line-strong); | |
| background: transparent; | |
| } | |
| .blk-row.quiet b, | |
| .blk-row.quiet strong { | |
| color: var(--mid) ; | |
| } | |
| /* the no-score tag is long: where it can't sit beside the name it takes the next line, whole */ | |
| .blk-row.quiet b { | |
| flex-wrap: wrap; | |
| } | |
| /* the public-item proxies as stat blocks: the name small, the number large */ | |
| .blk-headline-rows { | |
| grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); | |
| gap: 12px ; | |
| max-width: 600px; | |
| margin-bottom: 12px ; | |
| } | |
| .blk-headline-rows .blk-row { | |
| grid-template-columns: 1fr; | |
| gap: 6px; | |
| padding: 16px 18px; | |
| border-radius: var(--radius-cards); | |
| } | |
| .blk-headline-rows .blk-row b { | |
| font-size: var(--text-small); | |
| color: var(--ink-soft) ; | |
| } | |
| .blk-headline-rows .blk-row strong { | |
| font-size: 32px; | |
| line-height: 1.1; | |
| } | |
| /* two groups that must never be read as one scale */ | |
| .blk-duo { | |
| display: grid; | |
| grid-template-columns: repeat(2, minmax(0, 1fr)); | |
| align-items: start; | |
| gap: 16px; | |
| margin-bottom: 20px; | |
| } | |
| .blk-group { | |
| padding: 20px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-subtle); | |
| } | |
| .blk-group-t { | |
| margin: 0 ; | |
| font-size: var(--text-body); | |
| font-weight: 600; | |
| line-height: 1.43; | |
| color: var(--ink) ; | |
| } | |
| .blk-group-s { | |
| min-height: 3em; | |
| margin: 4px 0 8px ; | |
| font-size: var(--text-small); | |
| line-height: 1.5; | |
| color: var(--mid) ; | |
| } | |
| .blk-group .blk-figure { | |
| margin: 0 0 8px; | |
| } | |
| /* tables: hairlines and a quiet head */ | |
| .blk-tablewrap { | |
| overflow-x: auto; | |
| border: 1px solid var(--line); | |
| border-radius: 10px; | |
| background: var(--paper); | |
| } | |
| .blk-mini { | |
| max-width: 680px; | |
| margin: 0 0 6px; | |
| } | |
| .blk-undertable { | |
| margin: 8px 0 22px ; | |
| font-size: var(--text-small); | |
| } | |
| table.blk-table { | |
| width: 100%; | |
| margin: 0 ; | |
| border: 0 ; | |
| border-collapse: collapse; | |
| font-size: var(--text-small); | |
| font-variant-numeric: tabular-nums; | |
| } | |
| table.blk-table tr { | |
| border: 0 ; | |
| } | |
| table.blk-table th, | |
| table.blk-table td { | |
| padding: 9px 14px; | |
| border: 0 ; | |
| border-bottom: 1px solid var(--line) ; | |
| text-align: right; | |
| white-space: nowrap; | |
| } | |
| table.blk-table th:first-child, | |
| table.blk-table td:first-child { | |
| text-align: left; | |
| } | |
| table.blk-table.ranked th:nth-child(2), | |
| table.blk-table.ranked td:nth-child(2) { | |
| text-align: left; | |
| } | |
| table.blk-table thead th { | |
| background: var(--alt); | |
| font-size: var(--text-caption); | |
| font-weight: 600; | |
| color: var(--mid) ; | |
| } | |
| table.blk-table td { | |
| color: var(--ink-soft) ; | |
| } | |
| table.blk-table tbody tr:last-child td, | |
| table.blk-table tbody tr:last-child th { | |
| border-bottom: 0 ; | |
| } | |
| /* blink's own rows wear its tint */ | |
| table.blk-table tr.on td { | |
| background: var(--blink-tint); | |
| color: var(--ink) ; | |
| font-weight: 500; | |
| } | |
| /* the same numbers as text: the figure leads, the table takes over on a phone */ | |
| .blk-narrow { | |
| display: none; | |
| } | |
| table.blk-nums { | |
| width: 100%; | |
| max-width: 680px; | |
| margin: 0 0 4px ; | |
| border: 1px solid var(--line) ; | |
| border-collapse: separate; | |
| border-spacing: 0; | |
| border-radius: 10px; | |
| background: var(--paper); | |
| font-size: var(--text-small); | |
| font-variant-numeric: tabular-nums; | |
| } | |
| table.blk-nums tr { | |
| border: 0 ; | |
| } | |
| .blk-nums thead th:first-child { | |
| border-top-left-radius: 9px; | |
| } | |
| .blk-nums thead th:last-child { | |
| border-top-right-radius: 9px; | |
| } | |
| .blk-nums caption { | |
| caption-side: bottom; | |
| padding-top: 8px; | |
| text-align: left; | |
| font-size: var(--text-caption); | |
| line-height: 1.5; | |
| color: var(--mid) ; | |
| } | |
| table.blk-nums th, | |
| table.blk-nums td { | |
| padding: 8px 12px; | |
| border: 0 ; | |
| border-bottom: 1px solid var(--line) ; | |
| text-align: right; | |
| white-space: nowrap; | |
| } | |
| table.blk-nums tbody tr:last-child th, | |
| table.blk-nums tbody tr:last-child td { | |
| border-bottom: 0 ; | |
| } | |
| table.blk-nums thead th { | |
| background: var(--alt); | |
| font-size: var(--text-caption); | |
| font-weight: 600; | |
| color: var(--mid) ; | |
| } | |
| table.blk-nums thead th:first-child, | |
| table.blk-nums tbody th { | |
| text-align: left; | |
| } | |
| table.blk-nums tbody th { | |
| font-size: var(--text-small); | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| } | |
| table.blk-nums tbody td { | |
| color: var(--ink-soft) ; | |
| } | |
| /* on a phone the figures above become their own numbers: a table, a list, steps */ | |
| .blk-narrow .blk-nums { | |
| max-width: none; | |
| margin-bottom: 16px ; | |
| } | |
| table.blk-nums tr.on th, | |
| table.blk-nums tr.on td { | |
| background: var(--blink-tint); | |
| } | |
| .blk-narrowhead { | |
| margin: 4px 0 8px ; | |
| } | |
| ul.blk-arealist { | |
| margin: 0 0 16px ; | |
| padding: 0 ; | |
| list-style: none ; | |
| border: 1px solid var(--line); | |
| border-radius: 10px; | |
| overflow: hidden; | |
| } | |
| .blk-arealist li { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 2px 12px; | |
| margin: 0 ; | |
| padding: 10px 12px; | |
| border-top: 1px solid var(--line); | |
| font-size: var(--text-small); | |
| line-height: 1.5; | |
| } | |
| .blk-arealist li:first-child { | |
| border-top: 0; | |
| } | |
| .blk-arealist li.on { | |
| background: var(--blink-tint); | |
| } | |
| .blk-arealist b { | |
| flex: 1 0 100%; | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| } | |
| .blk-arealist span { | |
| white-space: nowrap; | |
| color: var(--mid) ; | |
| } | |
| .blk-arealist i { | |
| font-style: normal; | |
| font-weight: 600; | |
| color: var(--ink-soft) ; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| ol.blk-steplist { | |
| display: grid; | |
| gap: 8px; | |
| margin: 0 0 12px ; | |
| padding: 0 ; | |
| list-style: none ; | |
| counter-reset: blk-pipe; | |
| } | |
| .blk-steplist li { | |
| display: grid; | |
| grid-template-columns: 24px minmax(0, 1fr); | |
| gap: 2px 12px; | |
| margin: 0 ; | |
| padding: 12px 14px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| counter-increment: blk-pipe; | |
| } | |
| .blk-steplist li::before { | |
| content: counter(blk-pipe); | |
| grid-row: span 2; | |
| display: grid; | |
| place-items: center; | |
| width: 24px; | |
| height: 24px; | |
| border-radius: 50%; | |
| background: var(--blink-tint); | |
| color: var(--blink-ink); | |
| font-size: var(--text-caption); | |
| font-weight: 600; | |
| } | |
| .blk-steplist b { | |
| font-size: var(--text-body-lg); | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| } | |
| .blk-steplist span { | |
| font-size: var(--text-small); | |
| color: var(--mid) ; | |
| } | |
| /* latency, where it is shown, reads as a row of stat blocks */ | |
| .blk-figure .blk-stats { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(128px, 1fr)); | |
| gap: 16px; | |
| margin: 0 0 8px ; | |
| font-size: var(--text-small); | |
| } | |
| .blk-figure .blk-stats b { | |
| display: block; | |
| font-size: var(--text-heading); | |
| font-weight: 600; | |
| line-height: 1.2; | |
| letter-spacing: -0.02em; | |
| } | |
| /* the pipeline: four stages on the page itself */ | |
| .blk-card { | |
| fill: var(--paper); | |
| stroke: var(--line); | |
| stroke-width: 1; | |
| } | |
| .blk-stage { | |
| animation: blk-rise 0.5s var(--ease) both; | |
| } | |
| .blk-stage-n { | |
| font-family: var(--font-geist); | |
| font-size: 12px; | |
| font-weight: 600; | |
| fill: var(--blink); | |
| } | |
| .blk-stage-t { | |
| font-family: var(--font-geist); | |
| font-size: 20px; | |
| font-weight: 600; | |
| letter-spacing: -0.02em; | |
| fill: var(--ink); | |
| } | |
| .blk-stage-s { | |
| font-family: var(--font-geist); | |
| font-size: 12.5px; | |
| fill: var(--mid); | |
| } | |
| .blk-bare .blk-ax { | |
| fill: var(--mid); | |
| } | |
| .blk-flow { | |
| fill: none; | |
| stroke: var(--color-other); | |
| stroke-width: 1.5; | |
| stroke-dasharray: 200; | |
| stroke-dashoffset: 200; | |
| animation: blk-draw 0.5s ease-out both; | |
| } | |
| .blk-flow-head { | |
| fill: none; | |
| stroke: var(--color-other); | |
| stroke-width: 1.5; | |
| stroke-linecap: round; | |
| stroke-linejoin: round; | |
| animation: blk-fade 0.35s ease-out both; | |
| } | |
| /* a section of a long page: a title, its note, then its figure */ | |
| .block:not(:first-child):has(> .html-container > .prose > .blk-h2:first-child) { | |
| margin-top: 24px; | |
| } | |
| /* --- how it works: the screenshot path ------------------------------------------------------ */ | |
| .blk-vsec { | |
| margin: 20px 0 8px; | |
| } | |
| .blk-vsec ol.blk-vpipe { | |
| display: grid; | |
| grid-template-columns: repeat(5, minmax(0, 1fr)); | |
| gap: 12px; | |
| margin: 14px 0 16px ; | |
| padding: 0 ; | |
| list-style: none ; | |
| } | |
| .blk-vpipe li { | |
| position: relative; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 4px; | |
| margin: 0 ; | |
| padding: 12px 12px 14px; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| font-size: var(--text-small); | |
| line-height: 1.45; | |
| color: var(--mid); | |
| animation: blk-rise 0.4s var(--ease) both; | |
| animation-delay: calc(var(--i) * 90ms); | |
| } | |
| .blk-vpipe li > span:not(.blk-vp-art):not(.blk-vp-n) { | |
| color: var(--mid) ; | |
| } | |
| .blk-vpipe li + li::before { | |
| content: ""; | |
| position: absolute; | |
| left: -13px; | |
| top: 36px; | |
| width: 12px; | |
| height: 2px; | |
| background: var(--blink-line); | |
| } | |
| .blk-vpipe b { | |
| font-size: var(--text-body); | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| } | |
| .blk-vp-art { | |
| display: flex; | |
| align-items: center; | |
| height: 48px; | |
| margin: 8px 0 6px; | |
| } | |
| .blk-vp-art img { | |
| width: auto; | |
| max-height: 48px; | |
| margin: 0 ; | |
| border-radius: var(--radius-small); | |
| box-shadow: 0 0 0 1px var(--line); | |
| } | |
| .blk-vp-art svg { | |
| width: 28px; | |
| height: 28px; | |
| fill: none; | |
| stroke: var(--blink); | |
| stroke-width: 1.7; | |
| stroke-linecap: round; | |
| stroke-linejoin: round; | |
| } | |
| .blk-vp-n { | |
| position: absolute; | |
| top: 8px; | |
| right: 10px; | |
| font-size: var(--text-caption); | |
| font-weight: 500; | |
| color: var(--faint) ; | |
| } | |
| .blk-vp-fact { | |
| display: block; | |
| margin-top: 4px; | |
| padding: 0; | |
| background: none; | |
| font-family: var(--font-geist); | |
| font-size: var(--text-caption); | |
| font-weight: 500; | |
| line-height: 1.5; | |
| color: var(--blink-ink) ; | |
| font-variant-numeric: tabular-nums; | |
| overflow-wrap: anywhere; | |
| } | |
| .blk-vsec > .blk-vp-fact { | |
| font-family: var(--font-geist-mono); | |
| color: var(--mid) ; | |
| } | |
| .blk-good { | |
| margin-top: 18px ; | |
| } | |
| .blk-goodlist { | |
| margin: 6px 0 8px ; | |
| padding-left: 18px ; | |
| list-style: disc ; | |
| font-size: var(--text-body); | |
| line-height: 1.6; | |
| } | |
| .blk-goodlist li { | |
| margin: 0 0 2px ; | |
| color: var(--ink-soft) ; | |
| } | |
| /* --- api: TypeSafe API clients, a blink server and this Space ---------------------------------- */ | |
| .blk-copytag { | |
| margin-left: 8px; | |
| border-style: dashed; | |
| border-color: var(--blink-line); | |
| background: var(--blink-tint); | |
| color: var(--blink-ink) ; | |
| } | |
| /* gradio's prose draws a text-coloured border on every table and row; these keep only the hairlines */ | |
| .blk-apifig table.blk-apitable, | |
| .blk-apifig table.blk-apitable tr, | |
| table.blk-apitext, | |
| table.blk-apitext tr { | |
| margin: 0 ; | |
| border: 0 ; | |
| } | |
| .blk-apifig table.blk-apitable th, | |
| .blk-apifig table.blk-apitable td { | |
| min-width: 140px; | |
| line-height: 1.45; | |
| text-align: left; | |
| vertical-align: top; | |
| white-space: normal; | |
| } | |
| .blk-apifig table.blk-apitable th:first-child, | |
| .blk-apifig table.blk-apitable td:first-child { | |
| min-width: 0; | |
| } | |
| .blk-apifig table.blk-apitable tbody th { | |
| background: transparent; | |
| font-size: var(--text-small); | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| white-space: nowrap; | |
| } | |
| .blk-apifig table.blk-apitable td > span { | |
| color: var(--ink-soft) ; | |
| } | |
| /* the comparison is a table card: its caption, the table edge to edge, the legend along the foot */ | |
| .blk-figure.blk-apifig { | |
| padding: 0; | |
| overflow: hidden; | |
| } | |
| .blk-apifig figcaption { | |
| margin: 0; | |
| padding: 16px 20px 12px; | |
| } | |
| .blk-apifig .blk-tablewrap { | |
| border: 0; | |
| border-top: 1px solid var(--line); | |
| border-radius: 0; | |
| } | |
| .blk-apifig .blk-apilegend { | |
| margin: 0 ; | |
| padding: 12px 20px 14px; | |
| border-top: 1px solid var(--line); | |
| } | |
| /* a mark says how a cell compares; its shape tells them apart as much as its colour */ | |
| .blk-mk { | |
| display: inline-block; | |
| width: 8px; | |
| height: 8px; | |
| margin: 0 8px 1px 0; | |
| border-radius: 50%; | |
| vertical-align: middle; | |
| } | |
| .blk-mk.same { | |
| background: var(--blink); | |
| } | |
| .blk-mk.adds { | |
| background: var(--paper); | |
| box-shadow: inset 0 0 0 2px var(--blink); | |
| } | |
| .blk-mk.differs { | |
| background: var(--color-ref); | |
| } | |
| .blk-mk.none { | |
| background: transparent; | |
| box-shadow: inset 0 0 0 1.5px var(--line-strong); | |
| } | |
| .blk-apilegend { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 6px 18px; | |
| margin: 12px 0 0 ; | |
| font-size: var(--text-caption); | |
| line-height: 1.5; | |
| color: var(--mid) ; | |
| } | |
| .blk-apilegend span { | |
| display: inline-flex; | |
| align-items: center; | |
| color: var(--mid) ; | |
| } | |
| .blk-apifig code, | |
| .blk-steps code { | |
| padding: 1px 6px; | |
| word-break: normal; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-xs); | |
| background: var(--alt); | |
| font-family: var(--font-geist-mono); | |
| font-size: var(--text-caption); | |
| font-weight: 400; | |
| line-height: 1.5; | |
| color: var(--ink-soft) ; | |
| white-space: normal; | |
| overflow-wrap: break-word; | |
| } | |
| .blk-apifig code::before, | |
| .blk-apifig code::after, | |
| .blk-steps code::before, | |
| .blk-steps code::after { | |
| content: none; | |
| } | |
| /* three steps, one row each: the number, what to do, then the command on one line */ | |
| .blk-steps { | |
| display: grid; | |
| gap: 0; | |
| margin: 0 0 24px ; | |
| padding: 0 ; | |
| list-style: none ; | |
| border: 1px solid var(--line); | |
| border-radius: var(--radius-cards); | |
| background: var(--paper); | |
| box-shadow: var(--shadow-subtle); | |
| counter-reset: blk-step; | |
| overflow: hidden; | |
| } | |
| .blk-steps li { | |
| display: grid; | |
| grid-template-columns: 24px minmax(160px, 220px) minmax(0, 1fr); | |
| align-items: center; | |
| gap: 8px 16px; | |
| margin: 0 ; | |
| padding: 14px 18px; | |
| border-top: 1px solid var(--line); | |
| counter-increment: blk-step; | |
| } | |
| .blk-steps li:first-child { | |
| border-top: 0; | |
| } | |
| .blk-steps li::before { | |
| content: counter(blk-step); | |
| display: grid; | |
| place-items: center; | |
| width: 24px; | |
| height: 24px; | |
| border-radius: 50%; | |
| background: var(--blink-tint); | |
| color: var(--blink-ink); | |
| font-size: var(--text-caption); | |
| font-weight: 600; | |
| } | |
| .blk-steps b { | |
| font-size: var(--text-body); | |
| font-weight: 600; | |
| color: var(--ink) ; | |
| } | |
| .blk-steps code { | |
| display: block; | |
| justify-self: stretch; | |
| min-width: 0; | |
| padding: 8px 10px; | |
| border-radius: var(--radius-small); | |
| } | |
| /* the steps' label, with the source and the docs at the end of its line */ | |
| .blk-stepshead { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 8px 12px; | |
| margin: 8px 0 12px; | |
| } | |
| .blk-stepshead > .blk-eyebrow, | |
| .blk-stepshead > .blk-links { | |
| margin: 0 ; | |
| } | |
| .blk-apilabel { | |
| margin: 16px 0 6px ; | |
| font-size: var(--text-caption); | |
| font-weight: 600; | |
| line-height: 1.33; | |
| letter-spacing: 0.06em; | |
| text-transform: uppercase; | |
| color: var(--mid) ; | |
| } | |
| .blk-api details.blk-d ul { | |
| max-width: 720px; | |
| margin-bottom: 12px ; | |
| padding-left: 18px ; | |
| } | |
| .blk-api details.blk-d li { | |
| margin: 0 0 6px ; | |
| font-size: var(--text-body); | |
| line-height: 1.6; | |
| color: var(--ink-soft) ; | |
| } | |
| .blk-apimini { | |
| max-width: 780px; | |
| margin: 4px 0 12px; | |
| } | |
| table.blk-apitext th, | |
| table.blk-apitext td { | |
| text-align: left; | |
| vertical-align: top; | |
| white-space: normal; | |
| } | |
| table.blk-apitext td:first-child { | |
| font-family: var(--font-geist-mono); | |
| white-space: nowrap; | |
| } | |
| /* --- static shell (build_static.py; the gradio app supplies its own) ------------------------- */ | |
| body { | |
| margin: 0; | |
| } | |
| .blk-shell { | |
| max-width: 1280px; | |
| margin: 0 auto; | |
| padding: 0 clamp(16px, 4vw, 32px) 64px; | |
| box-sizing: border-box; | |
| color: var(--ink); | |
| font-family: var(--font-geist); | |
| font-size: var(--text-body); | |
| -webkit-font-smoothing: antialiased; | |
| } | |
| .blk-shell .blk-tabs { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 0; | |
| margin: 0 0 4px; | |
| border-bottom: 1px solid var(--line); | |
| } | |
| .blk-shell .blk-tabs.sub { | |
| margin: 8px 0 2px; | |
| } | |
| .blk-tabs button { | |
| height: 40px; | |
| padding: 0 12px; | |
| border: 0; | |
| background: transparent; | |
| box-shadow: inset 0 -2px 0 transparent; | |
| color: var(--mid); | |
| font-family: var(--font-geist); | |
| font-size: var(--text-body); | |
| font-weight: 500; | |
| cursor: pointer; | |
| transition: color 0.15s ease; | |
| } | |
| .blk-tabs.sub button { | |
| height: 36px; | |
| font-size: var(--text-small); | |
| } | |
| .blk-tabs button:hover { | |
| color: var(--ink); | |
| } | |
| .blk-tabs button[aria-selected="true"] { | |
| color: var(--ink); | |
| box-shadow: inset 0 -2px 0 var(--blink); | |
| } | |
| .blk-tabs button:focus-visible, | |
| .blk-chip:focus-visible, | |
| .blk-go:focus-visible { | |
| outline: 2px solid var(--blink); | |
| outline-offset: 2px; | |
| } | |
| .blk-pane { | |
| display: none; | |
| padding-top: 24px; | |
| } | |
| .blk-pane.on { | |
| display: block; | |
| } | |
| .blk-shell .blk-pane > h2.blk-h2 { | |
| margin-top: 36px; | |
| } | |
| .blk-shell .blk-pane > h2.blk-h2:first-child, | |
| .blk-shell .blk-pane > p.blk-eyebrow + h2.blk-h2 { | |
| margin-top: 0; | |
| } | |
| .blk-cols { | |
| display: grid; | |
| grid-template-columns: 5fr 7fr; | |
| align-items: start; | |
| gap: 28px; | |
| } | |
| .blk-chiprow { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 6px; | |
| margin-bottom: 14px; | |
| } | |
| .blk-chip { | |
| height: 32px; | |
| padding: 0 12px; | |
| border: 1px solid var(--line-strong); | |
| border-radius: var(--radius-control); | |
| background: var(--paper); | |
| color: var(--ink); | |
| font-family: var(--font-geist); | |
| font-size: var(--text-small); | |
| font-weight: 500; | |
| cursor: pointer; | |
| transition: background-color 0.15s ease, border-color 0.15s ease; | |
| } | |
| .blk-chip:hover { | |
| background: var(--alt); | |
| } | |
| .blk-chip.on { | |
| border-color: var(--blink); | |
| background: var(--blink-tint); | |
| color: var(--blink-ink); | |
| } | |
| .blk-field { | |
| margin-bottom: 14px; | |
| } | |
| .blk-field textarea { | |
| width: 100%; | |
| box-sizing: border-box; | |
| padding: 9px 12px; | |
| border: 1px solid var(--line-strong); | |
| border-radius: var(--radius-control); | |
| background: var(--paper); | |
| color: var(--ink); | |
| font-family: var(--font-geist); | |
| font-size: var(--text-body); | |
| line-height: 1.5; | |
| resize: vertical; | |
| transition: border-color 0.15s ease, box-shadow 0.15s ease; | |
| } | |
| .blk-field textarea:focus { | |
| border-color: var(--blink); | |
| box-shadow: var(--ring); | |
| outline: none; | |
| } | |
| .blk-field textarea.blk-mono { | |
| font-family: var(--font-geist-mono); | |
| font-size: 12.5px; | |
| } | |
| .blk-go { | |
| width: 100%; | |
| height: 40px; | |
| padding: 0 18px; | |
| border: 1px solid var(--blink); | |
| border-radius: var(--radius-control); | |
| background: var(--blink); | |
| color: #ffffff; | |
| font-family: var(--font-geist); | |
| font-size: var(--text-body); | |
| font-weight: 600; | |
| cursor: pointer; | |
| transition: background-color 0.15s ease; | |
| } | |
| .blk-go:hover { | |
| background: var(--color-blink-hover); | |
| } | |
| .blk-out { | |
| display: none; | |
| } | |
| .blk-out.on { | |
| display: block; | |
| } | |
| .blk-synthetic { | |
| margin: 14px 0 0 ; | |
| } | |
| /* --- narrower windows ---------------------------------------------------------------------- | |
| Inside a media query gradio keeps only the scoped copy of each rule, so these name only what | |
| sits inside the app: .row, .tab-container, never .gradio-container. */ | |
| @media (max-width: 1100px) { | |
| .blk-cx .blk-cx-flow, | |
| .blk-vsec ol.blk-vpipe { | |
| grid-template-columns: repeat(3, minmax(0, 1fr)) ; | |
| } | |
| .blk-cx-flow > li:nth-child(3n + 1)::before, | |
| .blk-vpipe li:nth-child(3n + 1)::before { | |
| display: none ; | |
| } | |
| /* how one step works: four nodes a row become two */ | |
| .blk-cx .blk-cx-flow.blk-cx-four { | |
| grid-template-columns: repeat(2, minmax(0, 1fr)) ; | |
| } | |
| .blk-cx-flow.blk-cxp-model > li:nth-child(2n)::before { | |
| display: block ; | |
| } | |
| .blk-cx-flow.blk-cxp-model > li:nth-child(2n + 1)::before, | |
| .blk-cxp-big > li:nth-child(2n + 1) > .blk-cx-art::before { | |
| display: none ; | |
| } | |
| .blk-cuax-reel.tall .blk-cuax-cap b { | |
| display: none; | |
| } | |
| } | |
| @media (max-width: 860px) { | |
| /* a workspace stacks: inputs, then the action, then the result */ | |
| .row:has(> .blk-side), | |
| .row.doc-workspace { | |
| flex-direction: column ; | |
| gap: 24px ; | |
| } | |
| .row:has(> .blk-side) > .column, | |
| .row.doc-workspace > .column { | |
| width: 100% ; | |
| min-width: 0 ; | |
| } | |
| .row.blk-play button.blk-decide { | |
| align-self: stretch; | |
| width: 100% ; | |
| } | |
| .row.blk-cua { | |
| flex-direction: column ; | |
| } | |
| .row.blk-cua > .column { | |
| width: 100% ; | |
| } | |
| /* the masthead: the name and the links, then the claim, then the model */ | |
| .blk-top { | |
| grid-template-columns: auto minmax(0, 1fr) auto; | |
| grid-template-areas: "brand . links" "lede lede lede" "model info info"; | |
| column-gap: 8px; | |
| padding: 16px 0 12px; | |
| } | |
| .blk-top .blk-lede { | |
| max-width: none; | |
| padding-left: 0; | |
| border-left: 0; | |
| } | |
| .blk-meta, | |
| details.blk-model-info { | |
| justify-self: start; | |
| } | |
| details.blk-model-info > p { | |
| left: 0; | |
| right: auto; | |
| max-width: 100%; | |
| } | |
| /* a probability: the name and its number on one line, the bar under them */ | |
| .blk-opt { | |
| grid-template-columns: minmax(0, 1fr) auto ; | |
| gap: 4px 12px ; | |
| } | |
| .blk-opt .track { | |
| grid-column: 1 / -1; | |
| grid-row: 2; | |
| } | |
| .blk-cuax-body, | |
| .blk-cuax-player.tall .blk-cuax-body { | |
| grid-template-columns: minmax(0, 1fr) ; | |
| grid-template-areas: "screen" "nav" "side" ; | |
| grid-template-rows: auto ; | |
| } | |
| .blk-cuax-player.tall .blk-cuax-screen { | |
| justify-self: center; | |
| width: min(100%, 340px); | |
| } | |
| .blk-duo { | |
| grid-template-columns: minmax(0, 1fr); | |
| } | |
| .blk-table th, | |
| .blk-table td { | |
| padding: 8px 10px ; | |
| } | |
| } | |
| /* a phone: every tab still fits its strip, figures keep their own width and scroll inside their | |
| card, and the same numbers as a table take over where a figure cannot fit */ | |
| @media (max-width: 720px) { | |
| #blink-navigation > .tab-wrapper > .tab-container > button { | |
| padding: 0 7px ; | |
| font-size: 13px ; | |
| } | |
| #blink-navigation > .tab-wrapper > .tab-container > button.selected::after, | |
| #blink-cases > .tab-wrapper > .tab-container > button.selected::after { | |
| left: 7px; | |
| right: 7px; | |
| } | |
| #blink-navigation > .tab-wrapper { | |
| margin-bottom: 20px ; | |
| } | |
| #blink-explore > .tab-wrapper > .tab-container > button, | |
| #blink-cases > .tab-wrapper > .tab-container > button { | |
| padding: 0 6px ; | |
| } | |
| .blk-top h1 { | |
| font-size: 24px ; | |
| } | |
| .blk-wide { | |
| display: none; | |
| } | |
| .blk-narrow { | |
| display: block; | |
| overflow: visible; | |
| } | |
| /* a table fits the phone: words wrap, a number has nowhere to break */ | |
| .blk-table th, | |
| .blk-table td { | |
| padding: 7px 4px ; | |
| font-size: 12px ; | |
| white-space: normal ; | |
| } | |
| .blk-table th:first-child, | |
| .blk-table td:first-child { | |
| padding-left: 8px ; | |
| } | |
| .blk-figure, | |
| .blk-group, | |
| .blk-q, | |
| .blk-verdict, | |
| .blk-result .blk-q, | |
| .blk-result > .blk-verdict { | |
| padding: 16px; | |
| } | |
| .blk-result .blk-answer-foot { | |
| padding: 12px 16px 0; | |
| } | |
| .blk-result .blk-answer-foot details.blk-more { | |
| margin: 0 -16px; | |
| padding-left: 16px; | |
| padding-right: 16px; | |
| } | |
| .blk-result > .blk-warn.blk-mock { | |
| padding: 9px 16px; | |
| } | |
| .blk-headline b { | |
| font-size: 22px; | |
| } | |
| .blk-headline-rows .blk-row strong { | |
| font-size: 26px; | |
| } | |
| .blk-nums { | |
| font-size: 12px; | |
| } | |
| .blk-nums th, | |
| .blk-nums td { | |
| padding: 7px 8px ; | |
| white-space: normal ; | |
| } | |
| .blk-nums thead th { | |
| font-size: 12px ; | |
| } | |
| .blk-nums tbody th { | |
| font-size: 13px ; | |
| overflow-wrap: anywhere; | |
| } | |
| /* a measurement never breaks across lines */ | |
| .blk-nums tbody td { | |
| font-size: 12px ; | |
| white-space: nowrap ; | |
| } | |
| /* too narrow for the options toggle beside a long name: each question stacks again */ | |
| .blk-play .blk-qrow .styler, | |
| .blk-play .blk-qhead { | |
| display: flex ; | |
| align-items: stretch ; | |
| } | |
| .blk-play .blk-qrow .styler > .blk-qmore { | |
| align-self: flex-start; | |
| } | |
| /* the state grows to eight lines here and scrolls past them */ | |
| .blk-play .blk-state textarea { | |
| max-height: 188px ; | |
| overflow-y: auto ; | |
| } | |
| .home-intro h2 { | |
| font-size: 30px ; | |
| } | |
| .blk-home-lede { | |
| font-size: 16px ; | |
| } | |
| .row.blk-cards { | |
| margin: 20px 0 28px ; | |
| } | |
| .blk-face { | |
| min-height: 0; | |
| } | |
| /* documents: the packet as a slim page map; the list under it names each document */ | |
| .doc-timeline li { | |
| height: 8px; | |
| padding: 0 ; | |
| border: 0 ; | |
| border-radius: 2px ; | |
| background: var(--blink) ; | |
| } | |
| .doc-timeline li:nth-child(even) { | |
| background: var(--blink-light) ; | |
| } | |
| .doc-timeline li.flag { | |
| background: var(--color-review) ; | |
| } | |
| .doc-timeline b, | |
| .doc-timeline span { | |
| display: none ; | |
| } | |
| .doc-result-head { | |
| padding: 16px 16px 14px; | |
| } | |
| .doc-timeline { | |
| margin: 0 16px 16px ; | |
| } | |
| .doc-list-head, | |
| .doc-metrics { | |
| padding-left: 16px; | |
| padding-right: 16px; | |
| } | |
| details.doc-seg > summary { | |
| padding-left: 16px; | |
| } | |
| details.doc-seg > .blk-opts { | |
| padding: 4px 16px 14px ; | |
| } | |
| .doc-scores { | |
| margin: 0 16px; | |
| } | |
| .doc-result details.doc-method { | |
| padding: 0 16px; | |
| } | |
| #doc-outputs > .form, | |
| #doc-outputs > .block:not(.gr-accordion):not(#doc-result) { | |
| padding-left: 16px ; | |
| padding-right: 16px ; | |
| } | |
| #doc-outputs > .gr-accordion > button.label-wrap { | |
| padding-left: 16px ; | |
| } | |
| #doc-outputs > .gr-accordion > [data-testid="accordion-content"] { | |
| padding: 0 16px 16px ; | |
| } | |
| .doc-preview { | |
| padding: 12px 12px 10px; | |
| } | |
| /* computer use */ | |
| .blk-cuax-strip { | |
| --reel-h: 180px; | |
| gap: 10px; | |
| } | |
| .blk-cuax-stats { | |
| grid-template-columns: repeat(2, minmax(0, 1fr)); | |
| row-gap: 14px; | |
| } | |
| .blk-cuax-stats span { | |
| padding: 0 12px ; | |
| } | |
| .blk-cuax-stats span:nth-child(odd) { | |
| padding-left: 0 ; | |
| border-left: 0 ; | |
| } | |
| .blk-cuax-stats b { | |
| font-size: 22px ; | |
| } | |
| .blk-cuax-cards, | |
| .blk-cuax-tiles { | |
| grid-template-columns: repeat(2, minmax(0, 1fr)) ; | |
| gap: 10px ; | |
| } | |
| .blk-cuax-player { | |
| padding: 12px ; | |
| } | |
| .blk-cuax-bar { | |
| flex-wrap: wrap; | |
| } | |
| .blk-cuax-name { | |
| order: 3; | |
| flex-basis: 100%; | |
| } | |
| .blk-cuax-nav { | |
| flex-direction: column; | |
| align-items: stretch ; | |
| } | |
| .blk-cuax-views { | |
| justify-content: center; | |
| } | |
| .blk-cuax-views button { | |
| flex: 1 1 0; | |
| } | |
| .blk-cuax-cmp button { | |
| grid-template-columns: 100px minmax(0, 1fr) auto ; | |
| } | |
| .blk-cx .blk-cx-flow, | |
| .blk-vsec ol.blk-vpipe { | |
| grid-template-columns: minmax(0, 1fr) ; | |
| gap: 10px ; | |
| } | |
| .blk-cx-flow > li { | |
| display: grid ; | |
| grid-template-columns: 124px minmax(0, 1fr); | |
| grid-template-rows: auto auto auto; | |
| align-items: start; | |
| column-gap: 12px; | |
| } | |
| .blk-cx-flow > li > .blk-cx-art { | |
| grid-row: 1 / span 3; | |
| height: 76px; | |
| } | |
| .blk-cx-flow > li > b { | |
| margin-top: 0 ; | |
| } | |
| .blk-cx-flow > li + li::before, | |
| .blk-vpipe li + li::before { | |
| display: block ; | |
| left: 28px ; | |
| top: -11px ; | |
| width: 2px ; | |
| height: 10px ; | |
| } | |
| .blk-cx-shot, | |
| .blk-cx-grid { | |
| height: 64px ; | |
| } | |
| /* how one step works: one node a line; the real screens keep the card's full width */ | |
| .blk-cx .blk-cx-flow.blk-cx-four { | |
| grid-template-columns: minmax(0, 1fr) ; | |
| } | |
| .blk-cx-flow.blk-cxp-model > li:nth-child(n + 2)::before { | |
| display: block ; | |
| } | |
| .blk-cx-flow.blk-cxp-big > li { | |
| display: flex ; | |
| flex-direction: column; | |
| align-items: stretch ; | |
| } | |
| .blk-cx-flow.blk-cxp-big > li > .blk-cx-art { | |
| width: 100%; | |
| min-width: 0; | |
| height: auto ; | |
| margin-top: 12px; | |
| } | |
| .blk-cx-flow.blk-cxp-big > li > b { | |
| margin-top: 8px ; | |
| } | |
| .blk-cxp-big > li + li > .blk-cx-art::before { | |
| display: none ; | |
| } | |
| .blk-cxp-src ul { | |
| grid-template-columns: minmax(0, 1fr) ; | |
| } | |
| /* api: a table row stacks its name, then one labelled line per column */ | |
| .blk-steps li { | |
| grid-template-columns: 24px minmax(0, 1fr); | |
| } | |
| .blk-steps li code { | |
| grid-column: 1 / -1; | |
| } | |
| .blk-apifig table.blk-apitable thead { | |
| display: none; | |
| } | |
| .blk-apifig table.blk-apitable, | |
| .blk-apifig table.blk-apitable tbody, | |
| .blk-apifig table.blk-apitable tr { | |
| display: block; | |
| width: 100%; | |
| } | |
| .blk-apifig table.blk-apitable tr { | |
| padding: 10px 14px; | |
| border-bottom: 1px solid var(--line) ; | |
| } | |
| .blk-apifig table.blk-apitable tr:last-child { | |
| border-bottom: 0 ; | |
| } | |
| .blk-apifig table.blk-apitable th, | |
| .blk-apifig table.blk-apitable td { | |
| display: grid ; | |
| grid-template-columns: 92px minmax(0, 1fr); | |
| align-items: baseline; | |
| gap: 8px; | |
| min-width: 0 ; | |
| padding: 3px 0 ; | |
| border: 0 ; | |
| } | |
| .blk-apifig table.blk-apitable tbody th { | |
| display: block ; | |
| padding: 0 0 4px ; | |
| } | |
| .blk-apifig table.blk-apitable td::before { | |
| content: attr(data-col); | |
| font-size: 12px; | |
| color: var(--mid); | |
| } | |
| .blk-figure.blk-apifig { | |
| overflow-x: visible; | |
| } | |
| } | |
| /* below a desk's width a wide figure's labels would shrink past reading size, so the same numbers | |
| as text take over there (the phone's own rules are above) */ | |
| @media (max-width: 900px) { | |
| .blk-wide { | |
| display: none; | |
| } | |
| .blk-narrow { | |
| display: block; | |
| } | |
| } | |
| /* --- motion ------------------------------------------------------------------------------------ */ | |
| @keyframes blk-rise { | |
| from { | |
| opacity: 0; | |
| transform: translateY(6px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: none; | |
| } | |
| } | |
| /* the blink: a lid closes over the dot and opens again, once */ | |
| @keyframes blk-lid { | |
| 0%, | |
| 100% { | |
| transform: scaleY(1); | |
| } | |
| 45%, | |
| 55% { | |
| transform: scaleY(0.1); | |
| } | |
| } | |
| /* the skeleton breathes on a flat tone while the model runs */ | |
| @keyframes blk-shimmer { | |
| 0%, | |
| 100% { | |
| opacity: 1; | |
| } | |
| 50% { | |
| opacity: 0.5; | |
| } | |
| } | |
| @keyframes blk-wipe { | |
| from { | |
| transform: scaleX(0); | |
| } | |
| to { | |
| transform: scaleX(1); | |
| } | |
| } | |
| @keyframes blk-pop { | |
| from { | |
| opacity: 0; | |
| transform: scale(0.9); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: scale(1); | |
| } | |
| } | |
| @keyframes blk-fade { | |
| from { | |
| opacity: 0; | |
| } | |
| to { | |
| opacity: 1; | |
| } | |
| } | |
| @keyframes blk-draw { | |
| to { | |
| stroke-dashoffset: 0; | |
| } | |
| } | |
| @keyframes blk-pulse { | |
| 0%, | |
| 100% { | |
| opacity: 1; | |
| } | |
| 50% { | |
| opacity: 0.35; | |
| } | |
| } | |
| /* a probability fills in from nothing, once */ | |
| @keyframes blk-fill { | |
| from { | |
| --sp: 0; | |
| } | |
| } | |
| /* the picked mark sends one ring out */ | |
| @keyframes blk-ping { | |
| from { | |
| inset: -2px; | |
| opacity: 0.95; | |
| } | |
| to { | |
| inset: -16px; | |
| opacity: 0; | |
| } | |
| } | |
| /* the reading sweep, top to bottom */ | |
| @keyframes blk-scan { | |
| from { | |
| background-position: 0 100%; | |
| } | |
| to { | |
| background-position: 0 0; | |
| } | |
| } | |
| /* the picked number comes on, blinks, and stays */ | |
| @keyframes blk-flash { | |
| 0% { | |
| opacity: 0; | |
| } | |
| 40% { | |
| opacity: 1; | |
| } | |
| 60% { | |
| opacity: 0.3; | |
| } | |
| 80%, | |
| 100% { | |
| opacity: 1; | |
| } | |
| } | |
| @keyframes blk-beat { | |
| 0%, | |
| 100% { | |
| box-shadow: 0 0 0 0 rgba(36, 71, 245, 0.45); | |
| } | |
| 50% { | |
| box-shadow: 0 0 0 6px rgba(36, 71, 245, 0); | |
| } | |
| } | |
| @keyframes blk-cx-layer { | |
| from { | |
| opacity: 0.12; | |
| transform: scaleX(0.35); | |
| } | |
| to { | |
| opacity: 0.85; | |
| transform: none; | |
| } | |
| } | |
| @keyframes blk-cx-sweep { | |
| from { | |
| clip-path: inset(0 0 100% 0); | |
| } | |
| to { | |
| clip-path: inset(0 0 0 0); | |
| } | |
| } | |
| /* everything lands in its final state at once; nothing repeats */ | |
| @media (prefers-reduced-motion: reduce) { | |
| *, | |
| *::before, | |
| *::after { | |
| animation-duration: 0.001ms ; | |
| animation-delay: 0ms ; | |
| animation-iteration-count: 1 ; | |
| transition-duration: 0.001ms ; | |
| scroll-behavior: auto ; | |
| } | |
| .blk-cx.arm:not(.on) .blk-cx-flow > li { | |
| opacity: 1; | |
| } | |
| } | |