Files
pbakaus_impeccable/public/css/docs-visuals.css
T
Paul BakausandClaude Opus 4.7 3ffc485a8d refine(site): "The Case" crossfade + content cleanup, pattern-tabs scroll
- why-panel tab swap is a proper opacity+transform crossfade (display:grid
  stack area) instead of display:none jump; 650/800ms ease-out.
- tab progress indicator animates linearly (timer, not eased).
- Panel 01: dropped redundant "Every command reads this…" footer; moved the
  commands meta into the visual as a right-side sidebar aside PRODUCT.md.
- Panel 02: "Browse the full catalog →" moved under the Gallery of Shame;
  pattern category tabs are now always a single-row horizontal scroll with
  JS-tracked edge-fade mask and chevron affordances; click centers the
  selected tab inside the strip (never scrolls the page).
- Panel 04: "register" → "mode" in body, labels, meta for plain-language.
- Panel 05: removed redundant "Works in Claude Code…" meta.
- Panel 06: removed "Spec-compliant. Interoperable. Not a proprietary
  sidecar." meta.
- .language-content grid gap reduced from --spacing-lg to --spacing-sm so
  the commands palette sits closer to the section lead.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 18:47:33 -07:00

1626 lines
33 KiB
CSS

/*
* impeccable.style — docs visual components.
*
* Static mocks that illustrate what each command/tutorial is talking about:
* Live Mode frames, PRODUCT/DESIGN file renderings, register side-by-sides,
* step artifacts, flow diagrams, and audit/critique report mocks.
*
* These are deliberately non-interactive. Docs readers should be able to
* scan them at their own pace, not chase animations.
*
* Namespaced with `.docs-viz-` to stay clear of the homepage's .why-*,
* .live-demo-*, and .platforms-* classes.
*/
/* ============================================
GENERIC HERO VISUAL WRAPPER
============================================ */
.docs-viz-hero {
margin: 0 0 clamp(1.5rem, 3vw, 2.25rem);
padding: clamp(1rem, 2vw, 1.5rem);
background: var(--color-cream);
border: 1px solid var(--color-mist);
border-radius: 10px;
}
.docs-viz-hero--plain {
background: transparent;
border: 0;
padding: 0;
}
.docs-viz-caption {
margin: 10px 0 0;
font-family: var(--font-body);
font-size: 0.8125rem;
color: var(--color-ash);
line-height: 1.5;
}
.docs-viz-eyebrow {
display: inline-block;
font-family: var(--font-body);
font-size: 0.6875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.12em;
color: var(--color-accent);
margin-bottom: var(--spacing-sm);
}
/* ============================================
LIVE MODE — static browser frame
Shows the picker overlay in "cycling" state: outline on target,
context bar with 2/3 counter, global bar pinned to the bottom.
Dimensionally this mirrors the homepage .live-demo-frame but
paused and stripped to the informative state.
============================================ */
.docs-viz-live-frame {
position: relative;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 8px;
overflow: hidden;
box-shadow: 0 12px 32px oklch(0% 0 0 / 0.06);
font-family: var(--font-body);
}
.docs-viz-live-chrome {
display: flex;
align-items: center;
gap: 6px;
padding: 9px 12px;
border-bottom: 1px solid var(--color-mist);
background: var(--color-cream);
}
.docs-viz-live-dot {
width: 9px;
height: 9px;
border-radius: 50%;
background: var(--color-mist);
}
.docs-viz-live-url {
margin-left: 10px;
padding: 3px 10px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 4px;
font-family: var(--font-mono);
font-size: 10px;
color: var(--color-charcoal);
}
.docs-viz-live-stage {
position: relative;
min-height: 260px;
padding: 36px 28px 68px;
background: var(--color-paper);
display: flex;
align-items: center;
justify-content: center;
}
.docs-viz-live-stage--tall {
min-height: 340px;
}
.docs-viz-live-target {
position: relative;
width: min(320px, 78%);
padding: 18px 20px;
background: var(--color-cream);
border: 1px dashed var(--color-accent);
border-radius: 6px;
display: flex;
flex-direction: column;
gap: 8px;
}
.docs-viz-live-kicker {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--color-accent);
}
.docs-viz-live-title {
font-family: var(--font-display);
font-style: italic;
font-weight: 400;
font-size: 18px;
line-height: 1.2;
color: var(--color-ink);
margin: 0;
}
.docs-viz-live-title em {
color: var(--color-accent);
font-style: italic;
}
.docs-viz-live-body {
font-family: var(--font-body);
font-size: 12px;
line-height: 1.5;
color: var(--color-charcoal);
margin: 0;
}
.docs-viz-live-btn {
align-self: flex-start;
margin-top: 4px;
padding: 7px 14px;
background: var(--color-accent);
color: var(--color-paper);
font-family: var(--font-body);
font-size: 11px;
font-weight: 600;
letter-spacing: 0.04em;
text-transform: uppercase;
border: 0;
border-radius: 4px;
}
/* Picker outline — sits around the target */
.docs-viz-live-outline {
position: absolute;
inset: 28px 24px 60px;
border: 2px solid var(--color-accent);
border-radius: 8px;
box-shadow: 0 0 0 4px var(--color-accent-dim);
pointer-events: none;
}
/* Context bar floating near the target */
.docs-viz-live-ctx {
position: absolute;
left: 50%;
top: 30px;
transform: translateX(-50%);
display: inline-flex;
align-items: center;
gap: 6px;
padding: 5px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 8px;
box-shadow: 0 4px 20px oklch(0% 0 0 / 0.08);
font-family: var(--font-body);
font-size: 11px;
color: var(--color-ink);
white-space: nowrap;
z-index: 2;
}
.docs-viz-live-ctx-nav {
padding: 2px 8px;
background: transparent;
border: 0;
color: var(--color-ash);
font-size: 13px;
line-height: 1;
}
.docs-viz-live-ctx-counter {
font-family: var(--font-mono);
font-size: 10px;
color: var(--color-ink);
padding: 0 4px;
min-width: 30px;
text-align: center;
}
.docs-viz-live-ctx-divider {
width: 1px;
height: 14px;
background: var(--color-mist);
margin: 0 2px;
}
.docs-viz-live-ctx-accept {
padding: 4px 10px;
background: var(--color-ink);
color: var(--color-paper);
border: 0;
border-radius: 4px;
font-size: 11px;
font-weight: 600;
}
/* Global bar pinned to bottom */
.docs-viz-live-gbar {
position: absolute;
bottom: 12px;
left: 50%;
transform: translateX(-50%);
display: inline-flex;
align-items: center;
gap: 4px;
padding: 0 4px;
min-height: 30px;
background: oklch(14% 0 0);
color: oklch(92% 0 0);
border: 1px solid oklch(22% 0 0);
border-radius: 8px;
font-family: var(--font-body);
font-size: 11px;
box-shadow: 0 6px 20px oklch(0% 0 0 / 0.2);
}
.docs-viz-live-gbar-brand {
font-family: var(--font-display);
font-size: 14px;
color: var(--color-accent);
padding: 0 8px;
font-style: italic;
}
.docs-viz-live-gbar-btn {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 5px 8px;
background: transparent;
color: oklch(75% 0 0);
font: inherit;
border: 0;
border-radius: 5px;
}
.docs-viz-live-gbar-btn.is-active {
background: var(--color-accent-dim);
color: var(--color-accent);
}
.docs-viz-live-gbar-divider {
width: 1px;
height: 14px;
background: oklch(28% 0 0);
margin: 0 2px;
}
.docs-viz-live-gbar-x {
padding: 5px 8px;
color: oklch(60% 0 0);
font-size: 12px;
}
/* Step-size (smaller) variant used inline in tutorials */
.docs-viz-live-frame--step {
max-width: 520px;
margin: 0 auto;
}
.docs-viz-live-frame--step .docs-viz-live-stage {
min-height: 200px;
padding: 28px 22px 56px;
}
.docs-viz-live-frame--step .docs-viz-live-outline {
inset: 22px 20px 50px;
}
/* ============================================
PRODUCT.md and DESIGN.md file mocks
Single file-style card with a chrome row, fields, and a footer
that identifies what loads it. Shared .docs-viz-file for the
chrome; .docs-viz-productmd / .docs-viz-designmd for per-file content.
============================================ */
.docs-viz-file {
display: flex;
flex-direction: column;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 8px;
overflow: hidden;
font-family: var(--font-body);
}
.docs-viz-file-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 9px 14px;
background: var(--color-cream);
border-bottom: 1px solid var(--color-mist);
}
.docs-viz-file-name {
font-family: var(--font-mono);
font-size: 11px;
font-weight: 500;
color: var(--color-ink);
}
.docs-viz-file-status {
font-family: var(--font-mono);
font-size: 9px;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--color-accent);
}
.docs-viz-file-body {
padding: 4px 14px;
}
.docs-viz-file-row {
display: grid;
grid-template-columns: 108px 1fr;
gap: 14px;
align-items: baseline;
padding: 9px 0;
border-bottom: 1px dashed var(--color-mist);
}
.docs-viz-file-row:last-child {
border-bottom: 0;
}
.docs-viz-file-k {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--color-ash);
}
.docs-viz-file-v {
font-family: var(--font-body);
font-size: 13px;
line-height: 1.5;
color: var(--color-ink);
}
.docs-viz-file-footer {
padding: 10px 14px;
background: var(--color-cream);
border-top: 1px solid var(--color-mist);
font-family: var(--font-display);
font-style: italic;
font-size: 12px;
line-height: 1.4;
color: var(--color-charcoal);
}
/* DESIGN.md specific rows — six numbered sections, richer inline specimens */
.docs-viz-designmd-section {
padding: 12px 14px;
border-bottom: 1px dashed var(--color-mist);
}
.docs-viz-designmd-section:last-child {
border-bottom: 0;
}
.docs-viz-designmd-head {
display: flex;
align-items: baseline;
gap: 8px;
margin-bottom: 6px;
}
.docs-viz-designmd-num {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 600;
color: var(--color-ash);
letter-spacing: 0.05em;
}
.docs-viz-designmd-title {
font-family: var(--font-body);
font-size: 12px;
font-weight: 600;
color: var(--color-ink);
text-transform: uppercase;
letter-spacing: 0.1em;
}
.docs-viz-designmd-note {
font-family: var(--font-display);
font-style: italic;
font-size: 12px;
color: var(--color-charcoal);
line-height: 1.45;
margin: 0;
}
.docs-viz-designmd-swatches {
display: flex;
gap: 6px;
margin-top: 4px;
}
.docs-viz-designmd-swatch {
width: 22px;
height: 22px;
border-radius: 4px;
border: 1px solid oklch(0% 0 0 / 0.06);
}
.docs-viz-designmd-type {
display: flex;
align-items: baseline;
gap: 10px;
margin-top: 4px;
}
.docs-viz-designmd-type-display {
font-family: var(--font-display);
font-style: italic;
font-size: 26px;
line-height: 1;
color: var(--color-ink);
}
.docs-viz-designmd-type-body {
font-family: var(--font-body);
font-size: 13px;
color: var(--color-charcoal);
}
.docs-viz-designmd-comps {
display: flex;
gap: 8px;
margin-top: 4px;
align-items: center;
}
.docs-viz-designmd-btn {
padding: 5px 12px;
background: var(--color-ink);
color: var(--color-paper);
font-family: var(--font-body);
font-size: 10px;
font-weight: 600;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.docs-viz-designmd-chip {
padding: 3px 8px;
background: var(--color-accent-dim);
color: var(--color-accent);
font-family: var(--font-mono);
font-size: 10px;
border-radius: 11px;
}
.docs-viz-designmd-card {
padding: 6px 10px;
background: var(--color-cream);
border: 1px solid var(--color-mist);
border-radius: 4px;
font-family: var(--font-body);
font-size: 10px;
color: var(--color-ink);
}
.docs-viz-designmd-rules {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4px 14px;
margin-top: 4px;
}
.docs-viz-designmd-do,
.docs-viz-designmd-dont {
display: flex;
align-items: baseline;
gap: 6px;
font-family: var(--font-body);
font-size: 11px;
line-height: 1.4;
color: var(--color-ink);
}
.docs-viz-designmd-do::before {
content: "DO";
font-family: var(--font-mono);
font-size: 9px;
font-weight: 700;
letter-spacing: 0.1em;
color: oklch(45% 0.18 145);
flex-shrink: 0;
}
.docs-viz-designmd-dont::before {
content: "DON'T";
font-family: var(--font-mono);
font-size: 9px;
font-weight: 700;
letter-spacing: 0.1em;
color: oklch(55% 0.22 25);
flex-shrink: 0;
}
/* ============================================
REGISTER SIDE-BY-SIDE
Two faux browser frames showing the same element rendered in
brand vs product register. Each frame is self-contained and
styled per the lane's conventions.
============================================ */
.docs-viz-register {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 14px;
}
@media (max-width: 620px) {
.docs-viz-register {
grid-template-columns: 1fr;
}
}
.docs-viz-register-side {
display: flex;
flex-direction: column;
gap: 10px;
}
.docs-viz-register-label {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 8px;
padding: 0 2px;
}
.docs-viz-register-name {
font-family: var(--font-display);
font-style: italic;
font-size: 18px;
color: var(--color-ink);
}
.docs-viz-register-lane {
font-family: var(--font-mono);
font-size: 9px;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--color-ash);
}
.docs-viz-register-frame {
position: relative;
padding: 22px 20px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 6px;
min-height: 200px;
display: flex;
flex-direction: column;
justify-content: center;
}
/* BRAND variant — editorial-magazine, serif display, drenched accent */
.docs-viz-register-frame--brand {
background: oklch(96% 0.02 30);
border-color: oklch(80% 0.08 30);
padding: 28px 22px;
}
.docs-viz-register-frame--brand .docs-viz-reg-kicker {
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.2em;
text-transform: uppercase;
color: oklch(40% 0.12 30);
margin-bottom: 8px;
}
.docs-viz-register-frame--brand .docs-viz-reg-title {
font-family: var(--font-display);
font-style: italic;
font-weight: 400;
font-size: 28px;
line-height: 1;
color: oklch(20% 0.1 30);
margin: 0 0 10px 0;
}
.docs-viz-register-frame--brand .docs-viz-reg-body {
font-family: var(--font-display);
font-style: italic;
font-size: 13px;
line-height: 1.5;
color: oklch(35% 0.04 30);
margin: 0 0 14px 0;
max-width: 26ch;
}
.docs-viz-register-frame--brand .docs-viz-reg-btn {
align-self: flex-start;
padding: 8px 18px;
background: oklch(20% 0.1 30);
color: oklch(96% 0.02 30);
font-family: var(--font-mono);
font-size: 10px;
font-weight: 500;
letter-spacing: 0.14em;
text-transform: uppercase;
}
/* PRODUCT variant — neutral sans, restrained, utility-shaped */
.docs-viz-register-frame--product {
background: var(--color-paper);
border-color: var(--color-mist);
}
.docs-viz-register-frame--product .docs-viz-reg-kicker {
font-family: var(--font-body);
font-size: 11px;
font-weight: 600;
color: var(--color-ash);
margin-bottom: 6px;
}
.docs-viz-register-frame--product .docs-viz-reg-title {
font-family: var(--font-body);
font-weight: 600;
font-size: 17px;
line-height: 1.3;
color: var(--color-ink);
margin: 0 0 6px 0;
}
.docs-viz-register-frame--product .docs-viz-reg-body {
font-family: var(--font-body);
font-size: 13px;
line-height: 1.5;
color: var(--color-charcoal);
margin: 0 0 14px 0;
max-width: 32ch;
}
.docs-viz-register-frame--product .docs-viz-reg-btn {
align-self: flex-start;
padding: 7px 14px;
background: var(--color-ink);
color: var(--color-paper);
font-family: var(--font-body);
font-size: 12px;
font-weight: 500;
border-radius: 4px;
}
.docs-viz-register-notes {
display: flex;
flex-direction: column;
gap: 4px;
padding: 0 4px;
font-family: var(--font-body);
font-size: 11px;
color: var(--color-charcoal);
line-height: 1.5;
}
.docs-viz-register-notes span::before {
content: "· ";
color: var(--color-ash);
}
/* ============================================
FLOW DIAGRAMS
Horizontal step strip — boxes separated by arrows. Used on
command pages where the value is a multi-phase workflow
(craft, shape, extract).
============================================ */
.docs-viz-flow {
display: flex;
align-items: stretch;
gap: 0;
flex-wrap: wrap;
}
.docs-viz-flow-step {
flex: 1;
min-width: 130px;
display: flex;
flex-direction: column;
gap: 4px;
padding: 12px 14px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 6px;
position: relative;
}
.docs-viz-flow-step + .docs-viz-flow-step {
margin-left: 14px;
}
@media (max-width: 620px) {
.docs-viz-flow-step + .docs-viz-flow-step {
margin-left: 0;
margin-top: 14px;
}
}
.docs-viz-flow-step + .docs-viz-flow-step::before {
content: "→";
position: absolute;
left: -14px;
top: 50%;
transform: translate(-50%, -50%);
width: 14px;
text-align: center;
font-family: var(--font-body);
font-size: 14px;
color: var(--color-accent);
line-height: 1;
}
@media (max-width: 620px) {
.docs-viz-flow-step + .docs-viz-flow-step::before {
top: -14px;
left: 50%;
content: "↓";
}
}
.docs-viz-flow-num {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.1em;
color: var(--color-ash);
}
.docs-viz-flow-name {
font-family: var(--font-body);
font-size: 13px;
font-weight: 600;
color: var(--color-ink);
line-height: 1.3;
}
.docs-viz-flow-hint {
font-family: var(--font-body);
font-size: 11px;
color: var(--color-charcoal);
line-height: 1.4;
}
.docs-viz-flow-step--accent {
background: var(--color-accent-dim);
border-color: var(--color-accent-soft);
}
.docs-viz-flow-step--accent .docs-viz-flow-name {
color: var(--color-accent);
}
/* ============================================
AUDIT REPORT MOCK
============================================ */
.docs-viz-report {
padding: 20px 22px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 8px;
font-family: var(--font-body);
display: flex;
flex-direction: column;
gap: 16px;
}
.docs-viz-report-head {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 16px;
border-bottom: 1px solid var(--color-mist);
padding-bottom: 12px;
}
.docs-viz-report-title {
font-family: var(--font-body);
font-size: 13px;
font-weight: 600;
color: var(--color-ink);
}
.docs-viz-report-target {
font-family: var(--font-mono);
font-size: 11px;
color: var(--color-charcoal);
}
.docs-viz-report-score {
display: flex;
align-items: baseline;
gap: 8px;
}
.docs-viz-report-score-num {
font-family: var(--font-display);
font-style: italic;
font-size: 36px;
line-height: 1;
color: var(--color-ink);
}
.docs-viz-report-score-out {
font-family: var(--font-mono);
font-size: 11px;
color: var(--color-ash);
}
.docs-viz-report-dims {
display: flex;
flex-direction: column;
gap: 9px;
}
.docs-viz-report-dim {
display: grid;
grid-template-columns: 110px 1fr 42px;
gap: 12px;
align-items: center;
font-family: var(--font-body);
font-size: 12px;
color: var(--color-ink);
}
.docs-viz-report-dim-name {
color: var(--color-charcoal);
}
.docs-viz-report-dim-bar {
height: 5px;
background: var(--color-mist);
border-radius: 3px;
overflow: hidden;
}
.docs-viz-report-dim-fill {
display: block;
height: 100%;
background: var(--color-accent);
border-radius: 3px;
}
.docs-viz-report-dim-fill--warn {
background: oklch(72% 0.15 70);
}
.docs-viz-report-dim-fill--fail {
background: oklch(60% 0.2 25);
}
.docs-viz-report-dim-score {
font-family: var(--font-mono);
font-size: 11px;
color: var(--color-ink);
text-align: right;
}
.docs-viz-report-issues {
display: flex;
gap: 8px;
padding-top: 12px;
border-top: 1px solid var(--color-mist);
}
.docs-viz-report-sev {
padding: 3px 10px;
font-family: var(--font-mono);
font-size: 10px;
font-weight: 700;
letter-spacing: 0.1em;
color: var(--color-paper);
border-radius: 3px;
}
.docs-viz-report-sev--p0 { background: oklch(50% 0.22 25); }
.docs-viz-report-sev--p1 { background: oklch(58% 0.18 45); }
.docs-viz-report-sev--p2 { background: oklch(70% 0.13 80); }
.docs-viz-report-sev--p3 { background: oklch(55% 0.06 260); }
.docs-viz-report-sev-n {
font-weight: 500;
margin-left: 4px;
opacity: 0.85;
}
/* ============================================
CRITIQUE REPORT MOCK
============================================ */
.docs-viz-critique {
padding: 20px 22px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 8px;
font-family: var(--font-body);
display: flex;
flex-direction: column;
gap: 18px;
}
.docs-viz-critique-head {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 16px;
}
.docs-viz-critique-verdict {
display: flex;
align-items: center;
gap: 10px;
}
.docs-viz-critique-verdict-label {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--color-ash);
}
.docs-viz-critique-verdict-value {
display: inline-flex;
align-items: center;
padding: 3px 10px;
background: oklch(60% 0.2 25);
color: var(--color-paper);
font-family: var(--font-mono);
font-size: 11px;
font-weight: 700;
letter-spacing: 0.1em;
border-radius: 3px;
}
.docs-viz-critique-verdict-value--pass {
background: oklch(52% 0.18 150);
}
.docs-viz-critique-cols {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
@media (max-width: 620px) {
.docs-viz-critique-cols {
grid-template-columns: 1fr;
}
}
.docs-viz-critique-col-title {
font-family: var(--font-body);
font-size: 11px;
font-weight: 600;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--color-ash);
margin-bottom: 8px;
}
.docs-viz-critique-personas {
display: flex;
flex-direction: column;
gap: 8px;
}
.docs-viz-critique-persona {
display: grid;
grid-template-columns: 1fr auto;
gap: 10px;
align-items: baseline;
padding: 8px 10px;
background: var(--color-cream);
border: 1px solid var(--color-mist);
border-radius: 5px;
}
.docs-viz-critique-persona-name {
font-family: var(--font-body);
font-size: 12px;
font-weight: 600;
color: var(--color-ink);
}
.docs-viz-critique-persona-note {
display: block;
font-family: var(--font-body);
font-size: 11px;
color: var(--color-charcoal);
font-weight: 400;
margin-top: 1px;
line-height: 1.4;
}
.docs-viz-critique-persona-score {
font-family: var(--font-mono);
font-size: 11px;
color: var(--color-ink);
text-align: right;
}
.docs-viz-critique-heuristics {
display: flex;
flex-direction: column;
gap: 4px;
}
.docs-viz-critique-heur {
display: grid;
grid-template-columns: 1fr 28px;
gap: 10px;
font-family: var(--font-body);
font-size: 12px;
color: var(--color-ink);
padding: 4px 0;
border-bottom: 1px dashed var(--color-mist);
}
.docs-viz-critique-heur:last-child {
border-bottom: 0;
}
.docs-viz-critique-heur-score {
font-family: var(--font-mono);
font-size: 11px;
text-align: right;
}
.docs-viz-critique-heur-score--good { color: oklch(45% 0.18 150); }
.docs-viz-critique-heur-score--ok { color: oklch(55% 0.15 70); }
.docs-viz-critique-heur-score--bad { color: oklch(55% 0.22 25); }
/* ============================================
STEP ARTIFACTS — inline mocks in tutorials
============================================ */
.docs-viz-step {
margin: 14px 0 18px;
padding: 16px 18px;
background: var(--color-cream);
border: 1px solid var(--color-mist);
border-radius: 8px;
}
/* Picker-on-element strip */
.docs-viz-picker-row {
position: relative;
display: flex;
align-items: center;
justify-content: center;
padding: 20px 16px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 6px;
min-height: 110px;
}
.docs-viz-picker-target {
position: relative;
padding: 10px 16px;
border: 2px solid var(--color-accent);
border-radius: 6px;
box-shadow: 0 0 0 4px var(--color-accent-dim);
font-family: var(--font-display);
font-style: italic;
font-size: 15px;
color: var(--color-ink);
background: var(--color-cream);
}
.docs-viz-picker-pin {
position: absolute;
top: -10px;
right: -10px;
display: inline-flex;
align-items: center;
justify-content: center;
width: 22px;
height: 22px;
background: var(--color-accent);
color: var(--color-paper);
font-family: var(--font-mono);
font-size: 11px;
font-weight: 600;
border-radius: 50%;
box-shadow: 0 2px 6px oklch(0% 0 0 / 0.2);
}
.docs-viz-picker-note {
position: absolute;
right: -12px;
top: 24px;
transform: translateX(100%);
padding: 3px 8px;
background: var(--color-ink);
color: var(--color-paper);
font-family: var(--font-mono);
font-size: 10px;
border-radius: 3px;
white-space: nowrap;
}
@media (max-width: 520px) {
.docs-viz-picker-note { display: none; }
}
/* Three-up variants strip */
.docs-viz-variants {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
}
@media (max-width: 520px) {
.docs-viz-variants {
grid-template-columns: 1fr;
}
}
.docs-viz-variant {
position: relative;
padding: 12px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 6px;
min-height: 120px;
display: flex;
flex-direction: column;
gap: 6px;
}
.docs-viz-variant.is-active {
border-color: var(--color-accent);
box-shadow: 0 0 0 3px var(--color-accent-dim);
}
.docs-viz-variant-badge {
position: absolute;
top: 6px;
right: 6px;
padding: 1px 6px;
background: oklch(14% 0 0);
color: oklch(92% 0 0);
font-family: var(--font-mono);
font-size: 9px;
border-radius: 3px;
}
.docs-viz-variant-kicker {
font-family: var(--font-mono);
font-size: 9px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--color-ash);
}
.docs-viz-variant-title {
font-family: var(--font-display);
font-style: italic;
font-size: 14px;
line-height: 1.2;
color: var(--color-ink);
margin: 0;
}
.docs-viz-variant-btn {
align-self: flex-start;
margin-top: auto;
padding: 4px 8px;
font-family: var(--font-body);
font-size: 9px;
font-weight: 600;
letter-spacing: 0.05em;
text-transform: uppercase;
background: var(--color-ink);
color: var(--color-paper);
}
.docs-viz-variant--v1 { background: var(--color-cream); }
.docs-viz-variant--v2 .docs-viz-variant-btn { background: var(--color-accent); }
.docs-viz-variant--v3 { background: oklch(96% 0.02 350); }
/* Accept pill */
.docs-viz-accept-pill {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 7px 14px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 8px;
box-shadow: 0 4px 14px oklch(0% 0 0 / 0.06);
font-family: var(--font-body);
font-size: 12px;
color: oklch(45% 0.18 145);
}
.docs-viz-accept-pill::before {
content: "✓";
font-weight: 700;
}
/* ============================================
LIVE MODE LANDING PAGE (/live-mode)
Marketing-style landing that mirrors /visual-mode's structure.
Hosts the animated homepage live-demo and surfaces the tutorial,
reference, and install pathways.
============================================ */
.live-mode-page {
display: flex;
flex-direction: column;
gap: clamp(2.5rem, 5vw, 3.5rem);
max-width: 960px;
margin: 0 auto;
padding: clamp(2rem, 4vw, 3rem) clamp(1.25rem, 3vw, 2rem) clamp(4rem, 8vw, 6rem);
}
.live-mode-page-header {
display: flex;
flex-direction: column;
gap: 10px;
max-width: 56ch;
}
.live-mode-page-eyebrow {
display: inline-flex;
align-items: center;
gap: 10px;
font-family: var(--font-body);
font-size: 0.6875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.14em;
color: var(--color-accent);
}
.live-mode-page-eyebrow-badge {
padding: 2px 7px;
border: 1px solid var(--color-accent);
border-radius: 4px;
font-size: 0.625rem;
letter-spacing: 0.12em;
}
.live-mode-page-title {
font-family: var(--font-display);
font-weight: 400;
font-size: clamp(2.5rem, 5vw, 3.5rem);
line-height: 1;
letter-spacing: -0.02em;
color: var(--color-ink);
margin: 0;
}
.live-mode-page-lede {
font-family: var(--font-body);
font-size: 1.0625rem;
line-height: 1.55;
color: var(--color-charcoal);
margin: 0;
max-width: 56ch;
}
.live-mode-start {
display: flex;
align-items: center;
gap: 10px;
margin-top: 6px;
padding: 10px 14px;
background: var(--color-ink);
color: var(--color-paper);
border-radius: 8px;
font-family: var(--font-mono);
font-size: 0.875rem;
align-self: flex-start;
max-width: 100%;
}
.live-mode-start-prompt {
color: var(--color-accent);
user-select: none;
}
.live-mode-start-cmd {
flex: 1;
overflow-x: auto;
white-space: nowrap;
scrollbar-width: none;
}
.live-mode-start-cmd::-webkit-scrollbar { display: none; }
.live-mode-start-copy {
display: inline-flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
background: transparent;
color: oklch(75% 0 0);
border: 0;
border-radius: 4px;
cursor: pointer;
flex-shrink: 0;
}
.live-mode-start-copy:hover {
background: oklch(22% 0 0);
color: oklch(92% 0 0);
}
.live-mode-start-copy.is-copied {
color: oklch(70% 0.18 145);
}
/* Demo section — wraps the animated homepage .live-demo block */
.live-mode-demo-wrap {
margin: 0;
}
.live-mode-demo-caption {
margin: 14px 0 0;
font-family: var(--font-body);
font-size: 0.875rem;
color: var(--color-ash);
line-height: 1.55;
font-style: italic;
}
/* Three-card "what happens" section */
.live-mode-stages {
display: flex;
flex-direction: column;
gap: var(--spacing-md);
}
.live-mode-stages-title {
font-family: var(--font-display);
font-weight: 400;
font-style: italic;
font-size: 1.75rem;
color: var(--color-ink);
margin: 0 0 8px 0;
}
.live-mode-stages-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--spacing-md);
}
@media (max-width: 720px) {
.live-mode-stages-grid {
grid-template-columns: 1fr;
}
}
.live-mode-stage {
display: flex;
flex-direction: column;
gap: 10px;
padding: 18px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 8px;
}
.live-mode-stage-num {
font-family: var(--font-mono);
font-size: 0.6875rem;
letter-spacing: 0.12em;
color: var(--color-ash);
text-transform: uppercase;
}
.live-mode-stage-name {
font-family: var(--font-display);
font-style: italic;
font-weight: 400;
font-size: 1.375rem;
color: var(--color-ink);
margin: 0;
line-height: 1.15;
}
.live-mode-stage-desc {
font-family: var(--font-body);
font-size: 0.875rem;
line-height: 1.55;
color: var(--color-charcoal);
margin: 0;
}
.live-mode-stage-viz {
margin-top: 4px;
padding: 14px;
background: var(--color-cream);
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
min-height: 92px;
}
/* Three pathway cards — tutorial, reference, install */
.live-mode-pathways {
display: flex;
flex-direction: column;
gap: var(--spacing-md);
}
.live-mode-pathways-title {
font-family: var(--font-display);
font-weight: 400;
font-style: italic;
font-size: 1.75rem;
color: var(--color-ink);
margin: 0 0 8px 0;
}
.live-mode-pathways-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--spacing-md);
}
@media (max-width: 720px) {
.live-mode-pathways-grid {
grid-template-columns: 1fr;
}
}
.live-mode-pathway {
display: flex;
flex-direction: column;
gap: 8px;
padding: 20px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 8px;
text-decoration: none;
transition: border-color 180ms ease, transform 180ms ease;
}
.live-mode-pathway:hover {
border-color: var(--color-accent);
}
.live-mode-pathway-kind {
font-family: var(--font-mono);
font-size: 0.625rem;
text-transform: uppercase;
letter-spacing: 0.14em;
color: var(--color-accent);
}
.live-mode-pathway-title {
font-family: var(--font-body);
font-size: 1.125rem;
font-weight: 600;
color: var(--color-ink);
margin: 0;
line-height: 1.3;
}
.live-mode-pathway-desc {
font-family: var(--font-body);
font-size: 0.875rem;
color: var(--color-charcoal);
line-height: 1.55;
margin: 0;
flex: 1;
}
.live-mode-pathway-cta {
font-family: var(--font-body);
font-size: 0.8125rem;
font-weight: 600;
color: var(--color-accent);
margin-top: 6px;
}
/* Frameworks strip */
.live-mode-frameworks {
display: flex;
flex-direction: column;
gap: 10px;
padding: 18px 20px;
background: var(--color-cream);
border: 1px solid var(--color-mist);
border-radius: 8px;
}
.live-mode-frameworks-label {
font-family: var(--font-mono);
font-size: 0.6875rem;
letter-spacing: 0.12em;
color: var(--color-ash);
text-transform: uppercase;
}
.live-mode-frameworks-list {
display: flex;
flex-wrap: wrap;
gap: 8px 14px;
font-family: var(--font-body);
font-size: 0.875rem;
color: var(--color-ink);
margin: 0;
padding: 0;
list-style: none;
}
.live-mode-frameworks-list li {
display: inline-flex;
align-items: center;
gap: 6px;
}
.live-mode-frameworks-list li::before {
content: "";
display: inline-block;
width: 5px;
height: 5px;
border-radius: 50%;
background: var(--color-accent);
}
/* Docs/live page callout pointing back to /live-mode */
.docs-live-callout {
display: flex;
align-items: center;
gap: 14px;
padding: 12px 16px;
margin: 0 0 clamp(1.25rem, 2.5vw, 1.75rem);
background: var(--color-accent-dim);
border: 1px solid var(--color-accent-soft);
border-radius: 8px;
font-family: var(--font-body);
font-size: 0.875rem;
color: var(--color-ink);
line-height: 1.5;
}
.docs-live-callout-icon {
flex-shrink: 0;
width: 28px;
height: 28px;
display: inline-flex;
align-items: center;
justify-content: center;
background: var(--color-accent);
color: var(--color-paper);
border-radius: 50%;
font-size: 14px;
}
.docs-live-callout-text {
flex: 1;
}
.docs-live-callout-text a {
color: var(--color-accent);
text-decoration: underline;
text-underline-offset: 2px;
font-weight: 600;
}