blink / style.css
thegovind's picture
Computer use: show where the boxes come from and everything blink is sent
9297e22 verified
Raw History Blame Contribute Delete
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) !important;
color-scheme: light !important;
}
/* one centred column, one gutter; every block inside aligns to its edges */
gradio-app {
display: block;
}
.gradio-container {
max-width: 1280px !important;
width: 100% !important;
margin-left: auto !important;
margin-right: auto !important;
padding: 0 clamp(16px, 4vw, 32px) 8px !important;
box-sizing: border-box !important;
background: transparent !important;
color: var(--ink);
font-family: var(--font-geist) !important;
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 !important;
}
.gradio-container .contain {
gap: 0 !important;
}
.gradio-container ::selection {
background: var(--blink-tint);
color: var(--ink);
}
footer {
display: none !important;
}
/* one ring for everything a keyboard can reach; text fields draw theirs as a border */
.gradio-container :focus-visible {
outline: 2px solid var(--blink) !important;
outline-offset: 2px !important;
}
/* --- gradio's blocks: no boxes of their own --------------------------------------- */
.gradio-container .block,
.gradio-container .form,
.gradio-container .html-container {
background: transparent !important;
border: 0 !important;
border-radius: 0 !important;
box-shadow: none !important;
padding-left: 0 !important;
padding-right: 0 !important;
}
/* 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 !important;
}
.gradio-container .html-container {
padding-top: 0 !important;
padding-bottom: 0 !important;
}
.gradio-container .styler {
background: transparent !important;
}
/* 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) !important;
border: 0 !important;
border-radius: var(--radius-control) !important;
}
.gradio-container .wrap.default:not(.hide) .eta-bar {
background: var(--blink-tint) !important;
}
.gradio-container .wrap .progress-text,
.gradio-container .wrap .meta-text,
.gradio-container .wrap .meta-text-center {
font-family: var(--font-geist) !important;
font-size: var(--text-caption) !important;
color: var(--mid) !important;
}
/* 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 !important;
padding: 0 !important;
font-family: var(--font-geist) !important;
font-size: var(--text-small) !important;
font-weight: 500 !important;
line-height: 18px !important;
letter-spacing: 0 !important;
text-transform: none !important;
color: var(--ink-soft) !important;
}
/* 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 !important;
display: flex !important;
align-items: center;
width: auto !important;
background: transparent !important;
border: 0 !important;
border-radius: 0 !important;
box-shadow: none !important;
}
.gradio-container label[data-testid="block-label"] > span:first-child:has(svg) {
display: none !important;
}
.gradio-container [data-testid="block-info"] + div > .info,
.gradio-container .block .info,
.gradio-container span.info {
margin: -2px 0 8px !important;
font-size: var(--text-caption) !important;
line-height: 1.45 !important;
color: var(--mid) !important;
}
/* --- text fields ---------------------------------------------------------------------- */
.gradio-container textarea,
.gradio-container input[type="text"],
.gradio-container input[type="number"],
.gradio-container input[type="search"] {
background: var(--paper) !important;
border: 1px solid var(--line-strong) !important;
border-radius: var(--radius-control) !important;
box-shadow: var(--shadow-control) !important;
color: var(--ink) !important;
font-family: var(--font-geist) !important;
font-size: var(--text-body) !important;
line-height: 1.5 !important;
transition: border-color 0.15s ease, box-shadow 0.15s ease, background-color 0.15s ease;
}
.gradio-container textarea {
padding: 9px 12px !important;
}
.gradio-container input[type="text"],
.gradio-container input[type="number"],
.gradio-container input[type="search"] {
min-height: 40px;
padding: 8px 12px !important;
}
.gradio-container textarea::placeholder,
.gradio-container input::placeholder {
color: var(--faint) !important;
opacity: 1;
}
.gradio-container textarea:hover:not(:disabled):not(:focus),
.gradio-container input[type="text"]:hover:not(:disabled):not(:focus) {
border-color: #b8bfca !important;
}
.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) !important;
box-shadow: var(--ring) !important;
outline: none !important;
}
/* 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) !important;
background: var(--alt) !important;
box-shadow: none !important;
-webkit-text-fill-color: var(--ink-soft);
}
/* --- dropdowns ------------------------------------------------------------------------ */
.gradio-container .wrap:has(> .wrap-inner) {
min-height: 40px;
background: var(--paper) !important;
border: 1px solid var(--line-strong) !important;
border-radius: var(--radius-control) !important;
box-shadow: var(--shadow-control) !important;
transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.gradio-container .wrap:has(> .wrap-inner):hover {
border-color: #b8bfca !important;
}
.gradio-container .wrap:has(> .wrap-inner):focus-within {
border-color: var(--blink) !important;
box-shadow: var(--ring) !important;
}
.gradio-container .wrap-inner {
min-height: 38px;
padding: 0 10px 0 12px !important;
align-items: center;
}
.gradio-container .wrap-inner input[role="combobox"],
.gradio-container .secondary-wrap input {
margin: 0 !important;
border: 0 !important;
box-shadow: none !important;
background: transparent !important;
font-family: var(--font-geist) !important;
font-size: var(--text-body) !important;
color: var(--ink) !important;
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 !important;
box-shadow: none !important;
}
.gradio-container .wrap-inner .icon-wrap {
color: var(--mid) !important;
}
.gradio-container .wrap-inner .icon-wrap svg {
width: 16px;
height: 16px;
}
.gradio-container ul.options {
min-width: 140px !important;
padding: 4px !important;
background: var(--paper) !important;
border: 1px solid var(--line) !important;
border-radius: var(--radius-control) !important;
box-shadow: var(--shadow-pop) !important;
}
.gradio-container ul.options li {
margin: 0 !important;
padding: 7px 10px !important;
border-radius: var(--radius-small) !important;
font-family: var(--font-geist) !important;
font-size: var(--text-body) !important;
line-height: 20px !important;
color: var(--ink) !important;
white-space: nowrap;
}
.gradio-container ul.options li:hover,
.gradio-container ul.options li.active {
background: var(--sunken) !important;
}
.gradio-container ul.options li.selected {
background: var(--blink-tint) !important;
color: var(--blink-ink) !important;
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 !important;
min-width: 0 !important;
}
.gradio-container fieldset > .wrap:has(> label > input[type="radio"]) {
display: inline-flex !important;
flex-wrap: wrap;
gap: 2px !important;
max-width: 100%;
padding: 3px !important;
border: 0 !important;
border-radius: 10px !important;
background: var(--sunken) !important;
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 !important;
align-items: center;
min-height: 32px;
margin: 0 !important;
padding: 0 12px !important;
border: 0 !important;
border-radius: 7px !important;
background: transparent !important;
box-shadow: none !important;
color: var(--mid) !important;
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 !important;
width: 1px !important;
height: 1px !important;
margin: 0 !important;
opacity: 0 !important;
pointer-events: none;
}
.gradio-container fieldset > .wrap > label:has(> input[type="radio"]) > span {
margin: 0 !important;
font-family: var(--font-geist) !important;
font-size: var(--text-small) !important;
font-weight: 500 !important;
line-height: 18px !important;
letter-spacing: 0 !important;
color: inherit !important;
white-space: nowrap;
}
.gradio-container fieldset > .wrap > label:has(> input[type="radio"]):hover {
color: var(--ink) !important;
}
.gradio-container fieldset > .wrap > label.selected:has(> input[type="radio"]) {
background: var(--paper) !important;
color: var(--ink) !important;
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.1), 0 0 0 1px rgba(16, 24, 40, 0.06) !important;
}
.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 !important;
align-items: flex-start;
gap: 10px;
cursor: pointer;
}
.gradio-container label.checkbox-container input[type="checkbox"] {
flex: none;
width: 16px !important;
height: 16px !important;
margin: 2px 0 0 !important;
border: 1px solid var(--line-strong) !important;
border-radius: var(--radius-xs) !important;
background-color: var(--paper) !important;
box-shadow: var(--shadow-control) !important;
}
.gradio-container label.checkbox-container input[type="checkbox"]:checked {
border-color: var(--blink) !important;
background-color: var(--blink) !important;
}
.gradio-container label.checkbox-container .label-text,
.gradio-container label.checkbox-container > span {
margin: 0 !important;
font-family: var(--font-geist) !important;
font-size: var(--text-body) !important;
font-weight: 400 !important;
line-height: 20px !important;
color: var(--ink-soft) !important;
}
/* --- 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) !important;
font-size: var(--text-body) !important;
font-weight: 500 !important;
line-height: 20px !important;
letter-spacing: 0 !important;
text-transform: none !important;
border-radius: var(--radius-control) !important;
border: 1px solid var(--line-strong) !important;
background: var(--paper) !important;
color: var(--ink) !important;
box-shadow: var(--shadow-control) !important;
transform: none !important;
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 !important;
}
.gradio-container button.md {
min-height: 36px;
padding: 0 14px !important;
}
.gradio-container button.sm {
min-height: 32px;
padding: 0 12px !important;
font-size: var(--text-small) !important;
}
.gradio-container button.secondary:hover:not(:disabled) {
background: var(--alt) !important;
border-color: #b8bfca !important;
}
/* the one filled colour in a workspace is the action that runs blink */
.gradio-container button.primary {
background: var(--blink) !important;
border-color: var(--blink) !important;
color: #ffffff !important;
font-weight: 600 !important;
box-shadow: 0 1px 2px rgba(36, 71, 245, 0.24), inset 0 1px 0 rgba(255, 255, 255, 0.12) !important;
}
.gradio-container button.primary:hover:not(:disabled) {
background: var(--color-blink-hover) !important;
border-color: var(--color-blink-hover) !important;
}
.gradio-container button.primary:active:not(:disabled) {
background: var(--color-blink-deep) !important;
}
.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 !important;
gap: 6px !important;
}
.blk-chips > * {
flex: 0 0 auto !important;
min-width: 0 !important;
}
.blk-chips button {
white-space: nowrap;
min-width: 0 !important;
}
/* --- disclosure: one row, one chevron, for every fold on every tab ------------------------ */
/* gradio's accordions */
.gradio-container .gr-accordion {
margin: 0 !important;
padding: 0 !important;
border: 1px solid var(--line) !important;
border-radius: 10px !important;
background: var(--paper) !important;
}
.gradio-container .gr-accordion > button.label-wrap {
position: relative;
display: flex !important;
align-items: center !important;
justify-content: space-between !important;
gap: 12px;
width: 100% !important;
min-height: 44px;
margin: 0 !important;
padding: 0 40px 0 14px !important;
border: 0 !important;
border-radius: 10px !important;
background: transparent !important;
color: var(--ink) !important;
text-align: left;
cursor: pointer;
}
.gradio-container .gr-accordion > button.label-wrap > span:first-child {
font-family: var(--font-geist) !important;
font-size: var(--text-body) !important;
font-weight: 500 !important;
line-height: 20px !important;
letter-spacing: 0 !important;
color: inherit !important;
}
.gradio-container .gr-accordion > button.label-wrap:hover {
background: var(--alt) !important;
}
.gradio-container .gr-accordion > button.label-wrap.open {
margin-bottom: 0 !important;
border-bottom-left-radius: 0 !important;
border-bottom-right-radius: 0 !important;
}
/* 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 !important;
}
.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 !important;
}
.gradio-container .gr-accordion > [data-testid="accordion-content"] > .column {
gap: 12px !important;
}
/* 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 !important;
margin-right: 14px !important;
}
details.blk-d > p,
details.blk-d > ul,
details.blk-d > ol {
max-width: 720px;
margin-top: 0 !important;
margin-bottom: 12px !important;
font-size: var(--text-body);
line-height: 1.6;
color: var(--ink-soft);
}
details.blk-d > :nth-child(2) {
margin-top: 4px !important;
}
details.blk-d[open] {
padding-bottom: 6px;
}
details.blk-d > .blk-links {
margin-bottom: 12px !important;
}
/* 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 !important;
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) !important;
border: 1px solid var(--line-strong) !important;
border-radius: var(--radius-control) !important;
overflow: hidden;
font-size: 12.5px;
}
.gradio-container .cm-editor.cm-focused {
border-color: var(--blink) !important;
box-shadow: var(--ring);
outline: none !important;
}
.gradio-container .cm-editor .cm-content,
.gradio-container .cm-editor .cm-gutters {
font-family: var(--font-geist-mono) !important;
font-size: 12.5px !important;
line-height: 1.6 !important;
}
/* 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) !important;
caret-color: var(--ink);
}
.gradio-container .cm-cursor {
border-left-color: var(--ink) !important;
}
.gradio-container .cm-selectionBackground,
.gradio-container .cm-focused .cm-selectionBackground {
background: var(--blink-tint) !important;
}
.gradio-container .cm-gutters {
background: var(--alt) !important;
border-right: 1px solid var(--line) !important;
color: var(--faint) !important;
}
.gradio-container .cm-activeLine,
.gradio-container .cm-activeLineGutter {
background: transparent !important;
}
/* the copy and download buttons gradio pins to an editor's corner */
.gradio-container .icon-button-wrapper.top-panel {
top: 30px !important;
right: 6px !important;
padding: 2px !important;
gap: 2px;
border: 1px solid var(--line) !important;
border-radius: var(--radius-small) !important;
background: var(--paper) !important;
box-shadow: var(--shadow-control) !important;
}
.gradio-container .icon-button-wrapper.top-panel button.icon-button {
width: 26px !important;
height: 26px !important;
border-radius: var(--radius-xs) !important;
color: var(--mid) !important;
}
/* the JSON viewer */
.gradio-container [data-testid="json"] {
border: 1px solid var(--line) !important;
border-radius: var(--radius-control) !important;
background: var(--alt) !important;
}
.gradio-container [data-testid="json"] > div:first-child:has(label) {
padding: 10px 12px 0 !important;
}
.gradio-container .json-holder {
padding: 6px 12px 12px !important;
font-family: var(--font-geist-mono) !important;
font-size: 12.5px !important;
}
.gradio-container .json-holder * {
font-family: var(--font-geist-mono) !important;
font-size: 12.5px !important;
line-height: 20px !important;
}
/* 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 !important;
min-height: 132px !important;
border: 1px dashed var(--line-strong) !important;
border-radius: 10px !important;
background: var(--alt) !important;
transition: border-color 0.15s ease, background-color 0.15s ease;
}
.gradio-container button.upload-container:hover {
border-color: var(--blink) !important;
background: var(--blink-tint) !important;
}
.gradio-container button.upload-container .wrap {
padding: 0 !important;
font-family: var(--font-geist) !important;
font-size: var(--text-body) !important;
line-height: 1.5 !important;
color: var(--mid) !important;
}
.gradio-container button.upload-container .icon-wrap svg {
width: 22px;
height: 22px;
color: var(--blink);
}
.gradio-container button.upload-container .or {
color: var(--faint) !important;
}
/* a list of files: name, size and the link to fetch it, one row each */
.gradio-container .file-preview-holder {
overflow: visible !important;
}
.gradio-container table.file-preview {
width: 100%;
margin: 0 !important;
border-collapse: separate !important;
border-spacing: 0;
border: 1px solid var(--line) !important;
border-radius: var(--radius-control);
overflow: hidden;
}
.gradio-container table.file-preview tbody,
.gradio-container table.file-preview tr {
border: 0 !important;
}
.gradio-container table.file-preview tr.file {
display: flex;
align-items: center;
min-height: 44px;
background: var(--paper) !important;
border-top: 1px solid var(--line) !important;
}
.gradio-container table.file-preview tr.file:first-child {
border-top: 0 !important;
}
.gradio-container table.file-preview td {
border: 0 !important;
padding: 0 12px !important;
font-family: var(--font-geist) !important;
font-size: var(--text-body) !important;
color: var(--ink) !important;
}
.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) !important;
font-size: var(--text-small) !important;
font-weight: 500;
font-variant-numeric: tabular-nums;
text-decoration: none !important;
}
.gradio-container table.file-preview a.download-link:hover {
text-decoration: underline !important;
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 !important;
}
/* a download list offers files; it has nothing to remove */
#doc-downloads .label-clear-button,
#doc-downloads td:has(> .label-clear-button) {
display: none !important;
}
/* --- 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 !important;
padding: 0 !important;
}
.gradio-container .tab-container {
gap: 0 !important;
background: transparent !important;
border: 0 !important;
}
.gradio-container .tab-container > button {
height: 100% !important;
margin: 0 !important;
border: 0 !important;
border-radius: 0 !important;
background: transparent !important;
box-shadow: none !important;
font-family: var(--font-geist) !important;
font-weight: 500 !important;
letter-spacing: 0 !important;
color: var(--mid) !important;
transition: color 0.15s ease, background-color 0.15s ease;
}
.gradio-container .tab-container > button:hover:not(.selected) {
color: var(--ink) !important;
background: transparent !important;
}
.gradio-container .tab-container > button.selected {
color: var(--ink) !important;
}
.gradio-container .tab-container > button:focus-visible {
outline-offset: -3px !important;
border-radius: var(--radius-small) !important;
}
#blink-navigation > .tab-wrapper {
margin: 0 0 28px !important;
}
#blink-navigation > .tab-wrapper > .tab-container {
height: 44px !important;
}
#blink-navigation > .tab-wrapper > .tab-container::after {
height: 1px;
background-color: var(--line) !important;
}
#blink-navigation > .tab-wrapper > .tab-container > button {
padding: 0 12px !important;
font-size: var(--text-body) !important;
line-height: 20px !important;
}
#blink-navigation > .tab-wrapper > .tab-container > button.selected::after,
#blink-cases > .tab-wrapper > .tab-container > button.selected::after {
content: "";
display: block !important;
position: absolute;
left: 12px;
right: 12px;
bottom: 0;
width: auto !important;
height: 2px;
border-radius: 2px 2px 0 0;
background-color: var(--blink) !important;
animation: none !important;
}
#blink-explore > .tab-wrapper {
margin: -8px 0 24px !important;
}
#blink-explore > .tab-wrapper > .tab-container {
height: 34px !important;
}
#blink-explore > .tab-wrapper > .tab-container::after,
#blink-explore > .tab-wrapper > .tab-container > button::after {
display: none !important;
}
#blink-explore > .tab-wrapper > .tab-container > button {
height: 32px !important;
padding: 0 12px !important;
border-radius: var(--radius-control) !important;
font-size: var(--text-small) !important;
line-height: 18px !important;
}
#blink-explore > .tab-wrapper > .tab-container > button:hover:not(.selected) {
background: var(--sunken) !important;
}
#blink-explore > .tab-wrapper > .tab-container > button.selected {
background: var(--blink-tint) !important;
color: var(--blink-ink) !important;
}
#blink-cases > .tab-wrapper {
margin: 0 0 20px !important;
}
#blink-cases > .tab-wrapper > .tab-container {
height: 38px !important;
}
#blink-cases > .tab-wrapper > .tab-container::after {
height: 1px;
background-color: var(--line) !important;
}
#blink-cases > .tab-wrapper > .tab-container > button {
padding: 0 12px !important;
font-size: var(--text-small) !important;
line-height: 18px !important;
}
/* what does not fit waits behind one button */
.gradio-container .overflow-menu {
margin-left: 6px !important;
}
.gradio-container .overflow-menu > button {
height: 32px !important;
min-width: 36px !important;
padding: 0 8px !important;
border: 1px solid var(--line) !important;
border-radius: var(--radius-control) !important;
background: var(--paper) !important;
color: var(--ink-soft) !important;
box-shadow: var(--shadow-control) !important;
}
.gradio-container .overflow-menu > button:hover {
background: var(--alt) !important;
}
.gradio-container .overflow-dropdown {
padding: 4px !important;
border: 1px solid var(--line) !important;
border-radius: var(--radius-control) !important;
background: var(--paper) !important;
box-shadow: var(--shadow-pop) !important;
}
.gradio-container .overflow-dropdown button {
height: auto !important;
padding: 8px 10px !important;
border-radius: var(--radius-small) !important;
font-family: var(--font-geist) !important;
font-size: var(--text-body) !important;
font-weight: 500 !important;
color: var(--ink) !important;
background: transparent !important;
}
.gradio-container .overflow-dropdown button:hover,
.gradio-container .overflow-dropdown button.overflow-item-selected {
background: var(--sunken) !important;
}
.gradio-container .tabitem {
padding: 0 !important;
border: 0 !important;
background: transparent !important;
}
/* --- 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 !important;
font-family: var(--font-geist);
font-size: 27px !important;
font-weight: 700 !important;
line-height: 1 !important;
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 !important;
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 !important;
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) !important;
font-size: var(--text-small);
font-weight: 500;
line-height: 1;
text-decoration: none !important;
white-space: nowrap;
transition: background-color 0.15s ease, color 0.15s ease;
}
.blk-toplinks a:hover {
background: var(--sunken);
color: var(--ink) !important;
}
/* 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) !important;
font-size: var(--text-small);
font-weight: 500;
line-height: 1;
text-decoration: none !important;
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 !important;
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 !important;
font-size: var(--text-body);
line-height: 1.6;
color: var(--mid);
}
.blk-eyebrow {
margin: 0 0 10px !important;
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 !important;
font-family: var(--font-geist);
font-size: var(--text-heading);
font-weight: 600 !important;
line-height: 1.25 !important;
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 !important;
font-family: var(--font-geist);
font-size: var(--text-title) !important;
font-weight: 600 !important;
line-height: 1.35 !important;
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 !important;
}
.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 !important;
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 !important;
padding: 10px 12px;
border: 1px solid var(--color-error-line);
border-radius: var(--radius-control);
background: var(--color-error-bg);
color: var(--color-error) !important;
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) !important;
}
.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 !important;
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 !important;
padding: 10px 12px !important;
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 !important;
color: var(--color-error) !important;
}
.blk-locked {
margin: 6px 0 0 !important;
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 !important;
}
/* --- 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 !important;
padding: 0 !important;
list-style: none !important;
}
.blk-opt {
display: grid;
grid-template-columns: minmax(0, 200px) minmax(0, 1fr) 60px;
align-items: center;
gap: 14px;
margin: 0 !important;
font-size: var(--text-small);
line-height: 18px;
}
.blk-opt .k {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: var(--mid) !important;
}
.blk-opt.win .k {
color: var(--ink) !important;
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) !important;
}
.blk-opt.win .v {
color: var(--ink) !important;
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 !important;
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 !important;
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 !important;
font-size: var(--text-body-lg);
font-weight: 500;
line-height: 1.45;
color: var(--ink) !important;
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 !important;
font-family: var(--font-geist-mono) !important;
font-size: var(--text-caption) !important;
font-weight: 500 !important;
line-height: 20px !important;
color: var(--mid) !important;
}
/* 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) !important;
overflow-wrap: anywhere;
}
.blk-headline .blk-sub {
font-size: var(--text-small);
color: var(--mid) !important;
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 !important;
font-family: var(--font-geist);
font-size: var(--text-heading-sm) !important;
font-weight: 600 !important;
line-height: 28px !important;
letter-spacing: -0.015em;
color: var(--ink) !important;
}
.blk-verdict p {
margin: 4px 0 0 !important;
font-size: var(--text-body);
line-height: 1.5;
color: var(--mid) !important;
}
/* 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 !important;
}
.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 !important;
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 !important;
align-items: flex-start !important;
}
.blk-side {
gap: 14px !important;
min-width: 0 !important;
}
.blk-side > * {
margin-left: 0 !important;
margin-right: 0 !important;
}
.blk-main {
gap: 12px !important;
min-width: 0 !important;
}
/* 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 !important;
margin-bottom: -4px !important;
padding: 0 !important;
}
/* --- ask ----------------------------------------------------------------------------- */
.blk-askrow {
align-items: stretch !important;
flex-wrap: nowrap !important;
gap: 8px !important;
max-width: 720px;
}
.blk-askrow > * {
min-width: 0 !important;
}
.blk-askrow > button.blk-askgo {
flex: 0 0 auto !important;
min-width: 88px !important;
align-self: stretch !important;
}
.blk-ask input,
.blk-ask textarea {
min-height: 44px;
font-size: var(--text-body-lg) !important;
}
.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 !important;
padding: 0 !important;
}
.blk-ask-note {
min-height: 1.2em;
margin: 0 !important;
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) !important;
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 !important;
padding: 0 !important;
list-style: none !important;
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 !important;
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 !important;
padding: 0 !important;
list-style: none !important;
}
.blk-draft-q ul li {
margin: 0 !important;
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) !important;
}
button.blk-handoff {
align-self: flex-start;
width: auto !important;
margin-top: 4px !important;
}
/* --- 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 !important;
border: 0 !important;
border-radius: 0 !important;
background: transparent !important;
box-shadow: none !important;
overflow: visible !important;
}
.gradio-container .gr-group > .styler {
overflow: visible !important;
}
/* --- the question form ---------------------------------------------------------------- */
.blk-qblock {
padding: 0 18px !important;
border: 1px solid var(--line) !important;
border-radius: var(--radius-cards) !important;
background: var(--paper) !important;
box-shadow: var(--shadow-subtle) !important;
}
/* 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 !important;
border: 0 !important;
border-radius: 0 !important;
background: transparent !important;
box-shadow: none !important;
}
.blk-qrow {
padding: 14px 0 12px !important;
border: 0 !important;
border-top: 1px solid var(--line) !important;
border-radius: 0 !important;
}
.blk-qrow:first-of-type {
border-top: 0 !important;
}
/* one question, stacked tight: gradio's own gaps and block paddings go */
.blk-qrow .styler,
.blk-qhead,
.blk-qhead .form {
gap: 4px !important;
}
.blk-qrow .block {
min-height: 0 !important;
padding: 0 !important;
}
.blk-qhead > * {
min-width: 0 !important;
}
/* 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) !important;
max-width: none !important;
margin: 0 -9px !important;
padding: 4px 8px !important;
border: 1px solid transparent !important;
border-radius: var(--radius-control) !important;
background: transparent !important;
box-shadow: none !important;
font-size: var(--text-body-lg) !important;
font-weight: 500 !important;
line-height: 1.45 !important;
color: var(--ink) !important;
resize: none !important;
}
.blk-qask textarea:hover:not(:disabled):not(:focus),
.blk-qname input:hover:not(:disabled):not(:focus) {
border-color: transparent !important;
background: var(--alt) !important;
}
.blk-qask textarea:focus,
.blk-qname input:focus,
.blk-qopts textarea:focus {
border-color: var(--blink) !important;
background: var(--paper) !important;
box-shadow: var(--ring) !important;
}
/* its name and type: quiet metadata on one line */
.blk-qmeta {
flex-wrap: nowrap !important;
align-items: center !important;
gap: 8px !important;
}
/* 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 !important;
width: auto !important;
min-width: 0 !important;
}
.blk-qmeta .form {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
gap: 8px !important;
}
.blk-qname input {
min-width: 6ch;
max-width: 24ch;
height: 26px;
min-height: 0 !important;
margin-left: -9px !important;
padding: 0 8px !important;
border: 1px solid transparent !important;
border-radius: var(--radius-small) !important;
background: transparent !important;
box-shadow: none !important;
font-family: var(--font-geist-mono) !important;
font-size: var(--text-caption) !important;
font-weight: 500 !important;
line-height: 1.33 !important;
color: var(--mid) !important;
}
/* the name's wrappers take the field's width, not the other way round */
.blk-qname label,
.blk-qname .input-container {
width: max-content !important;
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 !important;
border-radius: var(--radius-small) !important;
background: var(--sunken) !important;
box-shadow: none !important;
}
.blk-qtype .wrap:has(> .wrap-inner):hover {
border-color: var(--line-strong) !important;
}
.blk-qtype .wrap-inner,
.blk-qtype .secondary-wrap {
min-height: 24px;
padding: 0 !important;
}
.blk-qtype .secondary-wrap input,
.blk-qtype input {
width: 78px !important;
height: 24px;
margin: 0 !important;
padding: 0 22px 0 8px !important;
box-sizing: border-box;
font-size: var(--text-caption) !important;
font-weight: 500 !important;
color: var(--ink-soft) !important;
}
.blk-qtype .icon-wrap {
right: 6px !important;
width: 12px !important;
}
.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 !important;
padding: 0 !important;
}
.blk-optchips {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin: 6px 0 0 !important;
padding: 0 !important;
list-style: none !important;
}
.blk-optchips:empty {
display: none;
}
.blk-optchips li {
margin: 0 !important;
padding: 2px 8px !important;
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) !important;
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) !important;
}
/* editing the options is one step further in: the box and Remove show while the toggle is open */
.blk-qmore {
margin: 0 !important;
border: 0 !important;
border-radius: 0 !important;
background: transparent !important;
}
.blk-qmore > button.label-wrap {
min-height: 26px;
padding: 0 16px 0 0 !important;
border-radius: var(--radius-xs) !important;
justify-content: flex-start !important;
color: var(--mid) !important;
}
.blk-qmore > button.label-wrap > span:first-child {
font-size: var(--text-caption) !important;
font-weight: 500 !important;
white-space: nowrap;
}
.blk-qmore > button.label-wrap:hover {
background: transparent !important;
color: var(--ink) !important;
}
.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 !important;
}
.blk-qrow .blk-qopts,
.blk-qrow .blk-qdrop {
display: none !important;
}
.blk-qrow:has(.blk-qmore button.label-wrap.open) .blk-qopts,
.blk-qrow:has(.blk-qmore button.label-wrap.open) .blk-qdrop {
display: block !important;
}
.blk-qopts textarea {
margin-top: 6px;
border-color: var(--line) !important;
background: var(--alt) !important;
box-shadow: none !important;
font-family: var(--font-geist-mono) !important;
font-size: 12.5px !important;
line-height: 1.6 !important;
}
/* a request the rows cannot hold is shown, not edited */
.blk-qrow textarea:disabled,
.blk-qrow input:disabled {
background: transparent !important;
color: var(--ink-soft) !important;
cursor: default;
}
/* removing a question is the one destructive act here */
button.blk-qdrop {
align-self: flex-start !important;
width: auto !important;
min-height: 28px;
margin: 8px 0 2px !important;
padding: 0 10px !important;
background: transparent !important;
box-shadow: none !important;
font-size: var(--text-caption) !important;
color: var(--mid) !important;
white-space: nowrap;
}
button.blk-qdrop:hover:not(:disabled) {
border-color: var(--color-error-line) !important;
background: var(--color-error-bg) !important;
color: var(--color-error) !important;
}
button.blk-qadd {
border-style: dashed !important;
background: transparent !important;
box-shadow: none !important;
color: var(--ink-soft) !important;
}
button.blk-qadd:hover:not(:disabled) {
border-color: var(--blink) !important;
background: var(--blink-tint) !important;
color: var(--blink-ink) !important;
}
/* --- 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 !important;
min-width: 168px !important;
margin: 0 !important;
padding: 0 32px !important;
}
.blk-play .blk-side {
gap: 12px !important;
}
.blk-play .blk-state {
padding: 0 !important;
}
.blk-play .blk-qblock {
padding: 0 16px !important;
}
.blk-play .blk-qrow {
padding: 12px 0 10px !important;
}
.blk-play .blk-qblock .blk-qblock,
.blk-play .blk-qrow .blk-qrow {
padding: 0 !important;
}
/* the options toggle closes the name-and-type line instead of taking a line of its own */
.blk-play .blk-qrow .styler {
display: grid !important;
grid-template-columns: minmax(0, 1fr) auto;
column-gap: 12px !important;
row-gap: 4px !important;
align-items: center;
}
.blk-play .blk-qrow .styler > *,
.blk-play .blk-qhead > * {
grid-column: 1 / -1;
}
.blk-play .blk-qhead {
display: contents !important;
}
.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 !important;
}
.blk-play .blk-optchips {
margin: 2px 0 0 !important;
}
.blk-play button.blk-qadd {
margin-top: 0 !important;
}
.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 !important;
font-size: clamp(30px, 4.2vw, 44px) !important;
font-weight: 600 !important;
line-height: 1.08 !important;
letter-spacing: -0.035em;
color: var(--ink);
}
.blk-home-lede {
max-width: 52ch;
margin: 0 !important;
font-size: 17px !important;
line-height: 1.55 !important;
color: var(--mid) !important;
}
/* the four places to start: one card each, the whole card is the button */
.row.blk-cards {
display: grid !important;
grid-template-columns: repeat(auto-fit, minmax(min(232px, 100%), 1fr));
align-items: stretch !important;
gap: 12px !important;
margin: 28px 0 36px !important;
}
.blk-tilewrap {
position: relative;
min-width: 0 !important;
gap: 0 !important;
}
.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) !important;
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) !important;
}
.blk-face > span:not(.blk-face-icon) {
grid-column: 1 / -1;
font-size: var(--text-small);
line-height: 1.5;
color: var(--mid) !important;
}
.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) !important;
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) !important;
}
.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 !important;
inset: 0;
width: 100% !important;
height: 100% !important;
margin: 0 !important;
padding: 0 !important;
border-radius: var(--radius-cards) !important;
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) !important;
text-decoration: none !important;
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) !important;
}
.blk-tile span {
grid-column: 1 / -1;
font-size: var(--text-small);
line-height: 1.45;
color: var(--mid) !important;
}
.blk-tile em {
grid-row: 1;
grid-column: 2;
font-size: var(--text-caption);
font-style: normal;
font-weight: 500;
color: var(--mid) !important;
}
.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 !important;
}
details.home-fold .blk-pair .blk-eyebrow {
margin-top: 4px !important;
}
/* a computer-use run, inside its fold: the run looping beside where to watch and try it */
.blk-cua {
gap: 24px !important;
align-items: center !important;
margin: 0 !important;
padding: 4px 0 0 !important;
}
.blk-cua-shot {
margin: 0 !important;
}
.blk-cua-shot img,
.blk-cua-shot video {
display: block;
width: 100%;
height: auto;
margin: 0 !important;
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) !important;
}
.blk-cua-pitch {
margin: 0 0 8px !important;
font-size: var(--text-heading-sm) !important;
font-weight: 600 !important;
line-height: 1.3 !important;
letter-spacing: -0.015em;
color: var(--ink);
}
.blk-cua-go {
flex-wrap: wrap !important;
gap: 8px !important;
margin-top: 6px;
}
.blk-cua-go button {
flex: 0 0 auto !important;
width: auto !important;
min-width: 0 !important;
}
/* 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 !important;
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 !important;
}
.doc-workspace {
gap: 32px !important;
align-items: flex-start !important;
margin-top: 24px !important;
}
.doc-col {
gap: 14px !important;
min-width: 0 !important;
}
.doc-step {
display: flex;
align-items: center;
gap: 10px;
margin: 0 !important;
font-size: 16px !important;
font-weight: 600 !important;
line-height: 24px !important;
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) !important;
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 !important;
}
.doc-caption {
margin: 0 !important;
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 !important;
}
.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) !important;
overflow-wrap: anywhere;
}
.doc-source > p > span {
font-size: var(--text-small);
color: var(--mid) !important;
}
.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 !important;
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 !important;
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) !important;
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) !important;
}
.doc-empty {
padding: 16px;
border: 1px dashed var(--line-strong);
border-radius: var(--radius-cards);
background: var(--paper);
}
.doc-empty p {
margin: 0 !important;
font-size: var(--text-body);
line-height: 1.55;
color: var(--mid) !important;
}
#doc-text textarea {
font-size: var(--text-small) !important;
line-height: 1.6 !important;
}
/* the result: one panel, its parts divided by hairlines */
#doc-outputs {
gap: 0 !important;
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 !important;
}
#doc-outputs > .form,
#doc-outputs > .block:not(.gr-accordion):not(#doc-result) {
padding: 16px 20px 0 !important;
}
#doc-outputs > .form:has(#doc-inspect) {
border-top: 1px solid var(--line) !important;
}
/* the JSON fold keeps a gap from whatever sits above it in the panel */
#doc-outputs > .gr-accordion:not(:first-child) {
margin-top: 20px !important;
}
/* inside the panel the JSON fold is the panel's last row */
#doc-outputs > .gr-accordion {
border: 0 !important;
border-top: 1px solid var(--line) !important;
border-radius: 0 !important;
}
#doc-outputs > .gr-accordion > button.label-wrap {
min-height: 48px;
padding: 0 44px 0 20px !important;
border-radius: 0 !important;
}
#doc-outputs > .gr-accordion > button.label-wrap::after {
right: 22px;
}
#doc-outputs > .gr-accordion > [data-testid="accordion-content"] {
padding: 0 20px 20px !important;
}
#doc-result .doc-empty,
#doc-result .blk-warn {
margin: 20px 20px 0 !important;
}
.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 !important;
font-size: var(--text-small);
font-weight: 500;
color: var(--ink-soft) !important;
}
.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 !important;
font-size: 26px !important;
font-weight: 600 !important;
line-height: 1.2 !important;
letter-spacing: -0.02em;
color: var(--ink);
}
.doc-verdict-note {
margin: 4px 0 0 !important;
font-size: var(--text-body);
color: var(--mid) !important;
}
/* the packet in page order, each document as wide as its pages */
.doc-timeline {
display: flex;
gap: 4px;
margin: 0 20px 20px !important;
padding: 0 !important;
list-style: none !important;
}
.doc-timeline li {
display: flex;
flex: var(--pages) 1 0;
flex-direction: column;
gap: 2px;
min-width: 0;
margin: 0 !important;
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) !important;
white-space: nowrap;
text-overflow: ellipsis;
}
.doc-timeline span {
font-size: var(--text-caption);
color: var(--mid) !important;
white-space: nowrap;
font-variant-numeric: tabular-nums;
}
.doc-list-head {
display: flex;
justify-content: space-between;
gap: 12px;
margin: 0 !important;
padding: 0 44px 8px 20px;
font-size: var(--text-caption);
font-weight: 500;
color: var(--mid) !important;
}
.doc-segments {
margin: 0 !important;
padding: 0 !important;
list-style: none !important;
border-top: 1px solid var(--line);
}
.doc-segment {
margin: 0 !important;
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) !important;
}
.doc-seg-name span {
font-size: var(--text-small);
color: var(--mid) !important;
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) !important;
}
.doc-seg-p {
flex: none;
font-size: var(--text-body);
font-weight: 600;
color: var(--ink) !important;
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 !important;
padding: 4px 20px 16px !important;
}
.doc-review-reasons {
margin: 0 !important;
padding: 0 20px 12px 38px !important;
list-style: disc !important;
font-size: var(--text-small);
line-height: 1.55;
}
.doc-review-reasons li {
margin: 0 0 2px !important;
color: var(--color-review) !important;
}
/* 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 !important;
}
.doc-scores .doc-review-reasons {
padding: 12px 0 0 18px !important;
}
.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) !important;
}
.doc-metrics b {
font-size: var(--text-title);
font-weight: 600;
line-height: 1.3;
color: var(--ink) !important;
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 !important;
font-size: var(--text-small);
font-weight: 600;
color: var(--ink-soft) !important;
}
#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) !important;
}
.doc-stale-notice {
display: none;
margin: 0 !important;
padding: 14px 16px;
border: 1px dashed var(--line-strong);
border-radius: var(--radius-cards);
font-size: var(--text-body);
color: var(--mid) !important;
}
.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 !important;
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) !important;
font-size: var(--text-small);
font-weight: 500;
line-height: 1;
}
.blk-eyechip span {
color: inherit !important;
}
.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 !important;
padding: 14px !important;
border: 1px solid var(--line) !important;
border-radius: var(--radius-cards) !important;
background: var(--alt) !important;
}
.blk-upgroup .blk-upgroup,
.blk-upgroup .styler {
gap: 10px !important;
padding: 0 !important;
border: 0 !important;
background: transparent !important;
}
.blk-upgroup button.blk-clear {
align-self: flex-start;
width: auto !important;
}
.blk-livenote {
display: flex;
align-items: flex-start;
gap: 8px;
margin: 0 !important;
font-size: var(--text-small);
line-height: 1.5;
color: var(--mid) !important;
}
.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) !important;
}
.blk-howsteps {
margin: 0 14px 12px !important;
padding-left: 20px !important;
font-size: var(--text-small);
line-height: 1.55;
}
.blk-howsteps li {
margin: 0 0 4px !important;
color: var(--ink-soft) !important;
}
.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) !important;
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) !important;
}
.blk-sv-text {
min-width: 0;
}
.blk-sv h3 {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 4px 10px;
margin: 0 !important;
font-family: var(--font-geist);
font-size: var(--text-heading-sm) !important;
font-weight: 600 !important;
line-height: 1.3 !important;
letter-spacing: -0.015em;
color: var(--ink) !important;
}
.blk-sv p {
margin: 2px 0 0 !important;
font-size: var(--text-small);
line-height: 1.45;
color: var(--mid) !important;
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 !important;
font-size: var(--text-body);
color: var(--mid) !important;
}
/* the screenshot, exactly as blink reads it, with the page's own marks laid on top */
.blk-shot {
margin: 0 !important;
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 !important;
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 !important;
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 !important;
}
.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) !important;
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) !important;
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 !important;
}
.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) !important;
font-variant-numeric: tabular-nums;
}
.blk-meter .k {
font-size: var(--text-small);
font-weight: 500;
color: var(--ink-soft) !important;
}
.blk-meter.empty {
box-shadow: none;
animation: none;
}
.blk-meter.empty .blk-ring b,
.blk-meter.empty .k {
color: var(--mid) !important;
}
.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 !important;
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 !important;
}
/* 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 !important;
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) !important;
}
.blk-cuax-cap em {
font-style: normal;
color: var(--mid) !important;
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) !important;
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) !important;
font-variant-numeric: tabular-nums;
}
/* the scenarios: a poster each, its name, and every run it had */
.blk-cuax-gl {
margin-top: 0 !important;
}
.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 !important;
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 !important;
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) !important;
}
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) !important;
-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) !important;
font-variant-numeric: tabular-nums;
}
.blk-cuax-rate > span:last-child {
color: inherit !important;
white-space: nowrap;
}
.blk-cuax-by {
padding: 0 4px;
font-size: var(--text-caption);
color: var(--mid) !important;
}
/* 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 !important;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: var(--text-title) !important;
font-weight: 600 !important;
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) !important;
font-size: var(--text-caption);
font-weight: 500;
line-height: 24px;
}
.blk-cuax-task {
margin: 0 !important;
font-size: var(--text-body);
line-height: 1.5;
color: var(--ink-soft) !important;
}
.blk-cuax-task span {
display: inline-block;
margin-right: 8px;
padding: 0 7px;
border-radius: var(--radius-xs);
background: var(--sunken);
color: var(--mid) !important;
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 !important;
object-fit: contain;
border-radius: 0;
}
.blk-cuax-vid.wait img {
display: block;
width: 100%;
height: 100%;
margin: 0 !important;
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) !important;
}
.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 !important;
}
.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 !important;
font-size: var(--text-small);
color: var(--mid) !important;
}
.blk-cuax-stepn b {
font-weight: 600;
color: var(--ink) !important;
}
.blk-cuax-stepn span {
color: var(--mid) !important;
font-variant-numeric: tabular-nums;
}
.blk-cuax-miss {
margin: -4px 0 0 !important;
font-size: var(--text-small);
color: var(--mid) !important;
}
.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 !important;
font-size: var(--text-small);
color: var(--mid) !important;
}
.blk-cuax-outcome span {
padding: 3px 12px;
border-radius: var(--radius-round);
background: var(--flash);
color: var(--color-flash-ink) !important;
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) !important;
}
.blk-cuax-outcome em {
font-style: normal;
color: var(--mid) !important;
}
.blk-cuax-facts {
display: flex;
flex-wrap: wrap;
gap: 4px 0;
margin: 0 !important;
font-size: var(--text-small);
color: var(--ink-soft) !important;
}
.blk-cuax-facts span {
color: inherit !important;
}
.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) !important;
}
.blk-cuax-runs b {
font-weight: 600;
color: var(--ink) !important;
font-variant-numeric: tabular-nums;
}
.blk-cuax-runs span {
color: var(--mid) !important;
}
.blk-cuax-acc {
margin: -4px 0 0 !important;
font-size: var(--text-small);
color: var(--mid) !important;
}
.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 !important;
padding: 0 !important;
list-style: none !important;
}
.blk-cuax-cmp li {
margin: 0 !important;
}
.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 !important;
}
.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 !important;
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 !important;
padding: 3px 2px !important;
overflow-x: auto;
list-style: none !important;
scrollbar-width: none;
}
ol.blk-cuax-rail::-webkit-scrollbar {
display: none;
}
.blk-cuax-rail li {
flex: none;
margin: 0 !important;
}
.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 !important;
}
.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 !important;
padding: 0 !important;
list-style: none !important;
}
.blk-cx-flow > li {
position: relative;
display: flex;
flex-direction: column;
gap: 3px;
margin: 0 !important;
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) !important;
}
.blk-cx-flow > li > .blk-cx-cap {
color: var(--mid) !important;
}
.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) !important;
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) !important;
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 !important;
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 !important;
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) !important;
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 !important;
padding: 0 !important;
list-style: none !important;
}
.blk-cx-bars li {
display: grid;
grid-template-columns: 44px minmax(0, 1fr) 32px;
align-items: center;
gap: 5px;
margin: 0 !important;
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) !important;
}
.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) !important;
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) !important;
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) !important;
font: inherit;
font-weight: 500;
text-decoration: underline;
text-underline-offset: 3px;
cursor: pointer;
}
.blk-cuax-howbtn:hover {
color: var(--color-blink-hover) !important;
}
.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 !important;
}
.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 !important;
}
p.blk-eyebrow.blk-cxp-row {
margin: 20px 0 0 !important;
}
.blk-cx ol.blk-cx-flow.blk-cx-four {
grid-template-columns: repeat(4, minmax(0, 1fr));
margin-top: 10px !important;
}
/* 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 !important;
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) !important;
}
.blk-cxp-req i {
font-style: normal;
color: var(--blink-ink) !important;
}
.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) !important;
}
/* 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 !important;
}
.blk-cxp-src ul {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 10px 24px;
margin: 0 !important;
padding: 0 !important;
list-style: none !important;
}
.blk-cxp-src li {
display: flex;
flex-direction: column;
gap: 2px;
margin: 0 !important;
font-size: var(--text-small);
line-height: 1.45;
}
.blk-cxp-src li b {
font-weight: 600;
color: var(--ink) !important;
}
.blk-cxp-src li span {
color: var(--mid) !important;
}
.blk-cxp-none {
display: flex;
align-items: center;
gap: 10px;
margin: 12px 0 0 !important;
padding-top: 12px;
border-top: 1px solid var(--line);
font-size: var(--text-small);
font-weight: 600;
color: var(--ink) !important;
}
.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 !important;
font-size: var(--text-caption);
line-height: 1.5;
color: var(--mid) !important;
}
.blk-cxp-folds {
margin: 16px 0 0;
}
.blk-cxp-folds details.blk-d > .blk-pre {
max-height: 440px;
margin-bottom: 12px !important;
}
.blk-cxp-folds details.blk-d > .blk-tablewrap {
margin-bottom: 12px !important;
}
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) !important;
cursor: pointer;
}
details.blk-cuax-got > summary:hover {
color: var(--ink) !important;
}
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 !important;
font-size: var(--text-small);
line-height: 1.45;
}
.blk-cuax-got dt {
margin: 0 !important;
font-weight: 600;
color: var(--ink-soft) !important;
}
.blk-cuax-got dd {
min-width: 0;
margin: 0 !important;
color: var(--ink-soft) !important;
}
.blk-cuax-got dd ol {
display: grid;
gap: 4px;
margin: 0 !important;
padding: 0 !important;
list-style: none !important;
}
.blk-cuax-got dd li {
margin: 0 !important;
overflow-wrap: anywhere;
color: var(--ink-soft) !important;
}
.blk-cuax-got dd li.more {
color: var(--faint) !important;
}
.blk-cuax-got dd li .opts {
display: block;
margin-top: 2px;
font-size: var(--text-caption);
color: var(--mid) !important;
}
.blk-cuax-got dd li .opts b {
font-weight: 600;
color: var(--ink) !important;
}
.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) !important;
}
p.blk-cuax-gotn {
margin: 0 12px 8px !important;
font-size: var(--text-caption);
line-height: 1.5;
color: var(--mid) !important;
}
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) !important;
text-decoration: underline;
text-underline-offset: 3px;
cursor: pointer;
}
details.blk-cuax-json .blk-pre {
max-height: 360px;
margin: 8px 0 4px !important;
font-size: var(--text-caption);
}
details.blk-cuax-json > p.blk-cuax-gotn {
margin: 8px 0 0 !important;
}
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 !important;
}
.blk-cuax-try h3 {
margin: 0 !important;
font-size: var(--text-heading-sm) !important;
font-weight: 600 !important;
line-height: 1.3 !important;
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 !important;
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) !important;
}
.blk-cuax-metric {
display: flex;
align-items: baseline;
gap: 6px;
padding: 0 4px;
font-size: var(--text-small);
color: var(--mid) !important;
}
.blk-cuax-metric strong {
font-size: var(--text-title);
font-weight: 600;
letter-spacing: -0.01em;
color: var(--ink) !important;
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 !important;
font-size: var(--text-title) !important;
font-weight: 600 !important;
color: var(--ink);
}
.blk-cuax-pane .blk-note {
margin: -6px 0 0 !important;
}
.blk-cuax-pane video,
.blk-cuax-pane .blk-cuax-chart {
display: block;
width: 100%;
max-height: 70vh;
margin: 0 !important;
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 !important;
border-radius: var(--radius-control);
box-shadow: 0 0 0 1px var(--line);
}
.blk-cuax-sound {
margin: -4px 0 0 !important;
font-size: var(--text-small);
color: var(--mid) !important;
}
/* --- 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) !important;
}
.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 !important;
padding: 0 !important;
list-style: none !important;
}
.blk-row {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
align-items: baseline;
gap: 6px 14px;
margin: 0 !important;
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) !important;
}
.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) !important;
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) !important;
font-variant-numeric: tabular-nums;
}
.blk-row .blk-axvals i {
margin-right: 6px;
font-style: normal;
color: var(--mid) !important;
}
.blk-row.quiet {
border-style: dashed;
border-color: var(--line-strong);
background: transparent;
}
.blk-row.quiet b,
.blk-row.quiet strong {
color: var(--mid) !important;
}
/* 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 !important;
max-width: 600px;
margin-bottom: 12px !important;
}
.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) !important;
}
.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 !important;
font-size: var(--text-body);
font-weight: 600;
line-height: 1.43;
color: var(--ink) !important;
}
.blk-group-s {
min-height: 3em;
margin: 4px 0 8px !important;
font-size: var(--text-small);
line-height: 1.5;
color: var(--mid) !important;
}
.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 !important;
font-size: var(--text-small);
}
table.blk-table {
width: 100%;
margin: 0 !important;
border: 0 !important;
border-collapse: collapse;
font-size: var(--text-small);
font-variant-numeric: tabular-nums;
}
table.blk-table tr {
border: 0 !important;
}
table.blk-table th,
table.blk-table td {
padding: 9px 14px;
border: 0 !important;
border-bottom: 1px solid var(--line) !important;
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) !important;
}
table.blk-table td {
color: var(--ink-soft) !important;
}
table.blk-table tbody tr:last-child td,
table.blk-table tbody tr:last-child th {
border-bottom: 0 !important;
}
/* blink's own rows wear its tint */
table.blk-table tr.on td {
background: var(--blink-tint);
color: var(--ink) !important;
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 !important;
border: 1px solid var(--line) !important;
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 !important;
}
.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) !important;
}
table.blk-nums th,
table.blk-nums td {
padding: 8px 12px;
border: 0 !important;
border-bottom: 1px solid var(--line) !important;
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 !important;
}
table.blk-nums thead th {
background: var(--alt);
font-size: var(--text-caption);
font-weight: 600;
color: var(--mid) !important;
}
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) !important;
}
table.blk-nums tbody td {
color: var(--ink-soft) !important;
}
/* 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 !important;
}
table.blk-nums tr.on th,
table.blk-nums tr.on td {
background: var(--blink-tint);
}
.blk-narrowhead {
margin: 4px 0 8px !important;
}
ul.blk-arealist {
margin: 0 0 16px !important;
padding: 0 !important;
list-style: none !important;
border: 1px solid var(--line);
border-radius: 10px;
overflow: hidden;
}
.blk-arealist li {
display: flex;
flex-wrap: wrap;
gap: 2px 12px;
margin: 0 !important;
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) !important;
}
.blk-arealist span {
white-space: nowrap;
color: var(--mid) !important;
}
.blk-arealist i {
font-style: normal;
font-weight: 600;
color: var(--ink-soft) !important;
font-variant-numeric: tabular-nums;
}
ol.blk-steplist {
display: grid;
gap: 8px;
margin: 0 0 12px !important;
padding: 0 !important;
list-style: none !important;
counter-reset: blk-pipe;
}
.blk-steplist li {
display: grid;
grid-template-columns: 24px minmax(0, 1fr);
gap: 2px 12px;
margin: 0 !important;
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) !important;
}
.blk-steplist span {
font-size: var(--text-small);
color: var(--mid) !important;
}
/* 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 !important;
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 !important;
padding: 0 !important;
list-style: none !important;
}
.blk-vpipe li {
position: relative;
display: flex;
flex-direction: column;
gap: 4px;
margin: 0 !important;
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) !important;
}
.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) !important;
}
.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 !important;
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) !important;
}
.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) !important;
font-variant-numeric: tabular-nums;
overflow-wrap: anywhere;
}
.blk-vsec > .blk-vp-fact {
font-family: var(--font-geist-mono);
color: var(--mid) !important;
}
.blk-good {
margin-top: 18px !important;
}
.blk-goodlist {
margin: 6px 0 8px !important;
padding-left: 18px !important;
list-style: disc !important;
font-size: var(--text-body);
line-height: 1.6;
}
.blk-goodlist li {
margin: 0 0 2px !important;
color: var(--ink-soft) !important;
}
/* --- 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) !important;
}
/* 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 !important;
border: 0 !important;
}
.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) !important;
white-space: nowrap;
}
.blk-apifig table.blk-apitable td > span {
color: var(--ink-soft) !important;
}
/* 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 !important;
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 !important;
font-size: var(--text-caption);
line-height: 1.5;
color: var(--mid) !important;
}
.blk-apilegend span {
display: inline-flex;
align-items: center;
color: var(--mid) !important;
}
.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) !important;
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 !important;
padding: 0 !important;
list-style: none !important;
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 !important;
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) !important;
}
.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 !important;
}
.blk-apilabel {
margin: 16px 0 6px !important;
font-size: var(--text-caption);
font-weight: 600;
line-height: 1.33;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--mid) !important;
}
.blk-api details.blk-d ul {
max-width: 720px;
margin-bottom: 12px !important;
padding-left: 18px !important;
}
.blk-api details.blk-d li {
margin: 0 0 6px !important;
font-size: var(--text-body);
line-height: 1.6;
color: var(--ink-soft) !important;
}
.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 !important;
}
/* --- 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)) !important;
}
.blk-cx-flow > li:nth-child(3n + 1)::before,
.blk-vpipe li:nth-child(3n + 1)::before {
display: none !important;
}
/* 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)) !important;
}
.blk-cx-flow.blk-cxp-model > li:nth-child(2n)::before {
display: block !important;
}
.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 !important;
}
.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 !important;
gap: 24px !important;
}
.row:has(> .blk-side) > .column,
.row.doc-workspace > .column {
width: 100% !important;
min-width: 0 !important;
}
.row.blk-play button.blk-decide {
align-self: stretch;
width: 100% !important;
}
.row.blk-cua {
flex-direction: column !important;
}
.row.blk-cua > .column {
width: 100% !important;
}
/* 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 !important;
gap: 4px 12px !important;
}
.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) !important;
grid-template-areas: "screen" "nav" "side" !important;
grid-template-rows: auto !important;
}
.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 !important;
}
}
/* 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 !important;
font-size: 13px !important;
}
#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 !important;
}
#blink-explore > .tab-wrapper > .tab-container > button,
#blink-cases > .tab-wrapper > .tab-container > button {
padding: 0 6px !important;
}
.blk-top h1 {
font-size: 24px !important;
}
.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 !important;
font-size: 12px !important;
white-space: normal !important;
}
.blk-table th:first-child,
.blk-table td:first-child {
padding-left: 8px !important;
}
.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 !important;
white-space: normal !important;
}
.blk-nums thead th {
font-size: 12px !important;
}
.blk-nums tbody th {
font-size: 13px !important;
overflow-wrap: anywhere;
}
/* a measurement never breaks across lines */
.blk-nums tbody td {
font-size: 12px !important;
white-space: nowrap !important;
}
/* 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 !important;
align-items: stretch !important;
}
.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 !important;
overflow-y: auto !important;
}
.home-intro h2 {
font-size: 30px !important;
}
.blk-home-lede {
font-size: 16px !important;
}
.row.blk-cards {
margin: 20px 0 28px !important;
}
.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 !important;
border: 0 !important;
border-radius: 2px !important;
background: var(--blink) !important;
}
.doc-timeline li:nth-child(even) {
background: var(--blink-light) !important;
}
.doc-timeline li.flag {
background: var(--color-review) !important;
}
.doc-timeline b,
.doc-timeline span {
display: none !important;
}
.doc-result-head {
padding: 16px 16px 14px;
}
.doc-timeline {
margin: 0 16px 16px !important;
}
.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 !important;
}
.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 !important;
padding-right: 16px !important;
}
#doc-outputs > .gr-accordion > button.label-wrap {
padding-left: 16px !important;
}
#doc-outputs > .gr-accordion > [data-testid="accordion-content"] {
padding: 0 16px 16px !important;
}
.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 !important;
}
.blk-cuax-stats span:nth-child(odd) {
padding-left: 0 !important;
border-left: 0 !important;
}
.blk-cuax-stats b {
font-size: 22px !important;
}
.blk-cuax-cards,
.blk-cuax-tiles {
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
gap: 10px !important;
}
.blk-cuax-player {
padding: 12px !important;
}
.blk-cuax-bar {
flex-wrap: wrap;
}
.blk-cuax-name {
order: 3;
flex-basis: 100%;
}
.blk-cuax-nav {
flex-direction: column;
align-items: stretch !important;
}
.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 !important;
}
.blk-cx .blk-cx-flow,
.blk-vsec ol.blk-vpipe {
grid-template-columns: minmax(0, 1fr) !important;
gap: 10px !important;
}
.blk-cx-flow > li {
display: grid !important;
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 !important;
}
.blk-cx-flow > li + li::before,
.blk-vpipe li + li::before {
display: block !important;
left: 28px !important;
top: -11px !important;
width: 2px !important;
height: 10px !important;
}
.blk-cx-shot,
.blk-cx-grid {
height: 64px !important;
}
/* 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) !important;
}
.blk-cx-flow.blk-cxp-model > li:nth-child(n + 2)::before {
display: block !important;
}
.blk-cx-flow.blk-cxp-big > li {
display: flex !important;
flex-direction: column;
align-items: stretch !important;
}
.blk-cx-flow.blk-cxp-big > li > .blk-cx-art {
width: 100%;
min-width: 0;
height: auto !important;
margin-top: 12px;
}
.blk-cx-flow.blk-cxp-big > li > b {
margin-top: 8px !important;
}
.blk-cxp-big > li + li > .blk-cx-art::before {
display: none !important;
}
.blk-cxp-src ul {
grid-template-columns: minmax(0, 1fr) !important;
}
/* 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) !important;
}
.blk-apifig table.blk-apitable tr:last-child {
border-bottom: 0 !important;
}
.blk-apifig table.blk-apitable th,
.blk-apifig table.blk-apitable td {
display: grid !important;
grid-template-columns: 92px minmax(0, 1fr);
align-items: baseline;
gap: 8px;
min-width: 0 !important;
padding: 3px 0 !important;
border: 0 !important;
}
.blk-apifig table.blk-apitable tbody th {
display: block !important;
padding: 0 0 4px !important;
}
.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 !important;
animation-delay: 0ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.001ms !important;
scroll-behavior: auto !important;
}
.blk-cx.arm:not(.on) .blk-cx-flow > li {
opacity: 1;
}
}