Files
pbakaus_impeccable/public/css/live-mode.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

803 lines
19 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ============================================
LIVE MODE — interactive demo loop
============================================ */
.live-section {
padding: var(--spacing-2xl) 0;
border-top: 1px solid var(--color-mist);
}
.live-content .section-lead {
max-width: 64ch;
margin-bottom: var(--spacing-xl);
}
.live-demo {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(260px, 340px);
gap: var(--spacing-xl);
align-items: start;
margin-bottom: var(--spacing-xl);
}
.live-demo-frame-col {
display: flex;
flex-direction: column;
gap: var(--spacing-md);
min-width: 0;
}
@media (max-width: 920px) {
.live-demo { grid-template-columns: 1fr; }
}
.live-demo-frame {
position: relative;
background: var(--color-cream);
border: 1px solid var(--color-mist);
border-radius: 12px;
overflow: hidden;
aspect-ratio: 16 / 9;
max-width: 960px;
box-shadow: 0 20px 50px oklch(0% 0 0 / 0.08);
user-select: none;
}
.live-demo-chrome {
display: flex;
align-items: center;
gap: 7px;
padding: 10px 14px;
border-bottom: 1px solid var(--color-mist);
background: var(--color-paper);
}
.live-demo-dot {
width: 10px;
height: 10px;
border-radius: 50%;
background: var(--color-mist);
}
.live-demo-url {
margin-left: 14px;
padding: 4px 14px;
background: var(--color-cream);
border: 1px solid var(--color-mist);
border-radius: 5px;
font-family: var(--font-mono);
font-size: 11px;
color: var(--color-charcoal);
}
.live-demo-stage {
position: relative;
height: calc(100% - 42px - 60px); /* minus chrome + bar */
display: flex;
align-items: center;
justify-content: center;
padding: 32px;
overflow: hidden;
}
/* Target card */
.live-demo-target {
position: relative;
width: min(360px, 80%);
min-height: 200px;
}
.live-demo-variant {
position: absolute;
inset: 0;
opacity: 0;
transform: translateY(8px) scale(0.99);
transition: opacity 280ms var(--ease-out), transform 280ms var(--ease-out);
pointer-events: none;
}
.live-demo-variant.is-active {
opacity: 1;
transform: translateY(0) scale(1);
pointer-events: auto;
}
.live-demo-card {
display: flex;
flex-direction: column;
gap: 10px;
padding: 22px 24px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 8px;
height: 100%;
box-sizing: border-box;
}
.live-demo-card-kicker {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--color-ash);
}
.live-demo-card h3 {
font-family: var(--font-display);
font-weight: 400;
font-size: 20px;
line-height: 1.2;
color: var(--color-ink);
margin: 0;
}
.live-demo-card p {
font-family: var(--font-body);
font-size: 13px;
line-height: 1.5;
color: var(--color-charcoal);
margin: 0;
}
.live-demo-card button {
align-self: flex-start;
margin-top: auto;
font-family: var(--font-body);
font-weight: 500;
font-size: 12px;
letter-spacing: 0.06em;
text-transform: uppercase;
padding: 9px 16px;
background: var(--color-ink);
color: var(--color-paper);
border: 0;
border-radius: 0;
cursor: pointer;
}
/* Per-variant look */
.live-demo-card--plain {}
.live-demo-card--v1 {
background: var(--color-cream);
}
.live-demo-card--v1 h3 { font-style: italic; }
.live-demo-card--v1 h3 em { color: var(--color-accent); font-style: italic; }
.live-demo-card--v2 {
background: var(--color-paper);
border: 1px dashed var(--color-accent);
}
.live-demo-card--v2 .live-demo-card-kicker { color: var(--color-accent); }
.live-demo-card--v2 h3 { font-family: var(--font-display); font-style: italic; }
.live-demo-card--v2 button {
background: var(--color-accent);
}
.live-demo-card--v3 {
background: oklch(96% 0.02 350);
border: 1px solid var(--color-accent-soft);
}
.live-demo-card--v3 h3 em { color: var(--color-accent); font-style: italic; }
.live-demo-card--v3 .live-demo-card-kicker { color: var(--color-accent-hover); }
/* Highlight outline over the target */
.live-demo-outline {
position: absolute;
border: 2px solid var(--color-accent);
border-radius: 8px;
pointer-events: none;
opacity: 0;
transition: opacity 200ms var(--ease-out), top 320ms var(--ease-out), left 320ms var(--ease-out), width 320ms var(--ease-out), height 320ms var(--ease-out);
box-shadow: 0 0 0 4px var(--color-accent-dim);
}
.live-demo-outline.is-visible {
opacity: 1;
}
/* Annotations */
.live-demo-annotations {
position: absolute;
inset: 0;
pointer-events: none;
opacity: 0;
transition: opacity 280ms var(--ease-out);
color: var(--color-accent);
}
.live-demo-annotations.is-visible { opacity: 1; }
.live-demo-stroke {
position: absolute;
width: 280px;
height: 56px;
top: 50%;
left: 50%;
transform: translate(-50%, -24px);
pointer-events: none;
}
.live-demo-stroke path {
stroke-dasharray: 1;
stroke-dashoffset: 1;
}
.live-demo-annotations.is-visible .live-demo-stroke path {
animation: liveDemoStroke 800ms var(--ease-out) forwards;
}
@keyframes liveDemoStroke {
to { stroke-dashoffset: 0; }
}
.live-demo-comment {
position: absolute;
top: 56%;
left: 50%;
transform: translate(-50%, 0);
padding: 5px 10px;
background: var(--color-ink);
color: var(--color-paper);
font-family: var(--font-mono);
font-size: 11px;
border-radius: 4px;
white-space: nowrap;
opacity: 0;
transition: opacity 200ms var(--ease-out);
}
.live-demo-annotations.is-comment-visible .live-demo-comment { opacity: 1; }
/* Simulated cursor */
.live-demo-cursor {
position: absolute;
top: 0;
left: 0;
width: 18px;
height: 22px;
pointer-events: none;
opacity: 0;
transform: translate(0, 0);
transition: opacity 200ms var(--ease-out), transform 560ms var(--ease-out-quint);
z-index: 5;
filter: drop-shadow(0 2px 4px oklch(0% 0 0 / 0.2));
}
.live-demo-cursor.is-visible { opacity: 1; }
.live-demo-cursor.is-click svg path {
transform-origin: 4px 4px;
animation: liveDemoCursorClick 220ms var(--ease-out);
}
@keyframes liveDemoCursorClick {
0%, 100% { transform: scale(1); }
40% { transform: scale(0.78); }
}
/* Global bar — the persistent dark pill at the bottom of every session. */
.live-demo-gbar {
position: absolute;
bottom: 14px;
left: 50%;
transform: translateX(-50%);
min-height: 36px;
padding: 0 4px;
background: oklch(14% 0 0);
color: oklch(92% 0 0);
border: 1px solid oklch(22% 0 0);
border-radius: 10px;
display: flex;
align-items: center;
gap: 2px;
font-family: var(--font-body);
font-size: 12px;
box-shadow: 0 8px 24px oklch(0% 0 0 / 0.2);
z-index: 4;
}
.live-demo-gbar-brand {
font-family: var(--font-display);
font-size: 16px;
color: var(--color-accent);
padding: 0 10px;
}
.live-demo-gbar-btn {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 7px 10px;
background: transparent;
border: 0;
border-radius: 7px;
color: oklch(75% 0 0);
font: inherit;
cursor: pointer;
}
.live-demo-gbar-btn.is-active {
background: var(--color-accent-dim);
color: var(--color-accent);
}
.live-demo-gbar-dmd {
display: inline-grid;
grid-template: repeat(2, 1fr) / repeat(2, 1fr);
width: 12px;
height: 12px;
border-radius: 3px;
overflow: hidden;
}
.live-demo-gbar-dmd span:nth-child(1) { background: oklch(60% 0.25 350); }
.live-demo-gbar-dmd span:nth-child(2) { background: oklch(60% 0.15 45); }
.live-demo-gbar-dmd span:nth-child(3) { background: oklch(55% 0.12 250); }
.live-demo-gbar-dmd span:nth-child(4) { background: oklch(30% 0 0); }
.live-demo-gbar-divider {
width: 1px;
height: 18px;
background: oklch(28% 0 0);
margin: 0 4px;
}
.live-demo-gbar-x {
padding: 7px 10px;
background: transparent;
border: 0;
border-radius: 7px;
color: oklch(60% 0 0);
font-size: 13px;
cursor: pointer;
}
/* Contextual bar — LIGHT paper-backed pill that floats near the picked
element during a session. Matches live-browser.js's buildConfigureRow
look (dark command pill, transparent input, ×N count, magenta Go). */
.live-demo-ctx {
position: absolute;
left: 50%;
transform: translate(-50%, 6px);
padding: 6px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 10px;
box-shadow: 0 4px 20px oklch(0% 0 0 / 0.08), 0 1px 3px oklch(0% 0 0 / 0.06);
font-family: var(--font-body);
font-size: 12px;
color: var(--color-ink);
display: none;
opacity: 0;
transition: opacity 260ms var(--ease-out), transform 260ms var(--ease-out);
z-index: 3;
max-width: 90%;
}
.live-demo-ctx[data-phase="configuring"],
.live-demo-ctx[data-phase="generating"],
.live-demo-ctx[data-phase="cycling"],
.live-demo-ctx[data-phase="accepted"] {
display: block;
opacity: 1;
transform: translate(-50%, 0);
}
.live-demo-ctx-row {
display: none;
align-items: center;
gap: 4px;
}
.live-demo-ctx[data-phase="configuring"] .live-demo-ctx-row--configure,
.live-demo-ctx[data-phase="generating"] .live-demo-ctx-row--generating,
.live-demo-ctx[data-phase="cycling"] .live-demo-ctx-row--cycling,
.live-demo-ctx[data-phase="accepted"] .live-demo-ctx-row--accepted {
display: flex;
}
/* Configure row: [delight ▾] [input] [×3] [Go →] */
.live-demo-ctx-pill {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 5px 10px;
background: var(--color-ink);
color: var(--color-paper);
border: 0;
border-radius: 6px;
font-family: var(--font-body);
font-size: 12px;
font-weight: 500;
cursor: pointer;
white-space: nowrap;
}
.live-demo-ctx-pill-caret { font-size: 9px; opacity: 0.7; margin-left: 2px; }
.live-demo-ctx-input {
display: inline-flex;
align-items: center;
flex: 1;
min-width: 180px;
padding: 5px 8px;
font-family: var(--font-body);
font-size: 12px;
color: var(--color-ink);
}
.live-demo-ctx-caret {
display: inline-block;
width: 1px;
height: 13px;
background: var(--color-ink);
margin-left: 2px;
animation: liveDemoCaret 1s steps(1) infinite;
}
@keyframes liveDemoCaret {
50% { opacity: 0; }
}
.live-demo-ctx-count {
padding: 4px 6px;
background: transparent;
border: 1px solid var(--color-mist);
border-radius: 5px;
font-family: var(--font-mono);
font-size: 11px;
font-weight: 600;
color: var(--color-ash);
cursor: pointer;
}
.live-demo-ctx-go {
padding: 5px 12px;
background: var(--color-accent);
color: var(--color-paper);
border: 0;
border-radius: 6px;
font-family: var(--font-body);
font-size: 12px;
font-weight: 600;
cursor: pointer;
white-space: nowrap;
}
/* Generating row */
.live-demo-ctx-row--generating {
gap: 10px;
padding: 4px 12px 4px 6px;
font-family: var(--font-body);
font-size: 12px;
color: var(--color-charcoal);
}
.live-demo-ctx-spinner {
width: 14px;
height: 14px;
border-radius: 50%;
border: 1.5px solid var(--color-mist);
border-top-color: var(--color-accent);
animation: liveDemoSpin 700ms linear infinite;
}
@keyframes liveDemoSpin { to { transform: rotate(360deg); } }
/* Cycling row */
.live-demo-ctx-row--cycling { gap: 2px; padding: 2px; }
.live-demo-ctx-nav {
padding: 4px 10px;
background: transparent;
border: 0;
border-radius: 5px;
color: var(--color-charcoal);
font-size: 14px;
cursor: pointer;
}
.live-demo-ctx-counter {
font-family: var(--font-mono);
font-size: 11px;
color: var(--color-ink);
padding: 0 6px;
min-width: 40px;
text-align: center;
}
.live-demo-ctx-divider {
width: 1px;
height: 18px;
background: var(--color-mist);
margin: 0 4px;
}
.live-demo-ctx-discard {
padding: 4px 10px;
background: transparent;
border: 0;
border-radius: 5px;
color: var(--color-ash);
font-size: 13px;
cursor: pointer;
}
.live-demo-ctx-accept {
padding: 5px 14px;
background: var(--color-ink);
color: var(--color-paper);
border: 0;
border-radius: 6px;
font-family: var(--font-body);
font-size: 12px;
font-weight: 600;
cursor: pointer;
}
/* Accepted confirmation row */
.live-demo-ctx-row--accepted {
gap: 8px;
padding: 6px 14px;
font-family: var(--font-body);
font-size: 12px;
color: oklch(45% 0.18 145);
}
/* Phase caption under the frame */
.live-demo-caption {
display: flex;
align-items: baseline;
gap: 10px;
font-family: var(--font-mono);
font-size: 11px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--color-ash);
}
.live-demo-caption::before {
content: "";
display: inline-block;
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--color-accent);
animation: liveDemoPulse 1.6s var(--ease-out) infinite;
}
@keyframes liveDemoPulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.4; transform: scale(0.7); }
}
.live-demo-caption-label { color: var(--color-ink); }
/* Supporting row under the demo */
.live-demo-support {
display: flex;
flex-direction: column;
gap: var(--spacing-md);
align-self: stretch;
}
.live-demo-support-cell {
display: grid;
grid-template-columns: 1fr;
gap: 4px;
padding-bottom: var(--spacing-md);
border-bottom: 1px dashed var(--color-mist);
}
.live-demo-support-cell:last-child {
border-bottom: 0;
padding-bottom: 0;
}
.live-demo-support-k {
font-family: var(--font-mono);
font-size: 12px;
font-weight: 600;
letter-spacing: 0.16em;
text-transform: uppercase;
color: var(--color-accent);
}
.live-demo-support-v {
font-family: var(--font-body);
font-size: 14px;
line-height: 1.55;
color: var(--color-ink);
}
.live-demo-support-v code {
font-family: var(--font-mono);
font-size: 0.875em;
background: var(--color-mist);
padding: 1px 6px;
border-radius: 3px;
color: var(--color-ink);
}
@media (max-width: 760px) {
.live-demo-frame { aspect-ratio: 4 / 5; }
.live-demo-target { width: 90%; }
.live-demo-bar { font-size: 11px; min-height: 32px; }
.live-demo-support { grid-template-columns: 1fr; gap: var(--spacing-md); }
}
@media (prefers-reduced-motion: reduce) {
.live-demo-cursor,
.live-demo-outline,
.live-demo-variant,
.live-demo-annotations,
.live-demo-stroke path {
transition: none !important;
animation: none !important;
}
.live-demo-caption::before { animation: none; }
}
/* ============================================
LIVE MODE — skeleton page + richer variants
============================================ */
/* Skeleton elements behind the target card — suggest "this is a real page" */
.live-demo-skeleton {
position: absolute;
inset: 24px;
display: flex;
flex-direction: column;
gap: 14px;
opacity: 0.3;
pointer-events: none;
filter: blur(0.3px);
}
.live-demo-skel-nav {
display: flex;
align-items: center;
gap: 10px;
padding-bottom: 12px;
border-bottom: 1px solid var(--color-mist);
}
.live-demo-skel-logo {
width: 22px;
height: 22px;
border-radius: 4px;
background: var(--color-charcoal);
}
.live-demo-skel-link {
width: 48px;
height: 8px;
border-radius: 2px;
background: var(--color-mist);
}
.live-demo-skel-cta {
margin-left: auto;
width: 72px;
height: 24px;
border-radius: 4px;
background: var(--color-charcoal);
}
.live-demo-skel-heading {
width: 60%;
height: 18px;
border-radius: 3px;
background: var(--color-mist);
margin-top: 20px;
}
.live-demo-skel-line {
height: 8px;
border-radius: 2px;
background: var(--color-mist);
}
.live-demo-skel-line--short { width: 40%; }
/* Target stays above skeleton */
.live-demo-target { position: relative; z-index: 1; }
/* ---- Card variants — sharper, more distinct ---- */
/* Variant 1: magazine column — italic serif, rule lines, off-white */
.live-demo-card--v1 {
background: var(--color-cream);
padding: 18px 22px;
border: 0;
border-top: 3px solid var(--color-ink);
border-radius: 0;
gap: 6px;
}
.live-demo-card--v1 .live-demo-card-kicker {
color: var(--color-accent);
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.28em;
}
.live-demo-card--v1 h3 {
font-family: var(--font-display);
font-style: italic;
font-weight: 400;
font-size: 28px;
line-height: 1.05;
letter-spacing: -0.01em;
margin-top: 4px;
}
.live-demo-card--v1 h3 em { color: var(--color-accent); font-style: italic; }
.live-demo-card--v1 p {
font-family: var(--font-display);
font-style: italic;
font-size: 14px;
line-height: 1.55;
color: var(--color-charcoal);
}
.live-demo-card--v1 button {
font-family: var(--font-body);
align-self: flex-start;
margin-top: 6px;
background: transparent;
color: var(--color-ink);
border: 0;
border-bottom: 1.5px solid var(--color-ink);
padding: 4px 0;
border-radius: 0;
letter-spacing: 0.08em;
}
/* Variant 2: brutalist ticket — thick ink block, stamp glyph, mono */
.live-demo-card--v2 {
position: relative;
background: var(--color-ink);
color: var(--color-paper);
padding: 20px 24px;
border: 0;
border-radius: 0;
overflow: hidden;
gap: 8px;
}
.live-demo-card--v2::before {
content: "";
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 6px;
background: var(--color-accent);
}
.live-demo-card-stamp {
position: absolute;
top: 14px;
right: 18px;
font-size: 28px;
line-height: 1;
color: var(--color-accent);
transform: rotate(-8deg);
}
.live-demo-card--v2 .live-demo-card-kicker {
color: var(--color-accent);
letter-spacing: 0.3em;
font-weight: 600;
}
.live-demo-card--v2 h3 {
font-family: var(--font-body);
font-weight: 700;
font-size: 24px;
line-height: 1.1;
color: var(--color-paper);
letter-spacing: -0.02em;
}
.live-demo-card--v2 button {
font-family: var(--font-mono);
font-weight: 500;
align-self: flex-start;
margin-top: 6px;
background: var(--color-accent);
color: var(--color-paper);
border: 0;
border-radius: 0;
padding: 9px 14px;
letter-spacing: 0.04em;
text-transform: none;
font-size: 12px;
}
/* Variant 3: playful ticket — accent background, sticker stars, postcard vibe */
.live-demo-card--v3 {
position: relative;
background:
radial-gradient(circle at 20% 80%, oklch(92% 0.08 350) 0, transparent 45%),
var(--color-cream);
border: 1px dashed var(--color-accent);
border-radius: 10px;
padding: 22px 24px 20px;
gap: 8px;
}
.live-demo-card-sticker {
position: absolute;
top: 10px;
right: 14px;
display: flex;
gap: 3px;
color: var(--color-accent);
font-size: 14px;
line-height: 1;
transform: rotate(6deg);
}
.live-demo-card--v3 .live-demo-card-kicker {
font-family: var(--font-display);
font-style: italic;
font-weight: 400;
font-size: 13px;
letter-spacing: 0.04em;
color: var(--color-accent-hover);
text-transform: none;
}
.live-demo-card--v3 h3 {
font-family: var(--font-display);
font-weight: 400;
font-size: 22px;
line-height: 1.2;
color: var(--color-ink);
}
.live-demo-card--v3 button {
display: inline-flex;
align-items: center;
gap: 6px;
align-self: flex-start;
background: var(--color-ink);
color: var(--color-paper);
border: 0;
border-radius: 999px;
padding: 10px 18px;
font-family: var(--font-body);
font-weight: 500;
letter-spacing: 0.06em;
text-transform: none;
font-size: 12px;
margin-top: 6px;
}