Files
pbakaus_impeccable/public/css/workflow.css
T
Paul Bakaus d03dca1209 fix(site): restore Antidote section with curated anti-pattern list
The DO/DONT extractor in readPatterns stopped finding anything after
the skill went human-authored (new SKILL.md uses plain bullets, one-word
section headings, no DO:/DON'T: prefixes). Replace the extractor with
a hand-curated category list: six categories, three or four DOs and
DON'Ts each. Editorial tone, tight, deliberately a teaser — the full
catalog still lives on /anti-patterns.

The legacy SKILL.md parser is retained in the file as _legacyReadPatterns
in case we want to revive it later with a different format.

Small CSS fix: .faq-question was display:flex with justify-content:
space-between, so inline <code> in a summary got treated as its own
flex item and pushed apart. Switched to relative+absolute positioning
so the + icon sits in the right margin and text flows naturally.

Changelog font size reduced to 0.9375rem for the expanded v3.0 entry.
New FAQ entry on pinning standalone commands back. Pin section added
to /docs/impeccable editorial.
2026-04-22 11:52:40 -07:00

1369 lines
28 KiB
CSS

/* Workflow / Commands - Renaissance Edition */
.commands-section {
position: relative;
padding: var(--spacing-xl) 0;
background: var(--color-paper);
}
.commands-gallery {
/* Reset grid */
display: block;
}
/* ============================================
MAGAZINE SPREAD - Desktop Layout
============================================ */
/* Category accent colors */
.magazine-spread[data-category="create"] { --spread-accent: oklch(55% 0.20 340); }
.magazine-spread[data-category="evaluate"] { --spread-accent: oklch(55% 0.20 300); }
.magazine-spread[data-category="refine"] { --spread-accent: oklch(55% 0.18 260); }
.magazine-spread[data-category="simplify"] { --spread-accent: oklch(55% 0.20 80); }
.magazine-spread[data-category="harden"] { --spread-accent: oklch(55% 0.20 160); }
.magazine-spread[data-category="system"] { --spread-accent: oklch(45% 0.05 0); }
.magazine-container {
position: relative;
width: 100%;
display: grid;
grid-template-columns: 200px 1fr;
gap: var(--spacing-lg);
align-items: start;
overflow: hidden;
}
@media (min-width: 1100px) {
.magazine-container {
background: white;
border-radius: 16px;
padding: var(--spacing-lg);
}
}
/* Fisheye command list */
.fisheye-list {
position: relative;
height: 400px;
align-self: center;
overflow: hidden;
mask-image: linear-gradient(to bottom, transparent 0%, black 10%, black 90%, transparent 100%);
-webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 10%, black 90%, transparent 100%);
}
.fisheye-scroll {
height: 100%;
overflow-y: auto;
scrollbar-width: none;
position: relative;
}
.fisheye-scroll::-webkit-scrollbar { display: none; }
.fisheye-item {
display: block;
font-family: var(--font-display);
font-size: 1.5rem;
font-weight: 400;
color: var(--color-ink);
background: none;
border: none;
padding: 0;
position: absolute;
left: 0;
cursor: pointer;
white-space: nowrap;
text-align: left;
width: 100%;
line-height: 1.3;
transform-origin: left center;
will-change: transform, opacity;
}
.fisheye-slash {
color: var(--color-mist);
font-weight: 300;
}
.fisheye-item.is-active {
font-weight: 600;
}
.fisheye-item.is-active .fisheye-slash {
color: var(--color-accent);
}
.fisheye-beta {
font-family: var(--font-body);
font-size: 0.45rem;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--color-ash);
border: 1px solid var(--color-mist);
border-radius: 3px;
padding: 1px 4px;
margin-left: 0.35em;
vertical-align: middle;
}
/* The viewport that clips to one spread at a time */
.magazine-viewport {
position: relative;
height: 520px;
overflow: hidden;
}
/* Individual spread */
.magazine-spread {
position: absolute;
inset: 0;
display: grid;
grid-template-columns: 38% 1fr;
grid-template-rows: 1fr auto;
gap: 0 var(--spacing-2xl);
padding: var(--spacing-lg) var(--spacing-lg);
opacity: 0;
pointer-events: none;
transition: opacity 0.5s cubic-bezier(0.16, 1, 0.3, 1),
transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
transform: translateY(16px);
will-change: opacity, transform;
}
.magazine-spread.active {
opacity: 1;
pointer-events: auto;
transform: translateY(0);
z-index: 2;
}
.magazine-spread.exiting {
opacity: 0;
transform: translateY(-16px);
z-index: 1;
}
/* Left column: Big name + meta */
.spread-identity {
grid-column: 1;
grid-row: 1 / 3;
display: flex;
flex-direction: column;
justify-content: center;
gap: var(--spacing-md);
padding-right: var(--spacing-lg);
}
.spread-category-label {
font-family: var(--font-body);
font-size: 0.6875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.14em;
color: var(--spread-accent);
}
.spread-command-name {
white-space: nowrap;
font-family: var(--font-display);
font-size: clamp(3rem, 5.5vw, 5.5rem);
font-weight: 600;
line-height: 0.95;
color: var(--color-ink);
margin: 0;
letter-spacing: -0.02em;
}
.spread-command-name .spread-slash {
color: var(--spread-accent);
font-weight: 300;
}
/* Sub-commands: stack the /impeccable namespace as a smaller label above the
command name so the command name stays at full display size and never
clips (e.g., "overdrive" is long). */
.spread-command-name .spread-namespace {
display: block;
font-family: var(--font-body);
font-size: 0.875rem;
font-weight: 500;
color: var(--color-ash);
letter-spacing: 0.04em;
margin-bottom: 0.4em;
}
.spread-command-name .spread-namespace .spread-slash {
color: var(--spread-accent);
font-weight: 400;
}
.spread-command-name .beta-badge {
font-family: var(--font-body);
font-size: 0.55rem;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--spread-accent);
border: 1px solid var(--spread-accent);
border-radius: 3px;
padding: 2px 6px;
vertical-align: super;
margin-left: 8px;
}
.spread-description {
font-family: var(--font-body);
font-size: 0.9375rem;
line-height: 1.6;
color: var(--color-charcoal);
max-width: 360px;
}
/* Flow / relationship line */
.spread-flow {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: nowrap;
margin-top: var(--spacing-xs);
white-space: nowrap;
}
.spread-flow-label {
font-family: var(--font-body);
font-size: 0.75rem;
color: var(--color-ash);
}
.spread-flow-icon {
color: var(--spread-accent);
font-weight: 600;
font-size: 0.8125rem;
}
.spread-flow-cmd {
font-family: var(--font-mono);
font-size: 0.6875rem;
background: var(--color-mist);
padding: 2px 7px;
border-radius: 3px;
color: var(--color-ink);
}
/* Right column: Demo area */
.spread-demo-area {
grid-column: 2;
grid-row: 1 / 3;
display: flex;
flex-direction: column;
min-height: 0;
overflow: hidden;
}
/* Demo split comparison inside the spread */
.spread-demo-area .demo-split-comparison {
display: flex;
flex-direction: column;
height: 100%;
flex: 1;
min-height: 0;
}
.spread-demo-area .demo-split-comparison .split-container {
position: relative;
flex: 1;
min-height: 0;
overflow: hidden;
cursor: ew-resize;
user-select: none;
background: var(--color-cream);
}
.spread-demo-area .demo-split-comparison .split-before,
.spread-demo-area .demo-split-comparison .split-after {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
padding: var(--spacing-md);
}
.spread-demo-area .demo-split-comparison .split-before {
z-index: 1;
background: var(--color-cream);
}
.spread-demo-area .demo-split-comparison .split-after {
z-index: 2;
background: var(--color-paper);
clip-path: polygon(58% 0%, 100% 0%, 100% 100%, 42% 100%);
}
.spread-demo-area .demo-split-comparison .split-content {
width: 100%;
max-width: 320px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.spread-demo-area .demo-split-comparison .split-divider {
position: absolute;
top: 0;
bottom: 0;
left: 50%;
width: 2px;
background: var(--spread-accent, var(--color-accent));
transform: translateX(-50%) skewX(-10deg);
pointer-events: none;
z-index: 3;
box-shadow: 0 0 12px rgba(0,0,0,0.1);
}
.spread-demo-area .demo-split-comparison .split-label {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) skewX(10deg);
font-size: 0.5625rem;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--color-paper);
background: var(--spread-accent, var(--color-accent));
padding: 4px 10px;
border-radius: 3px;
white-space: nowrap;
}
.spread-demo-area .demo-split-comparison .demo-caption {
flex-shrink: 0;
font-size: 0.75rem;
color: var(--color-ash);
text-align: center;
padding: var(--spacing-sm) var(--spacing-md);
}
/* Fallback demo container inside spread */
.spread-demo-area .demo-container {
flex: 1;
display: flex;
flex-direction: column;
}
.spread-demo-area .demo-container .demo-viewport {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
max-width: 420px;
background: none;
min-height: auto;
}
/* (nav moved to fisheye list) */
/* ============================================
OLD DESKTOP STYLES (kept for mobile reuse)
============================================ */
.commands-container {
display: grid;
grid-template-columns: 1fr 1.2fr;
gap: var(--spacing-2xl);
align-items: start;
}
@media (max-width: 900px) {
.commands-container {
grid-template-columns: 1fr;
}
}
/* Left: The Manual (Scrollable) */
.command-manual {
display: flex;
flex-direction: column;
gap: var(--spacing-sm);
padding-bottom: 20vh;
}
.command-category-header {
font-family: var(--font-display);
font-size: 0.875rem;
font-weight: 600;
color: var(--color-accent);
text-transform: uppercase;
letter-spacing: 0.1em;
padding: var(--spacing-lg) var(--spacing-lg) var(--spacing-sm);
margin-top: var(--spacing-md);
border-bottom: 1px solid var(--color-mist);
}
.command-category-header:first-child {
margin-top: 0;
}
.manual-entry {
position: relative;
padding: var(--spacing-lg);
padding-left: calc(var(--spacing-lg) + 16px); /* Reserve space for transform */
border-left: 2px solid var(--color-mist);
transition: border-color 0.4s var(--ease-out), opacity 0.4s var(--ease-out), background 0.4s var(--ease-out), transform 0.4s var(--ease-out);
opacity: 0.4;
cursor: pointer;
transform: translateX(-16px);
}
.manual-entry:hover {
opacity: 0.7;
}
.manual-entry.active {
border-left-color: var(--color-accent);
opacity: 1;
transform: translateX(0);
background: linear-gradient(to right, var(--color-bg), transparent);
}
.manual-cmd-name {
font-family: var(--font-mono);
font-size: 1.5rem;
margin: 0 0 var(--spacing-sm);
color: var(--color-ink);
font-weight: 500;
}
.beta-badge {
font-family: var(--font-body);
font-size: 0.55rem;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--color-accent);
border: 1px solid var(--color-accent);
border-radius: 3px;
padding: 1px 5px;
vertical-align: middle;
margin-left: 6px;
}
.manual-cmd-desc {
font-size: 0.875rem;
line-height: 1.5;
color: var(--color-charcoal);
margin: 0;
}
.manual-cmd-rel {
font-size: 0.8125rem;
color: var(--color-ash);
margin-top: var(--spacing-sm);
display: flex;
align-items: center;
gap: 0.5ch;
flex-wrap: wrap;
}
.manual-cmd-rel .rel-icon {
color: var(--color-accent);
font-weight: 600;
}
.manual-cmd-rel code {
font-family: var(--font-mono);
font-size: 0.75rem;
background: var(--color-mist);
padding: 2px 6px;
border-radius: 3px;
color: var(--color-ink);
}
/* Right: The Terminal Stack (Sticky, vertically centered) */
.glass-terminal-wrapper {
position: sticky;
top: 50vh;
transform: translateY(-50%);
height: calc(100vh - var(--spacing-xl) * 2);
max-height: 800px;
min-height: 500px;
}
/* Stacked Windows Container */
.terminal-stack {
position: relative;
height: 100%;
perspective: 1200px;
}
.terminal-stack-tabs {
position: absolute;
top: -31px;
right: 8px;
display: flex;
gap: 4px;
z-index: 10;
}
.terminal-stack-tab {
font-family: var(--font-mono);
font-size: 0.75rem;
padding: 5px 12px;
background: var(--color-cream);
border: 1px solid var(--color-mist);
border-bottom: none;
border-radius: 6px 6px 0 0;
color: var(--color-ash);
cursor: pointer;
transition: all 0.2s ease;
}
.terminal-stack-tab:hover {
background: var(--color-paper);
color: var(--color-charcoal);
}
.terminal-stack-tab.active {
background: var(--color-paper);
color: var(--color-ink);
border-color: var(--color-mist);
}
/* Individual Windows */
.terminal-window {
position: absolute;
inset: 0;
transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1),
opacity 0.3s ease,
filter 0.3s ease;
transform-origin: center bottom;
}
/* Demo window (front by default) */
.terminal-window--demo {
z-index: 2;
}
.terminal-window--demo.is-back {
transform: translateY(16px) translateX(12px) scale(0.96);
opacity: 0.6;
filter: brightness(0.92);
pointer-events: none;
z-index: 1;
}
/* Source window (back by default) */
.terminal-window--source {
z-index: 1;
transform: translateY(16px) translateX(12px) scale(0.96);
opacity: 0.6;
filter: brightness(0.92);
pointer-events: none;
}
.terminal-window--source.is-front {
transform: translateY(0) translateX(0) scale(1);
opacity: 1;
filter: brightness(1);
pointer-events: auto;
z-index: 2;
}
/* Source Window Content */
.source-window {
background: var(--color-paper);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid var(--color-mist);
border-radius: 8px;
box-shadow: 0 20px 60px -10px rgba(0,0,0,0.15);
height: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
}
.source-header {
background: var(--color-cream);
padding: 12px 16px;
display: flex;
align-items: center;
gap: 8px;
border-bottom: 1px solid var(--color-mist);
flex-shrink: 0;
}
.source-title {
font-family: var(--font-mono);
font-size: 0.875rem;
color: var(--color-ink);
font-weight: 500;
}
.source-body {
flex: 1;
padding: var(--spacing-md);
font-family: var(--font-mono);
font-size: 0.75rem;
line-height: 1.5;
color: var(--color-charcoal);
overflow-y: auto;
overscroll-behavior: contain;
white-space: pre-wrap;
word-break: break-word;
background: var(--color-cream);
}
.source-loading {
color: var(--color-ash);
font-style: italic;
}
@media (max-width: 900px) {
.magazine-container { display: none; }
.fisheye-list { display: none; }
.glass-terminal-wrapper {
display: none; /* Hide on mobile for now, or stack */
}
}
.glass-terminal {
background: var(--color-paper);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid var(--color-mist);
border-radius: 8px;
box-shadow: 0 20px 60px -10px rgba(0,0,0,0.15);
height: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
}
.terminal-header {
background: var(--color-cream);
padding: 12px 16px;
display: flex;
align-items: center;
gap: 8px;
border-bottom: 1px solid var(--color-mist);
}
.terminal-dot {
width: 10px;
height: 10px;
border-radius: 50%;
}
.terminal-dot.red { background: #ff5f56; }
.terminal-dot.yellow { background: #ffbd2e; }
.terminal-dot.green { background: #27c93f; }
.terminal-title {
margin-left: auto;
font-family: var(--font-mono);
font-size: 0.75rem;
color: var(--color-ash);
}
.terminal-body {
flex: 1;
padding: var(--spacing-md);
font-family: var(--font-mono);
font-size: 0.9375rem;
color: var(--color-ink);
overflow-y: auto;
display: flex;
flex-direction: column;
min-height: 0; /* Allow flex shrinking */
}
.terminal-line {
margin-bottom: var(--spacing-sm);
display: flex;
gap: var(--spacing-sm);
line-height: 1.5;
}
.terminal-prompt {
color: var(--color-accent);
user-select: none;
font-weight: bold;
}
.terminal-cursor {
display: inline-block;
width: 8px;
height: 1.2em;
background: var(--color-accent);
vertical-align: middle;
animation: blink 1s step-end infinite;
}
.terminal-output {
color: var(--color-ash);
margin-bottom: var(--spacing-md);
white-space: pre-wrap;
}
/* Hide steps when viewport is short */
@media (max-height: 800px) {
.terminal-output {
display: none;
}
}
.terminal-cmd {
color: var(--color-accent);
font-weight: 600;
}
.terminal-step {
color: var(--color-charcoal);
}
.terminal-done {
color: var(--color-success, #22c55e);
font-weight: 500;
}
.terminal-preview {
background: var(--color-paper);
margin: var(--spacing-sm) 0;
flex: 1;
min-height: 0; /* Allow shrinking */
overflow: hidden;
border-radius: 12px;
}
.terminal-cursor-line {
flex-shrink: 0;
margin-top: var(--spacing-sm) !important;
}
/* Demo Split Comparison in Terminal */
.terminal-preview .demo-split-comparison {
display: flex;
flex-direction: column;
height: 100%;
}
.terminal-preview .demo-split-comparison .split-container {
position: relative;
flex: 1;
min-height: 0;
overflow: hidden;
cursor: ew-resize;
user-select: none;
background: var(--color-cream);
}
.terminal-preview .demo-split-comparison .split-before,
.terminal-preview .demo-split-comparison .split-after {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
padding: var(--spacing-md);
}
.terminal-preview .demo-split-comparison .split-before {
z-index: 1;
background: var(--color-cream);
}
.terminal-preview .demo-split-comparison .split-after {
z-index: 2;
background: var(--color-paper);
clip-path: polygon(58% 0%, 100% 0%, 100% 100%, 42% 100%);
}
.terminal-preview .demo-split-comparison .split-content {
width: 100%;
max-width: 280px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.terminal-preview .demo-split-comparison .split-divider {
position: absolute;
top: 0;
bottom: 0;
left: 50%;
width: 2px;
background: var(--color-accent);
transform: translateX(-50%) skewX(-10deg);
pointer-events: none;
z-index: 3;
box-shadow: 0 0 12px rgba(0,0,0,0.1);
}
.terminal-preview .demo-split-comparison .split-label {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) skewX(10deg);
font-size: 0.5625rem;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--color-paper);
background: var(--color-accent);
padding: 4px 10px;
border-radius: 3px;
white-space: nowrap;
}
.terminal-preview .demo-split-comparison .demo-caption {
flex-shrink: 0;
font-size: 0.75rem;
color: var(--color-ash);
text-align: center;
padding: var(--spacing-sm) var(--spacing-md);
}
@keyframes blink { 50% { opacity: 0; } }
/* ============================================
CASE STUDIES / TRANSFORMATIONS SECTION
============================================ */
.casestudies-section {
position: relative;
padding: var(--spacing-2xl) 0;
border-top: 1px solid var(--color-mist);
}
/* Tabbed transformations */
.transformations-tabbed {
margin-top: var(--spacing-xl);
}
.transformation-tabs {
display: flex;
gap: var(--spacing-xs);
border-bottom: 1px solid var(--color-mist);
margin-bottom: var(--spacing-lg);
}
.transformation-tab {
font-family: var(--font-display);
font-size: 0.9375rem;
font-weight: 500;
color: var(--color-ash);
background: none;
border: none;
padding: var(--spacing-sm) var(--spacing-md);
cursor: pointer;
position: relative;
transition: color 0.2s ease;
}
.transformation-tab:hover {
color: var(--color-charcoal);
}
.transformation-tab.active {
color: var(--color-ink);
}
.transformation-tab.active::after {
content: '';
position: absolute;
bottom: -1px;
left: 0;
right: 0;
height: 2px;
background: var(--color-accent);
}
.transformation-panels {
position: relative;
}
.transformation-panel {
display: none;
flex-direction: column;
gap: var(--spacing-lg);
animation: fadeInPanel 0.3s ease;
}
.transformation-panel.active {
display: flex;
}
@keyframes fadeInPanel {
from {
opacity: 0;
transform: translateY(8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Side-by-side images */
.transformation-images {
display: flex;
align-items: center;
gap: var(--spacing-md);
}
.transformation-before,
.transformation-after {
flex: 1;
margin: 0;
}
.transformation-before img,
.transformation-after img,
.transformation-placeholder {
width: 100%;
aspect-ratio: 16 / 10;
object-fit: cover;
border-radius: 8px;
border: 1px solid var(--color-mist);
cursor: pointer;
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.transformation-before img:hover,
.transformation-after img:hover,
.transformation-placeholder:hover {
transform: scale(1.02);
box-shadow: 0 8px 24px -4px rgba(0,0,0,0.15);
}
.transformation-placeholder {
background: linear-gradient(135deg, var(--color-mist) 0%, var(--color-cream) 100%);
display: flex;
align-items: center;
justify-content: center;
color: var(--color-ash);
font-size: 0.8125rem;
font-style: italic;
}
.transformation-before figcaption,
.transformation-after figcaption {
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--color-ash);
margin-top: var(--spacing-xs);
text-align: center;
}
.transformation-arrow {
font-size: 1.5rem;
color: var(--color-accent);
font-weight: 300;
flex-shrink: 0;
}
/* Info section */
.transformation-info {
max-width: 600px;
}
.transformation-title {
font-family: var(--font-display);
font-size: 1.25rem;
font-weight: 600;
color: var(--color-ink);
margin: 0 0 var(--spacing-xs);
}
.transformation-desc {
font-size: 0.9375rem;
color: var(--color-charcoal);
line-height: 1.6;
margin: 0 0 var(--spacing-sm);
}
.transformation-commands {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.transformation-command {
font-family: var(--font-mono);
font-size: 0.75rem;
background: var(--color-mist);
color: var(--color-charcoal);
padding: 4px 10px;
border-radius: 4px;
}
/* Lightbox */
.lightbox {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.9);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
opacity: 0;
visibility: hidden;
transition: opacity 0.3s ease, visibility 0.3s ease;
}
.lightbox.active {
opacity: 1;
visibility: visible;
}
.lightbox-close {
position: absolute;
top: 20px;
right: 24px;
background: none;
border: none;
color: white;
font-size: 2.5rem;
cursor: pointer;
opacity: 0.7;
transition: opacity 0.2s ease;
line-height: 1;
}
.lightbox-close:hover {
opacity: 1;
}
.lightbox-image {
max-width: 90vw;
max-height: 85vh;
object-fit: contain;
border-radius: 8px;
box-shadow: 0 20px 60px rgba(0,0,0,0.5);
}
@media (max-width: 768px) {
.transformation-images {
flex-direction: column;
}
.transformation-arrow {
transform: rotate(90deg);
}
.transformation-before,
.transformation-after {
width: 100%;
}
}
/* ============================================
HERO VERSION LINK
============================================ */
.hero-version-link {
font-size: 0.8125rem;
color: var(--color-ash);
margin-top: var(--spacing-sm);
}
.hero-version-link a {
color: var(--color-ash);
text-decoration: none;
border-bottom: 1px solid transparent;
transition: color 0.2s ease, border-color 0.2s ease;
}
.hero-version-link a:hover {
color: var(--color-accent);
border-bottom-color: var(--color-accent);
}
/* ============================================
CHANGELOG + FAQ ROW (side-by-side on desktop)
============================================ */
.changelog-faq-row {
position: relative;
}
@media (min-width: 1024px) {
.changelog-faq-row {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
column-gap: calc(var(--spacing-xl) * 1.5);
border-top: 1px solid var(--color-mist);
}
.changelog-faq-row > .changelog-section,
.changelog-faq-row > .faq-section {
border-top: none;
}
.changelog-faq-row > .faq-section {
border-left: 1px solid var(--color-mist);
padding-left: calc(var(--spacing-xl) * 0.75);
margin-left: calc(var(--spacing-xl) * -0.75);
}
}
/* ============================================
CHANGELOG SECTION
============================================ */
.changelog-section {
position: relative;
padding: var(--spacing-xl) 0;
border-top: 1px solid var(--color-mist);
}
.changelog-list {
display: flex;
flex-direction: column;
gap: 0;
}
.changelog-entry {
padding: var(--spacing-md) 0;
}
.changelog-entry + .changelog-entry {
border-top: 1px solid var(--color-mist);
}
.changelog-version-header {
display: flex;
align-items: baseline;
gap: var(--spacing-sm);
margin-bottom: var(--spacing-sm);
}
.changelog-version {
font-family: var(--font-mono);
font-size: 1.125rem;
font-weight: 600;
color: var(--color-ink);
}
.changelog-date {
font-size: 0.8125rem;
color: var(--color-ash);
}
.changelog-items {
margin: 0;
padding-left: var(--spacing-md);
color: var(--color-charcoal);
font-size: 0.9375rem;
line-height: 1.65;
max-width: 72ch;
}
.changelog-items li {
margin-bottom: var(--spacing-xs);
}
.changelog-items code {
font-family: var(--font-mono);
font-size: 0.875em;
background: var(--color-mist);
padding: 2px 6px;
border-radius: 3px;
color: var(--color-ink);
}
/* Changelog: collapsible older entries */
.changelog-older {
margin-top: var(--spacing-sm);
}
.changelog-older-toggle {
font-family: var(--font-body);
font-size: 0.875rem;
font-weight: 500;
color: var(--color-accent);
padding: var(--spacing-md) 0;
cursor: pointer;
list-style: none;
display: flex;
align-items: center;
gap: 6px;
transition: color 0.2s ease;
}
.changelog-older-toggle::-webkit-details-marker {
display: none;
}
.changelog-older-toggle::before {
content: '+';
font-size: 1.25rem;
font-weight: 300;
transition: transform 0.3s var(--ease-out);
}
.changelog-older[open] .changelog-older-toggle::before {
transform: rotate(45deg);
}
.changelog-older-toggle:hover {
color: var(--color-accent-hover);
}
.changelog-older-entries {
animation: faqFadeIn 0.3s var(--ease-out);
}
/* ============================================
FAQ SECTION
============================================ */
.faq-section {
position: relative;
padding: var(--spacing-xl) 0;
border-top: 1px solid var(--color-mist);
}
.faq-list {
display: flex;
flex-direction: column;
gap: 0;
}
.faq-item {
border-bottom: 1px solid var(--color-mist);
}
.faq-question {
font-family: var(--font-display);
font-size: 1.125rem;
font-weight: 500;
color: var(--color-ink);
padding: var(--spacing-md) calc(var(--spacing-md) + 1.5rem) var(--spacing-md) 0;
cursor: pointer;
list-style: none;
position: relative;
transition: color 0.2s ease;
}
.faq-question::-webkit-details-marker {
display: none;
}
.faq-question::after {
content: '+';
font-family: var(--font-body);
font-size: 1.5rem;
font-weight: 300;
color: var(--color-accent);
transition: transform 0.3s var(--ease-out);
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
}
.faq-item[open] .faq-question::after {
transform: translateY(-50%) rotate(45deg);
}
.faq-question:hover {
color: var(--color-accent);
}
.faq-answer {
padding: 0 0 var(--spacing-md);
color: var(--color-charcoal);
line-height: 1.7;
max-width: 70ch;
animation: faqFadeIn 0.3s var(--ease-out);
}
.faq-answer p {
margin: 0 0 var(--spacing-sm);
}
.faq-answer p:last-child {
margin-bottom: 0;
}
.faq-answer ul {
margin: var(--spacing-sm) 0;
padding-left: var(--spacing-md);
}
.faq-answer li {
margin-bottom: var(--spacing-xs);
}
.faq-answer code {
font-family: var(--font-mono);
font-size: 0.875em;
background: var(--color-mist);
padding: 2px 6px;
border-radius: 3px;
color: var(--color-ink);
}
.faq-answer a {
color: var(--color-accent);
text-decoration: none;
border-bottom: 1px solid transparent;
transition: border-color 0.2s ease;
}
.faq-answer a:hover {
border-bottom-color: var(--color-accent);
}
/* Mobile: FAQ + Changelog */
@media (max-width: 600px) {
.faq-question {
font-size: 1rem;
padding: var(--spacing-md) 0;
min-height: 44px;
gap: var(--spacing-sm);
}
.faq-answer {
font-size: 0.875rem;
}
.changelog-version {
font-size: 1rem;
}
.changelog-version-header {
flex-wrap: wrap;
gap: var(--spacing-xs);
}
.changelog-items {
padding-left: var(--spacing-sm);
font-size: 0.875rem;
}
.changelog-older-toggle {
min-height: 44px;
}
}
@keyframes faqFadeIn {
from {
opacity: 0;
transform: translateY(-8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}