Files
pbakaus_impeccable/public/css/main.css
T
Paul BakausandClaude Opus 4.6 d63855341a Restructure Visual Mode right column as editorial blocks, add extension thumbnail
The Visual Mode section had three competing cards in the right column
(25 deterministic checks, Three ways to use it, Get the Chrome extension)
all wrapped in bordered/backgrounded containers. The live detection
overlay iframe on the left is the visual anchor for the section — the
right column should be quieter editorial blocks, not three cards
fighting for attention.

Layout changes
- Strip card chrome from .visual-mode-feature: no padding, background,
  or border-radius. Just an eyebrow label + paragraph in editorial flow.
- Strip card chrome from .detection-callout: no padding, background,
  border, border-radius, or hover-transform theatrics.
- Bump .visual-mode-details gap from spacing-md to spacing-xl so the
  three blocks breathe with editorial space instead of feeling stacked.
- Bump body text from 0.8125rem to 0.9375rem for readability without
  the card padding.

Extension callout
- Add extension-detection.png — a tight 600×508 crop of the Chrome
  extension's DevTools panel showing detected anti-patterns ("AI color
  palette", "Overused font", "Quality issues", "Low contrast text").
  Reads at thumbnail size and clearly shows the extension UI in action.
- Whole callout is a single anchor (entire row clickable).
- 88×88 image thumbnail on the left with a subtle border that shifts
  to accent on hover.
- NEW eyebrow stacked above the "Get the Chrome extension →" CTA, both
  left-aligned next to the thumbnail.

The result: the iframe carries the visual weight, the right column
becomes a quiet editorial sidebar, and the extension CTA gets just
enough visual punch (the thumbnail) without competing with the demo.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 09:46:43 -07:00

3696 lines
76 KiB
CSS

/*
* impeccable.style — Renaissance Redesign
*
* Editorial precision meets fluid motion.
* Light, high-contrast, typographically bold.
*/
/* Import other CSS partials */
@import "./problem-section.css";
@import "./workflow.css";
@import "./gallery.css";
@import "./skill-demos.css";
/* ============================================
MINIMAL CSS RESET
============================================ */
*, *::before, *::after {
box-sizing: border-box;
}
* {
margin: 0;
}
img, picture, video, canvas, svg {
display: block;
max-width: 100%;
}
button, input, textarea, select {
font: inherit;
}
/* ============================================
DESIGN TOKENS
============================================ */
:root {
/* Typography */
--font-display: 'Cormorant Garamond', Georgia, serif;
--font-body: 'Instrument Sans', system-ui, sans-serif;
--font-mono: 'Space Grotesk', monospace;
/* Spacing Scale */
--spacing-xs: 8px;
--spacing-sm: 16px;
--spacing-md: 24px;
--spacing-lg: 32px;
--spacing-xl: 48px;
--spacing-2xl: 80px;
--spacing-3xl: 120px;
/* Width */
--width-max: 1400px;
--width-content: 900px;
/* Animation */
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
--ease-out-quint: cubic-bezier(0.22, 1, 0.36, 1);
--duration-fast: 0.15s;
--duration-base: 0.3s;
--duration-slow: 0.6s;
--duration-slower: 0.8s;
--duration-slowest: 1.2s;
/* Core Colors - Light Mode */
--color-ink: oklch(10% 0 0);
--color-text: oklch(10% 0 0);
--color-paper: oklch(98% 0 0);
--color-cream: oklch(96% 0.005 350);
--color-charcoal: oklch(25% 0 0);
--color-ash: oklch(55% 0 0);
--color-mist: oklch(92% 0 0);
--color-bg: oklch(96% 0.005 350);
/* Accent - Vibrant Magenta/Rose (original) */
--color-accent: oklch(60% 0.25 350);
--color-accent-hover: oklch(52% 0.25 350);
--color-accent-dim: oklch(60% 0.25 350 / 0.15);
--color-accent-soft: oklch(60% 0.25 350 / 0.25);
/* Framework category colors - Light mode */
--cat-create-bg: #fdf2f8;
--cat-create-border: #ec4899;
--cat-create-text: #be185d;
--cat-evaluate-bg: #fdf4ff;
--cat-evaluate-border: #d946ef;
--cat-evaluate-text: #a21caf;
--cat-refine-bg: #eff6ff;
--cat-refine-border: #3b82f6;
--cat-refine-text: #1d4ed8;
--cat-simplify-bg: #fffbeb;
--cat-simplify-border: #f59e0b;
--cat-simplify-text: #b45309;
--cat-harden-bg: #f0fdf4;
--cat-harden-border: #22c55e;
--cat-harden-text: #15803d;
--cat-system-bg: #f5f5f4;
--cat-system-border: #78716c;
--cat-system-text: #44403c;
}
/* ============================================
SKIP LINK (Accessibility)
============================================ */
.skip-link {
position: absolute;
top: -100%;
left: 50%;
transform: translateX(-50%);
z-index: 10000;
padding: var(--spacing-sm) var(--spacing-lg);
background: var(--color-ink);
color: var(--color-paper);
font-weight: 600;
text-decoration: none;
border-radius: 0 0 8px 8px;
transition: top 0.2s ease;
}
.skip-link:focus {
top: 0;
outline: 2px solid var(--color-accent);
outline-offset: 2px;
}
/* ============================================
FLOATING BOTTOM NAV
============================================ */
.section-nav {
position: fixed;
bottom: var(--spacing-md);
left: 50%;
transform: translateX(-50%) translateY(20px);
z-index: 100;
display: flex;
align-items: center;
gap: 2px;
padding: 4px;
background: oklch(98% 0 0 / 0.85);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid var(--color-mist);
border-radius: 100px;
box-shadow: 0 4px 24px -4px rgba(0,0,0,0.12), 0 1px 3px rgba(0,0,0,0.06);
opacity: 0;
pointer-events: none;
transition: opacity 0.4s var(--ease-out), transform 0.4s var(--ease-out);
}
.section-nav.is-visible {
opacity: 1;
pointer-events: auto;
transform: translateX(-50%) translateY(0);
}
.section-nav-item {
display: flex;
align-items: center;
gap: 4px;
padding: 8px 12px;
text-decoration: none;
border-radius: 100px;
transition: background 0.2s ease, color 0.2s ease;
}
.section-nav-item:hover {
background: var(--color-mist);
text-decoration: none;
}
.section-nav-item.is-active {
background: var(--color-ink);
}
.section-nav-item.is-active .section-nav-num {
color: var(--color-paper);
}
.section-nav-item.is-active .section-nav-label {
color: var(--color-paper);
}
.section-nav-num {
font-family: var(--font-mono);
font-size: 0.5625rem;
font-weight: 500;
color: var(--color-ash);
letter-spacing: 0.02em;
transition: color 0.2s ease;
}
.section-nav-label {
font-family: var(--font-body);
font-size: 0.6875rem;
font-weight: 500;
color: var(--color-charcoal);
transition: color 0.2s ease;
white-space: nowrap;
}
@media (max-width: 700px) {
.section-nav-label {
display: none;
}
.section-nav-item {
padding: 8px 10px;
}
}
@media (max-width: 400px) {
.section-nav-item {
padding: 8px;
}
.section-nav-num {
font-size: 0.625rem;
}
}
/* ============================================
BASE STYLES
============================================ */
html {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
overflow-x: clip; /* Prevent horizontal scroll without breaking position:sticky */
}
body {
font-family: var(--font-body);
font-size: 16px;
line-height: 1.625;
color: var(--color-text);
background: var(--color-paper);
overflow-x: clip;
min-height: 100vh;
min-height: 100dvh;
}
h1, h2, h3, h4, h5, h6 {
font-family: var(--font-display);
font-weight: 400;
line-height: 1.1;
letter-spacing: -0.02em;
color: var(--color-ink);
}
a {
color: var(--color-accent);
text-decoration: underline;
text-decoration-thickness: 1px;
text-underline-offset: 2px;
transition: color var(--duration-fast) var(--ease-out), text-decoration-color var(--duration-fast) var(--ease-out);
}
a:hover {
color: var(--color-accent-hover);
text-decoration-thickness: 2px;
}
/* Remove underline for buttons styled as links */
.btn,
.footer-logo,
[class*="nav-item"] {
text-decoration: none;
}
strong {
font-weight: 600;
color: var(--color-ink);
}
code {
font-family: var(--font-mono);
font-size: 0.9em;
padding: 0.15em 0.4em;
background: var(--color-accent-dim);
color: var(--color-accent);
border-radius: 4px;
}
::selection {
background: var(--color-accent-soft);
color: var(--color-ink);
}
/* ============================================
GRAIN OVERLAY
============================================ */
.grain-overlay {
position: fixed;
inset: 0;
pointer-events: none;
z-index: 9999;
opacity: 0.03;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
background-repeat: repeat;
}
/* ============================================
LAYOUT
============================================ */
.site-content {
max-width: var(--width-max);
margin: 0 auto;
padding: 0 var(--spacing-lg);
}
@media (max-width: 768px) {
.site-content {
padding: 0 var(--spacing-md);
}
}
/* ============================================
SECTION HEADERS
============================================ */
.section-header {
margin-bottom: var(--spacing-lg);
position: relative;
}
.section-number {
display: block;
font-family: var(--font-mono);
font-size: 0.625rem;
font-weight: 500;
letter-spacing: 0.05em;
color: var(--color-ash);
margin-bottom: var(--spacing-xs);
text-transform: uppercase;
}
.section-title {
font-size: clamp(1.75rem, 4vw, 2.5rem);
font-weight: 400;
line-height: 1.2;
margin: 0;
}
.section-subtitle {
font-size: 1rem;
line-height: 1.6;
color: var(--color-charcoal);
margin-top: var(--spacing-sm);
max-width: 55ch;
}
.cheatsheet-link {
color: var(--color-accent);
text-decoration: none;
font-size: 0.875rem;
margin-left: 0.5em;
}
.cheatsheet-link:hover {
text-decoration: underline;
}
.section-lead {
font-size: 1rem;
line-height: 1.6;
color: var(--color-charcoal);
max-width: 55ch;
margin-bottom: var(--spacing-lg);
}
/* ============================================
HERO SECTION - Combined Layout
============================================ */
.hero-combined {
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
min-height: 100vh;
min-height: 100dvh;
padding: var(--spacing-lg) 0 var(--spacing-2xl);
background: var(--color-paper);
}
.github-link {
position: absolute;
top: var(--spacing-md);
right: var(--spacing-lg);
z-index: 10;
color: var(--color-ash);
transition: color 0.2s ease;
display: flex;
align-items: center;
gap: 6px;
text-decoration: none;
}
.github-link:hover {
color: var(--color-ink);
text-decoration: none;
}
.github-stars {
font-family: var(--font-mono);
font-size: 0.75rem;
font-weight: 500;
color: var(--color-ash);
transition: color 0.2s ease;
}
.github-link:hover .github-stars {
color: var(--color-ink);
}
.hero-combined-container {
max-width: var(--width-max);
margin: 0 auto;
padding: 0 var(--spacing-lg);
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--spacing-xl);
align-items: center;
width: 100%;
}
@media (max-width: 1024px) {
.hero-combined-container {
grid-template-columns: 1fr;
gap: var(--spacing-lg);
text-align: center;
}
}
@media (max-width: 768px) {
.hero-combined-right {
order: -1;
padding-top: var(--spacing-xl);
}
.hero-combined-container {
gap: var(--spacing-md);
}
.hero-combined-left {
gap: var(--spacing-sm);
padding-top: var(--spacing-md);
}
.hero-hook-text,
.hero-included-box,
.hero-cta-group {
margin-top: var(--spacing-xs);
}
}
.hero-combined-left {
display: flex;
flex-direction: column;
gap: var(--spacing-md);
}
@media (max-width: 1024px) {
.hero-combined-left {
align-items: center;
}
}
.hero-title-combined {
font-family: var(--font-display);
font-size: clamp(2.5rem, 7vw, 4.5rem);
font-weight: 300;
font-style: italic;
line-height: 1;
letter-spacing: -0.02em;
margin: 0;
color: var(--color-ink);
}
.hero-tagline-combined {
font-family: var(--font-display);
font-size: clamp(1.125rem, 2.5vw, 1.75rem);
font-weight: 400;
font-style: italic;
line-height: 1.3;
margin: 0;
color: var(--color-charcoal);
}
.hero-hook-text {
font-size: 1rem;
line-height: 1.6;
color: var(--color-charcoal);
max-width: 45ch;
margin: 0;
}
.hero-hook-text--short {
display: none;
}
@media (max-width: 768px) {
.hero-hook-text--full {
display: none;
}
.hero-hook-text--short {
display: block;
}
}
/* Hero Included Box - Subtle "What's included" */
.hero-included-box {
display: flex;
flex-direction: column;
gap: 6px;
padding: 10px 14px;
border: 1px solid var(--color-mist);
background: transparent;
max-width: 45ch;
}
.hero-included-title {
font-family: var(--font-body);
font-size: 0.5625rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--color-ash);
}
.hero-included-items {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 6px;
font-size: 0.8125rem;
color: var(--color-charcoal);
line-height: 1.5;
}
.hero-included-items em {
font-style: normal;
font-family: var(--font-mono);
font-size: 0.75rem;
}
.hero-included-sep {
color: var(--color-mist);
}
@media (max-width: 500px) {
.hero-included-items {
flex-direction: column;
align-items: flex-start;
gap: 4px;
}
.hero-included-sep {
display: none;
}
}
.hero-cta-group {
display: flex;
align-items: center;
gap: var(--spacing-lg);
margin-top: var(--spacing-sm);
}
@media (max-width: 600px) {
.hero-cta-group {
flex-direction: column;
gap: var(--spacing-md);
}
}
.hero-cta-combined {
display: inline-block;
padding: var(--spacing-sm) var(--spacing-xl);
font-family: var(--font-body);
font-size: 0.9rem;
font-weight: 500;
letter-spacing: 0.05em;
text-transform: uppercase;
text-decoration: none;
color: var(--color-paper);
background: var(--color-ink);
border: none;
transition: transform 0.2s ease, background 0.2s ease;
}
.hero-cta-combined:hover {
transform: translateY(-2px);
background: var(--color-accent);
color: var(--color-paper);
}
.hero-logos-inline {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 6px;
}
.hero-logos-inline .hero-logos-label {
font-size: 0.6875rem;
color: var(--color-ash);
letter-spacing: 0.03em;
}
.hero-logos-inline .hero-logos-row {
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
}
.hero-logos-inline .hero-logos-row img {
border-radius: 4px;
opacity: 0.7;
transition: opacity 0.2s ease;
}
.hero-logos-inline .hero-logos-row img:hover {
opacity: 1;
}
.hero-combined-right {
display: flex;
justify-content: center;
}
.hero-combined-right .split-comparison {
max-width: 520px;
width: 100%;
}
.hero-combined-right .split-container {
max-width: 100%;
}
/* Bias tags at bottom of hero */
.hero-bias-tags {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--spacing-xs);
margin-top: var(--spacing-lg);
padding-top: var(--spacing-md);
border-top: 1px solid var(--color-mist);
max-width: var(--width-max);
margin-left: auto;
margin-right: auto;
width: 100%;
padding-bottom: var(--spacing-md);
}
/* ============================================
PROBLEM SECTION - Clarity Lens
============================================ */
.problem-section {
padding: var(--spacing-2xl) 0;
border-top: 1px solid var(--color-mist);
}
.problem-content {
display: grid;
gap: var(--spacing-xl);
}
/* Split Screen Comparison */
.split-comparison {
position: relative;
width: 100%;
max-width: 600px;
margin: 0 auto;
padding: 20px;
margin-top: -20px;
margin-bottom: -20px;
}
.split-container {
position: relative;
width: 100%;
max-width: 500px;
height: 380px;
margin: 0 auto;
border-radius: 12px;
overflow: hidden;
background: var(--color-cream);
border: 1px solid var(--color-mist);
cursor: ew-resize;
user-select: none;
}
.split-before,
.split-after {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
}
.split-before {
z-index: 1;
}
.split-content {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.split-after {
/* Angled clip-path matching divider's skewX(-10deg): top-right, bottom-left */
clip-path: polygon(58% 0%, 100% 0%, 100% 100%, 42% 100%);
z-index: 2;
background: var(--color-paper);
}
.split-divider {
position: absolute;
top: 0;
bottom: 0;
left: 50%;
width: 3px;
background: var(--color-accent);
transform: translateX(-50%) skewX(-10deg);
pointer-events: none;
z-index: 3;
box-shadow: 0 0 20px rgba(0,0,0,0.15);
}
.split-label {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) skewX(10deg);
font-size: 0.6875rem;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--color-paper);
background: var(--color-accent);
padding: 6px 14px;
border-radius: 4px;
white-space: nowrap;
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
}
/* Slop Card - Generic AI output */
.slop-card {
width: 280px;
height: 280px;
background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 50%, #ddd6fe 100%);
border-radius: 16px;
padding: 24px;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
font-family: 'Inter', system-ui, sans-serif;
display: flex;
flex-direction: column;
}
.slop-header {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 16px;
}
.slop-avatar {
width: 40px;
height: 40px;
border-radius: 50%;
background: linear-gradient(135deg, #8b5cf6, #7c3aed);
flex-shrink: 0;
}
.slop-text { flex: 1; }
.slop-title { font-size: 14px; font-weight: 600; color: #1f2937; margin-bottom: 2px; }
.slop-subtitle { font-size: 12px; color: #6b7280; }
.slop-body { font-size: 13px; line-height: 1.5; color: #4b5563; margin-bottom: auto; flex: 1; }
.slop-button {
width: 100%;
padding: 10px 20px;
background: linear-gradient(135deg, #8b5cf6, #7c3aed);
color: white;
border: none;
border-radius: 8px;
font-family: 'Inter', system-ui, sans-serif;
font-size: 13px;
font-weight: 500;
cursor: pointer;
margin-top: auto;
}
/* Callout labels pointing to issues */
.slop-callouts {
position: absolute;
inset: 0;
pointer-events: none;
}
.slop-callout {
position: absolute;
font-size: 0.625rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--color-accent);
background: var(--color-paper);
padding: 4px 8px;
border: 1px solid var(--color-accent);
border-radius: 3px;
white-space: nowrap;
opacity: 0;
animation: calloutFadeIn 0.4s var(--ease-out) forwards;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.slop-callout[data-point="font"] {
top: 15%;
right: 5%;
animation-delay: 0.1s;
}
.slop-callout[data-point="gradient"] {
top: 40%;
left: 5%;
animation-delay: 0.25s;
}
.slop-callout[data-point="copy"] {
bottom: 35%;
right: 8%;
animation-delay: 0.4s;
}
.slop-callout[data-point="rounded"] {
bottom: 12%;
left: 10%;
animation-delay: 0.55s;
}
@keyframes calloutFadeIn {
from {
opacity: 0;
transform: scale(0.9);
}
to {
opacity: 1;
transform: scale(1);
}
}
/* Impeccable Card - With Design Skills */
.impeccable-card {
width: 280px;
height: 300px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
padding: var(--spacing-lg);
text-align: left;
display: flex;
flex-direction: column;
}
.impeccable-eyebrow {
font-family: var(--font-mono);
font-size: 0.625rem;
font-weight: 500;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--color-accent);
margin-bottom: var(--spacing-xs);
}
.impeccable-title {
font-family: var(--font-display);
font-size: 1.75rem;
font-weight: 300;
font-style: italic;
color: var(--color-ink);
margin-bottom: var(--spacing-sm);
line-height: 1.1;
}
.impeccable-body {
font-size: 0.875rem;
line-height: 1.6;
color: var(--color-ash);
margin-bottom: auto;
flex: 1;
}
.impeccable-button {
display: inline-flex;
margin-top: var(--spacing-sm);
padding: 0.625rem 1.5rem;
background: var(--color-ink);
color: var(--color-paper);
border: none;
font-family: var(--font-body);
font-size: 0.8125rem;
font-weight: 500;
letter-spacing: 0.03em;
cursor: pointer;
transition: all var(--duration-base) var(--ease-out);
align-self: flex-start;
}
.impeccable-button:hover {
background: var(--color-accent);
}
/* Split Labels */
.split-labels {
display: flex;
justify-content: center;
gap: var(--spacing-xl);
margin-top: var(--spacing-md);
}
.split-label-item {
display: flex;
align-items: center;
gap: var(--spacing-xs);
font-size: 0.8125rem;
color: var(--color-ash);
}
@media (max-width: 768px) {
.split-comparison {
padding: 8px;
margin-top: -8px;
margin-bottom: -8px;
}
.split-labels {
display: none;
}
}
.split-label-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--color-mist);
}
.split-label-dot--accent {
background: var(--color-accent);
}
/* ============================================
FOUNDATION SECTION
============================================ */
.foundation-section {
padding: var(--spacing-2xl) 0;
border-top: 1px solid var(--color-mist);
}
.foundation-content {
display: grid;
gap: var(--spacing-lg);
}
.foundation-grid {
display: flex;
align-items: flex-end;
height: 600px;
gap: var(--spacing-sm);
margin-top: -80px; /* Pull up into the header whitespace */
position: relative;
}
.foundation-column {
flex: 1;
display: flex;
flex-direction: column;
height: 100%;
justify-content: flex-end;
cursor: pointer;
min-width: 0;
}
.foundation-card {
padding: var(--spacing-md);
background: white;
border: 1px solid var(--color-bg);
border-radius: 12px;
display: flex;
flex-direction: column;
height: 280px;
margin-bottom: var(--spacing-xs);
transition: transform var(--duration-slow) var(--ease-out-quint), border-color var(--duration-base) var(--ease-out), box-shadow var(--duration-base) var(--ease-out);
position: relative;
z-index: 2;
box-sizing: border-box;
}
.foundation-column:hover .foundation-card {
transform: translateY(-12px);
border-color: var(--color-accent);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.08);
}
.foundation-plinth {
width: 100%;
background: repeating-linear-gradient(45deg, var(--color-bg), var(--color-bg) 2px, transparent 2px, transparent 10px);
border: 1px solid var(--color-mist);
border-bottom: none;
border-radius: 8px 8px 0 0;
transition: all var(--duration-base) var(--ease-out);
}
.foundation-column:hover .foundation-plinth {
background: var(--color-mist);
opacity: 0.7;
}
/* Plinth Heights - More dramatic steps */
.plinth-1 { height: 4%; }
.plinth-2 { height: 12%; }
.plinth-3 { height: 20%; }
.plinth-4 { height: 28%; }
.plinth-5 { height: 36%; }
.plinth-6 { height: 44%; }
.plinth-7 { height: 52%; }
.foundation-card-viz {
height: 52px;
display: flex;
align-items: center;
justify-content: flex-start;
color: var(--color-ink);
margin-bottom: var(--spacing-md);
}
.foundation-card-header {
display: flex;
align-items: baseline;
gap: var(--spacing-xs);
margin-bottom: 8px;
overflow: hidden;
}
.foundation-card-label {
font-family: var(--font-display);
font-size: 1.35rem;
color: var(--color-ink);
line-height: 1.1;
}
.foundation-card-count {
font-family: var(--font-mono);
font-size: 0.7rem;
color: var(--color-accent);
flex-shrink: 0;
}
.foundation-card-detail {
font-size: 0.875rem;
color: var(--color-ash);
line-height: 1.4;
margin: auto 0 0 0;
}
.foundation-svg {
width: 44px;
height: 44px;
}
/* Typography & Spatial (Breathing draw + full draw on hover) */
.anim-draw { stroke-dasharray: 100; stroke-dashoffset: 100; animation: draw-breathe 4s ease-in-out infinite; }
.foundation-column:hover .anim-draw { animation: draw-in 0.8s var(--ease-out) forwards; }
.anim-draw-delay { stroke-dasharray: 100; stroke-dashoffset: 100; }
.foundation-column:hover .anim-draw-delay { animation: draw-in 1s var(--ease-out) 0.2s forwards; }
@keyframes draw-breathe { 0%, 100% { stroke-dashoffset: 100; } 50% { stroke-dashoffset: 40; } }
@keyframes draw-in { from { stroke-dashoffset: 100; } to { stroke-dashoffset: 0; } }
/* Color & Contrast (Breathing pulse + spread on hover) */
.anim-move-x { animation: pulse-x 3s ease-in-out infinite; }
.foundation-column:hover .anim-move-x { animation: spread-x 0.6s var(--ease-in-out) forwards; }
.anim-move-x-opp { animation: pulse-x-opp 3s ease-in-out infinite; }
.foundation-column:hover .anim-move-x-opp { animation: spread-x-opp 0.6s var(--ease-in-out) forwards; }
.anim-fade-in { opacity: 0; transition: opacity 0.6s var(--ease-in-out); }
.foundation-column:hover .anim-fade-in { opacity: 1; }
@keyframes pulse-x { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(1.5px); } }
@keyframes pulse-x-opp { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(-1.5px); } }
@keyframes spread-x { from { transform: translateX(0); } to { transform: translateX(4px); } }
@keyframes spread-x-opp { from { transform: translateX(0); } to { transform: translateX(-4px); } }
/* Responsive (Staggered reflow from desktop 2-col to mobile stack) */
.anim-res-frame, .anim-res-img, .anim-res-title, .anim-res-line-1, .anim-res-line-2 {
transform-box: fill-box;
transform-origin: 50% 50%;
transition: transform 0.4s var(--ease-in-out);
}
.anim-res-frame { transition-delay: 0s; }
.anim-res-img { transition-delay: 0s; }
.anim-res-title { transition-delay: 0s; }
.anim-res-line-1 { transition-delay: 0s; }
.anim-res-line-2 { transition-delay: 0s; }
.foundation-column:hover .anim-res-frame { transform: scaleX(0.57) scaleY(1.17); transition-delay: 0s; }
.foundation-column:hover .anim-res-img { transform: translate(6px, -4px) scale(0.65); transition-delay: 0.05s; }
.foundation-column:hover .anim-res-title { transform: translate(-7px, 6px) scaleX(0.65); transition-delay: 0.1s; }
.foundation-column:hover .anim-res-line-1 { transform: translate(-7px, 4.75px) scaleX(0.65); transition-delay: 0.15s; }
.foundation-column:hover .anim-res-line-2 { transform: translate(-6px, 4.25px) scaleX(0.6); transition-delay: 0.2s; }
/* Interaction (Gentle wobble + full toggle on hover) */
.anim-toggle-move { animation: toggle-wobble 3s ease-in-out infinite; }
.foundation-column:hover .anim-toggle-move { animation: toggle-snap 0.35s var(--ease-in-out) forwards; }
@keyframes toggle-wobble { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(2px); } }
@keyframes toggle-snap { from { transform: translateX(0); fill: var(--color-mist); } to { transform: translateX(8px); fill: var(--color-accent); } }
/* Motion (Gentle bob + full bounce on hover) */
.anim-squash-ball { transform-origin: 20px 20px; animation: ball-bob 2.5s ease-in-out infinite; }
.foundation-column:hover .anim-squash-ball { animation: bounce-ball 1.5s linear infinite; }
@keyframes ball-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(3px); } }
@keyframes bounce-ball {
0% { transform: translateY(0); }
6% { transform: translateY(0.5px); }
18% { transform: translateY(4px); }
35% { transform: translateY(12px); }
42% { transform: translateY(12px) scaleX(1.3) scaleY(0.6); }
48% { transform: translateY(12px); }
65% { transform: translateY(4px); }
78% { transform: translateY(0.5px); }
88%, 100% { transform: translateY(0); }
}
/* UX Writing (Cursor always blinks) */
.anim-blink { animation: blink-key 1s step-end infinite; }
@keyframes blink-key { 0%, 100% { opacity: 1; } 50% { opacity: 0; } }
/* Tablet: 3-col grid (switch before stairs clip) */
@media (max-width: 1200px) {
.foundation-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
height: auto;
gap: var(--spacing-md);
margin-top: var(--spacing-xl);
}
.foundation-column { height: auto; }
.foundation-card { height: auto; min-height: 200px; }
.foundation-plinth { display: none; }
.foundation-column:hover .foundation-card { transform: translateY(-4px); }
/* Enable hover animations on card hover for grid */
.foundation-card:hover .anim-draw { animation: draw-in 0.8s var(--ease-out) forwards; }
.foundation-card:hover .anim-draw-delay { animation: draw-in 1s var(--ease-out) 0.2s forwards; }
.foundation-card:hover .anim-move-x { animation: spread-x 0.6s var(--ease-in-out) forwards; }
.foundation-card:hover .anim-move-x-opp { animation: spread-x-opp 0.6s var(--ease-in-out) forwards; }
.foundation-card:hover .anim-fade-in { opacity: 1; }
.foundation-card:hover .anim-res-frame { transform: scaleX(0.57) scaleY(1.17); }
.foundation-card:hover .anim-res-img { transform: translate(6px, -4px) scale(0.65); }
.foundation-card:hover .anim-res-title { transform: translate(-7px, 6px) scaleX(0.65); }
.foundation-card:hover .anim-res-line-1 { transform: translate(-7px, 4.75px) scaleX(0.65); }
.foundation-card:hover .anim-res-line-2 { transform: translate(-6px, 4.25px) scaleX(0.6); }
.foundation-card:hover .anim-toggle-move { animation: toggle-snap 0.35s var(--ease-in-out) forwards; }
.foundation-card:hover .anim-squash-ball { animation: bounce-ball 1.5s linear infinite; }
}
/* Small tablet: 2-col grid */
@media (max-width: 768px) {
.foundation-grid { grid-template-columns: repeat(2, 1fr); }
}
/* Small mobile: compact horizontal cards */
@media (max-width: 520px) {
.foundation-grid {
grid-template-columns: 1fr;
gap: var(--spacing-sm);
}
.foundation-card {
display: grid;
grid-template-columns: auto 1fr;
grid-template-rows: auto auto;
align-items: start;
min-height: auto;
padding: var(--spacing-sm) var(--spacing-md);
gap: 0 var(--spacing-md);
}
.foundation-card-viz {
grid-row: 1 / -1;
align-self: center;
height: auto;
margin-bottom: 0;
}
.foundation-card-header { margin-bottom: 2px; }
.foundation-card-label { font-size: 1.1rem; }
.foundation-card-detail { margin: 0; font-size: 0.8125rem; }
}
.foundation-cta {
text-align: center;
}
.foundation-cta-text {
font-size: 0.9375rem;
color: var(--color-charcoal);
margin: 0;
}
.foundation-cta-text code {
font-family: var(--font-mono);
font-size: 0.875rem;
color: var(--color-ink);
}
.foundation-slash {
color: var(--color-accent);
}
/* ============================================
LANGUAGE SECTION (wraps periodic table + commands)
============================================ */
.language-section {
padding: var(--spacing-2xl) 0;
border-top: 1px solid var(--color-mist);
}
.language-content {
display: grid;
gap: var(--spacing-lg);
}
/* Grid and flex items default to min-width: auto, which lets them expand to
fit their intrinsic content. The mobile commands layout has a split-compare
demo wide enough to blow out the entire section on mobile (~2400px wide).
Cascade min-width: 0 through every layer of the language section so the
intrinsic width can't propagate up the parent chain. */
.language-section,
.language-section * {
min-width: 0;
}
.language-content .section-lead {
margin-bottom: 0;
}
.commands-subsection {
display: grid;
gap: var(--spacing-md);
}
.commands-header-subtitle {
font-size: 0.9375rem;
color: var(--color-warm-gray);
margin: 0;
}
/* ============================================
VISUAL MODE SECTION
============================================ */
.visual-mode-section {
padding: var(--spacing-2xl) 0;
border-top: 1px solid var(--color-mist);
}
.visual-mode-content {
display: grid;
gap: var(--spacing-lg);
}
.visual-mode-demo {
display: grid;
grid-template-columns: 3fr 2fr;
gap: var(--spacing-xl);
align-items: start;
}
@media (max-width: 900px) {
.visual-mode-demo {
grid-template-columns: 1fr;
}
}
/* Browser chrome frame for the iframe */
.visual-mode-preview {
border-radius: 8px;
overflow: hidden;
border: 1px solid var(--color-mist);
box-shadow: 0 8px 30px -6px rgba(0,0,0,0.12);
}
.visual-mode-preview-header {
display: flex;
align-items: center;
gap: 6px;
padding: 10px 14px;
background: var(--color-cream);
border-bottom: 1px solid var(--color-mist);
}
.visual-mode-preview-dot {
width: 10px;
height: 10px;
border-radius: 50%;
}
.visual-mode-preview-dot.red { background: #ff5f56; }
.visual-mode-preview-dot.yellow { background: #ffbd2e; }
.visual-mode-preview-dot.green { background: #27c93f; }
.visual-mode-preview-title {
margin-left: auto;
font-family: var(--font-mono);
font-size: 0.75rem;
color: var(--color-ash);
}
.visual-mode-iframe {
display: block;
width: 100%;
height: 480px;
border: none;
background: white;
}
/* Details sidebar — editorial blocks, no cards.
The live detection overlay (left iframe) is the visual anchor for the
whole section; the right column should be quiet text + a single image
for the Chrome extension CTA. Hierarchy via typography + space, not
bordered containers. */
.visual-mode-details {
display: flex;
flex-direction: column;
gap: var(--spacing-xl);
padding: var(--spacing-md) 0;
}
.visual-mode-feature {
display: flex;
flex-direction: column;
gap: var(--spacing-xs);
}
.visual-mode-feature-label {
display: block;
font-family: var(--font-mono);
font-size: 0.6875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--color-accent);
}
.visual-mode-feature p {
font-size: 0.9375rem;
line-height: 1.55;
color: var(--color-charcoal);
margin: 0;
}
.visual-mode-feature code {
font-family: var(--font-mono);
font-size: 0.875rem;
color: var(--color-ink);
}
/* ============================================
SOLUTION SECTION (legacy styles for periodic table)
============================================ */
.solution-section {
padding: var(--spacing-2xl) 0;
}
.solution-content {
display: grid;
gap: var(--spacing-lg);
}
.solution-content .section-lead {
margin-bottom: 0;
}
/* Two-pillar visual layout */
.solution-visual {
display: grid;
grid-template-columns: 1fr auto 1fr;
gap: var(--spacing-lg);
align-items: stretch;
}
@media (max-width: 900px) {
.solution-visual {
grid-template-columns: 1fr;
gap: var(--spacing-md);
}
}
/* Interactive Framework Viz - Periodic Table */
.solution-visual-interactive {
width: 100%;
min-height: 380px;
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 8px;
position: relative;
overflow: visible;
}
.solution-pillar {
background: var(--color-cream);
border: 1px solid var(--color-mist);
padding: var(--spacing-lg);
transition: all var(--duration-base) var(--ease-out);
}
.solution-pillar:hover {
border-color: var(--color-accent);
transform: translateY(-4px);
box-shadow: 0 20px 60px var(--color-accent-dim);
}
.pillar-header {
text-align: center;
margin-bottom: var(--spacing-lg);
padding-bottom: var(--spacing-md);
border-bottom: 1px solid var(--color-mist);
}
.pillar-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 56px;
height: 56px;
border-radius: 50%;
background: var(--color-accent-dim);
color: var(--color-accent);
margin-bottom: var(--spacing-sm);
}
.pillar-title {
font-family: var(--font-display);
font-size: 1.75rem;
font-weight: 400;
margin: 0 0 var(--spacing-xs);
}
.pillar-subtitle {
font-size: 0.875rem;
color: var(--color-ash);
margin: 0;
}
.pillar-content {
display: flex;
flex-direction: column;
gap: var(--spacing-sm);
}
.pillar-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--spacing-sm);
background: var(--color-paper);
border-radius: 4px;
transition: all var(--duration-fast) var(--ease-out);
}
.pillar-item:hover {
background: var(--color-accent-dim);
}
.pillar-item-name {
font-weight: 500;
color: var(--color-ink);
font-size: 0.9375rem;
}
.pillar-item-code {
font-family: var(--font-mono);
font-size: 0.875rem;
font-weight: 500;
color: var(--color-accent);
background: transparent;
padding: 0;
}
.pillar-item-desc {
font-size: 0.75rem;
color: var(--color-ash);
}
.pillar-item--more {
justify-content: center;
font-size: 0.8125rem;
font-weight: 500;
color: var(--color-accent);
background: transparent;
border: 1px dashed var(--color-mist);
}
/* Connector between pillars */
.solution-connector {
display: flex;
align-items: center;
justify-content: center;
}
.connector-plus {
font-family: var(--font-display);
font-size: 3rem;
font-weight: 300;
color: var(--color-accent);
opacity: 0.5;
}
@media (max-width: 900px) {
.solution-connector {
padding: var(--spacing-sm) 0;
}
.connector-plus {
font-size: 2rem;
}
}
/* ============================================
SKILLS SECTION
============================================ */
.skills-section {
padding: var(--spacing-2xl) 0;
border-top: 1px solid var(--color-mist);
}
.skills-gallery {
display: grid;
grid-template-columns: 200px 1fr;
gap: var(--spacing-xl);
align-items: start;
}
@media (max-width: 968px) {
.skills-gallery {
grid-template-columns: 1fr;
gap: var(--spacing-lg);
}
}
.skills-nav {
display: flex;
flex-direction: column;
gap: 2px;
position: sticky;
top: var(--spacing-lg);
}
@media (max-width: 968px) {
.skills-nav {
flex-direction: row;
flex-wrap: wrap;
gap: var(--spacing-xs);
position: static;
}
}
.skill-nav-item {
padding: var(--spacing-sm) var(--spacing-md);
background: transparent;
border: none;
border-left: 2px solid transparent;
color: var(--color-ash);
font-family: var(--font-body);
font-size: 0.9375rem;
font-weight: 400;
cursor: pointer;
transition: all 0.2s ease;
text-align: left;
text-decoration: none;
display: block;
}
.skill-nav-item:hover {
color: var(--color-text);
background: var(--color-cream);
}
.skill-nav-item.active {
color: var(--color-accent);
border-left-color: var(--color-accent);
background: var(--color-accent-dim);
font-weight: 500;
}
@media (max-width: 968px) {
.skill-nav-item {
border-left: none;
border-bottom: 2px solid transparent;
padding: var(--spacing-xs) var(--spacing-md);
}
.skill-nav-item.active {
border-bottom-color: var(--color-accent);
}
}
.skills-showcase {
display: grid;
grid-template-columns: 1.2fr 1fr;
gap: var(--spacing-lg);
align-items: start;
}
@media (max-width: 1100px) {
.skills-showcase {
grid-template-columns: 1fr;
}
}
.loading-state {
padding: var(--spacing-xl);
text-align: center;
color: var(--color-ash);
font-style: italic;
}
/* ============================================
MOBILE COMMANDS LAYOUT
============================================ */
.mobile-commands-layout {
display: none;
}
@media (max-width: 900px) {
.mobile-commands-layout {
display: flex;
flex-direction: column;
gap: var(--spacing-md);
/* Without min-width: 0, the flex container expands to fit any intrinsically
wide descendant (the split-compare demo blows it out to ~2400px otherwise).
The same constraint cascades to direct children via the next rule. */
min-width: 0;
width: 100%;
}
.mobile-commands-layout > * {
min-width: 0;
max-width: 100%;
}
.commands-container {
display: none;
}
}
.mobile-carousel-wrapper {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
scrollbar-width: none;
padding: var(--spacing-xs) 0;
}
.mobile-carousel-wrapper::-webkit-scrollbar {
display: none;
}
.mobile-carousel {
display: flex;
gap: var(--spacing-xs);
padding-right: var(--spacing-md);
}
.mobile-cmd-pill {
flex-shrink: 0;
padding: var(--spacing-sm) var(--spacing-md);
min-height: 44px;
font-family: var(--font-mono);
font-size: 0.8125rem;
font-weight: 500;
color: var(--color-charcoal);
background: none;
border: none;
border-radius: 100px;
cursor: pointer;
transition: background 0.2s ease, color 0.2s ease;
white-space: nowrap;
}
.mobile-cmd-pill:hover {
background: var(--color-mist);
}
.mobile-cmd-pill.active {
color: var(--color-paper);
background: var(--color-ink);
}
.mobile-demo-area {
padding: 0;
}
.mobile-demo-area .demo-split-comparison {
width: 100%;
}
.mobile-demo-area .split-container {
width: 100%;
max-width: 100%;
height: 320px;
}
.mobile-demo-area .demo-caption {
font-size: 0.75rem;
margin-top: var(--spacing-sm);
}
.mobile-info-area {
padding-top: var(--spacing-sm);
}
.mobile-cmd-info {
display: none;
padding: var(--spacing-sm) 0;
}
.mobile-cmd-info.active {
display: block;
}
.mobile-cmd-name {
font-family: var(--font-mono);
font-size: 1.125rem;
font-weight: 600;
color: var(--color-ink);
margin: 0 0 var(--spacing-xs) 0;
}
.mobile-cmd-desc {
font-size: 0.875rem;
color: var(--color-charcoal);
line-height: 1.5;
margin: 0;
}
.mobile-cmd-rel {
margin-top: var(--spacing-xs);
font-size: 0.75rem;
color: var(--color-ash);
}
.mobile-cmd-rel code {
font-family: var(--font-mono);
color: var(--color-ink);
}
/* ============================================
DOWNLOADS SECTION
============================================ */
.downloads-section {
padding: var(--spacing-2xl) 0;
border-top: 1px solid var(--color-mist);
}
.downloads-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: var(--spacing-lg);
}
.download-card {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
padding: var(--spacing-lg);
background: var(--color-cream);
border: 1px solid var(--color-mist);
transition: all var(--duration-base) var(--ease-out);
}
.download-card:hover {
border-color: var(--color-accent);
transform: translateY(-4px);
box-shadow: 0 20px 60px var(--color-accent-dim);
}
.download-card-icon {
margin-bottom: var(--spacing-sm);
}
.download-card-icon img {
width: 40px;
height: 40px;
object-fit: contain;
border-radius: 8px;
}
.download-card-title {
font-family: var(--font-display);
font-size: 1.25rem;
font-weight: 400;
margin: 0 0 var(--spacing-sm) 0;
}
.download-card-note {
font-size: 0.75rem;
color: var(--color-ash);
margin-bottom: var(--spacing-xs);
}
.download-card .btn {
margin-top: var(--spacing-xs);
}
/* Install command box */
.install-command {
display: flex;
align-items: center;
gap: var(--spacing-xs);
background: var(--color-paper);
border: 1px solid var(--color-mist);
border-radius: 6px;
padding: var(--spacing-sm);
margin-top: var(--spacing-sm);
width: 100%;
}
.install-command code {
flex: 1;
font-family: var(--font-mono);
font-size: 0.75rem;
color: var(--color-ink);
background: transparent;
padding: 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.copy-btn {
display: flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
background: transparent;
border: 1px solid var(--color-mist);
border-radius: 4px;
color: var(--color-ash);
cursor: pointer;
flex-shrink: 0;
transition: all var(--duration-fast) var(--ease-out);
}
.copy-btn:hover {
background: var(--color-accent-dim);
border-color: var(--color-accent);
color: var(--color-accent);
}
.copy-btn.copied {
background: var(--color-accent);
border-color: var(--color-accent);
color: var(--color-paper);
}
.install-hint {
font-size: 0.75rem;
color: var(--color-ash);
margin: var(--spacing-xs) 0 0 0;
}
.install-hint code {
font-family: var(--font-mono);
font-size: 0.6875rem;
background: var(--color-mist);
padding: 2px 5px;
border-radius: 3px;
}
.download-card-details {
width: 100%;
margin-top: var(--spacing-sm);
font-size: 0.8125rem;
text-align: left;
}
.download-card-details summary {
cursor: pointer;
color: var(--color-ash);
font-size: 0.75rem;
padding: var(--spacing-xs) 0;
list-style: none;
display: flex;
align-items: center;
justify-content: center;
gap: 4px;
}
.download-card-details summary::before {
content: '▶';
font-size: 0.5rem;
transition: transform var(--duration-fast) var(--ease-out);
}
.download-card-details[open] summary::before {
transform: rotate(90deg);
}
.download-card-details summary::-webkit-details-marker {
display: none;
}
.download-card-details ol {
margin: var(--spacing-sm) 0;
padding-left: var(--spacing-md);
color: var(--color-charcoal);
line-height: 1.6;
}
.download-card-details li {
margin-bottom: 4px;
}
.download-card-details code {
font-family: var(--font-mono);
font-size: 0.6875rem;
background: var(--color-mist);
padding: 2px 5px;
border-radius: 3px;
}
.download-card-details a {
color: var(--color-accent);
text-decoration: none;
font-size: 0.75rem;
}
.download-card-details a:hover {
text-decoration: underline;
}
/* ============================================
OPEN SOURCE SECTION
============================================ */
.opensource-section {
padding: var(--spacing-2xl) 0;
border-top: 1px solid var(--color-mist);
text-align: center;
}
.opensource-content {
max-width: 500px;
margin: 0 auto;
display: flex;
flex-direction: column;
align-items: center;
gap: var(--spacing-md);
}
.opensource-title {
font-size: clamp(1.5rem, 4vw, 2rem);
font-weight: 300;
}
.opensource-desc {
font-size: 1.125rem;
color: var(--color-ash);
line-height: 1.6;
}
/* ============================================
FOOTER
============================================ */
.site-footer {
border-top: 1px solid var(--color-mist);
padding: var(--spacing-xl) var(--spacing-lg);
background: var(--color-cream);
}
/* Single horizontal row: wordmark left, nav centered, credit right.
Three groups, no two-tier split, no dividers. */
.footer-row {
max-width: var(--width-max);
margin: 0 auto;
display: grid;
grid-template-columns: auto 1fr auto;
align-items: center;
gap: var(--spacing-xl);
}
.footer-logo {
font-family: var(--font-display);
font-size: 1.25rem;
font-weight: 400;
color: var(--color-ink);
text-decoration: none;
}
.footer-links {
display: flex;
justify-content: center;
gap: var(--spacing-lg);
flex-wrap: wrap;
}
.footer-links a {
font-size: 0.875rem;
color: var(--color-ash);
text-decoration: none;
transition: color var(--duration-fast) var(--ease-out);
}
.footer-links a:hover {
color: var(--color-accent);
}
.footer-credit {
display: flex;
align-items: center;
gap: var(--spacing-sm);
font-size: 0.875rem;
color: var(--color-ash);
white-space: nowrap;
}
.footer-credit a {
color: var(--color-text);
text-decoration: none;
transition: color var(--duration-fast) var(--ease-out);
}
.footer-credit a:hover {
color: var(--color-accent);
}
.footer-social-link {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 4px;
color: var(--color-ash);
transition: color var(--duration-fast) var(--ease-out);
}
.footer-social-link:hover {
color: var(--color-accent);
}
@media (max-width: 900px) {
.footer-row {
grid-template-columns: 1fr;
justify-items: center;
text-align: center;
gap: var(--spacing-md);
}
.footer-links {
justify-content: center;
gap: var(--spacing-sm) var(--spacing-md);
font-size: 0.8125rem;
}
.site-footer {
padding: var(--spacing-lg) var(--spacing-md);
}
}
/* ============================================
BUTTONS
============================================ */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--spacing-xs);
padding: 1rem 2rem;
font-family: var(--font-body);
font-size: 0.9375rem;
font-weight: 600;
letter-spacing: 0.03em;
border: none;
cursor: pointer;
transition: all var(--duration-base) var(--ease-out);
position: relative;
overflow: hidden;
text-decoration: none;
}
.btn-primary {
background: var(--color-ink);
color: var(--color-paper);
}
.btn-primary::before {
content: '';
position: absolute;
inset: 0;
background: var(--color-accent);
transform: translateY(100%);
transition: transform var(--duration-base) var(--ease-out);
z-index: 0;
}
.btn-primary:hover::before {
transform: translateY(0);
}
.btn-primary:hover {
color: var(--color-paper);
}
.btn-primary span,
.btn-primary svg {
position: relative;
z-index: 1;
}
/* For buttons without span wrapper */
.btn-primary:not(:has(span)) {
position: relative;
z-index: 1;
}
.btn-secondary {
background: transparent;
color: var(--color-ink);
border: 1px solid var(--color-ink);
}
.btn-secondary:hover {
background: var(--color-ink);
color: var(--color-paper);
}
/* Focus styles for all buttons */
.btn:focus-visible {
outline: 2px solid var(--color-accent);
outline-offset: 2px;
}
.btn-primary:focus-visible {
outline-color: var(--color-paper);
box-shadow: 0 0 0 4px var(--color-accent);
}
.btn-secondary:focus-visible {
outline-color: var(--color-accent);
}
/* ============================================
ANIMATIONS
============================================ */
@keyframes revealUp {
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeIn {
to {
opacity: 1;
}
}
@keyframes float {
0%, 100% { transform: translateX(-50%) translateY(0); }
50% { transform: translateX(-50%) translateY(-8px); }
}
@keyframes bounce {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(4px); }
}
/* Reveal animation for scroll */
[data-reveal] {
opacity: 0;
transform: translateY(30px);
transition: opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out);
}
[data-reveal].revealed {
opacity: 1;
transform: translateY(0);
}
/* Staggered reveals */
[data-reveal]:nth-child(1) { transition-delay: 0s; }
[data-reveal]:nth-child(2) { transition-delay: 0.1s; }
[data-reveal]:nth-child(3) { transition-delay: 0.2s; }
[data-reveal]:nth-child(4) { transition-delay: 0.3s; }
/* ============================================
REDUCED MOTION (Accessibility)
============================================ */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
/* Allow smooth scrolling to remain for anchor links only if user explicitly triggers */
html {
scroll-behavior: auto;
}
/* Disable hero canvas animation */
.hero-canvas {
display: none;
}
/* Disable scroll indicator animation */
.hero-scroll-indicator {
animation: none;
opacity: 1;
}
/* Disable reveal animations - show content immediately */
[data-reveal] {
opacity: 1;
transform: none;
}
/* Disable gallery frame transitions */
.gallery-frame {
opacity: 1;
transform: none;
}
}
/* ============================================
ERROR STATES
============================================ */
.load-error {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
padding: var(--spacing-2xl) var(--spacing-lg);
gap: var(--spacing-md);
background: var(--color-cream);
border: 1px solid var(--color-mist);
border-radius: 8px;
}
.load-error-icon {
font-size: 2.5rem;
color: var(--color-accent);
}
.load-error-title {
font-family: var(--font-display);
font-size: 1.5rem;
font-weight: 400;
color: var(--color-ink);
margin: 0;
}
.load-error-text {
font-size: 1rem;
color: var(--color-ash);
max-width: 40ch;
line-height: 1.5;
}
.load-error-retry {
margin-top: var(--spacing-sm);
}
/* ============================================
BIAS TAGS (Compact Problem Section)
============================================ */
.bias-tags {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--spacing-sm);
margin-top: var(--spacing-lg);
}
.bias-tags-label {
font-family: var(--font-mono);
font-size: 0.6875rem;
font-weight: 500;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--color-ash);
}
.bias-tags-list {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: var(--spacing-xs);
}
.bias-tag {
font-size: 0.75rem;
font-weight: 500;
padding: 6px 12px;
background: var(--color-cream);
border: 1px solid var(--color-mist);
color: var(--color-charcoal);
transition: all var(--duration-fast) var(--ease-out);
}
.bias-tag:hover {
border-color: var(--color-accent);
color: var(--color-accent);
}
/* ============================================
ANTIDOTE SECTION
============================================ */
.antidote-section {
padding: var(--spacing-2xl) 0;
border-top: 1px solid var(--color-mist);
}
/* Antidote row: patterns + gallery side by side */
.antidote-row {
display: flex;
gap: var(--spacing-xl);
align-items: stretch;
margin-bottom: var(--spacing-xl);
}
.antidote-row .patterns-tabbed {
flex: 1;
min-width: 0;
margin-bottom: 0;
}
/* Gallery of Shame — 3D card stack */
.gallery-stack-container {
flex: 0 0 clamp(320px, 34vw, 420px);
display: flex;
flex-direction: column;
gap: var(--spacing-xs);
position: relative;
}
/* Header: ← Gallery of Shame → */
.gallery-stack-header {
display: flex;
align-items: center;
gap: var(--spacing-xs);
white-space: nowrap;
}
.gallery-stack-title {
font-family: var(--font-display);
font-size: 1rem;
font-weight: 600;
color: var(--color-ink);
flex: 1;
}
.gallery-stack-btn {
width: 24px;
height: 24px;
border-radius: 50%;
border: 1px solid var(--color-mist);
background: white;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.6875rem;
color: var(--color-charcoal);
flex-shrink: 0;
transition: border-color var(--duration-fast), background var(--duration-fast);
position: relative;
}
/* Invisible 44px touch target */
.gallery-stack-btn::after {
content: '';
position: absolute;
inset: -10px;
}
.gallery-stack-btn:hover {
border-color: var(--color-charcoal);
}
/* Card stack — stacked deck offset to bottom-right */
.gallery-stack {
position: relative;
width: calc(100% - 20px);
aspect-ratio: 3 / 2;
margin-bottom: 20px;
}
.gallery-stack-card {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
border-radius: 8px;
overflow: hidden;
border: 1px solid var(--color-mist);
text-decoration: none;
background: white;
transition: transform 0.45s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.35s ease, box-shadow 0.35s ease;
will-change: transform, opacity;
}
.gallery-stack-card img {
flex: 1;
min-height: 0;
width: 100%;
object-fit: cover;
object-position: top left;
}
.gallery-stack-label {
padding: 6px 10px;
font-size: 0.75rem;
font-weight: 600;
color: var(--color-charcoal);
flex-shrink: 0;
}
/* Stack depth: cards peek behind at bottom-right */
.gallery-stack-card[data-offset="0"] {
z-index: 3;
transform: translate(0, 0);
opacity: 1;
box-shadow: 0 2px 12px oklch(0.2 0 0 / 0.1);
}
.gallery-stack-card[data-offset="1"] {
z-index: 2;
transform: translate(8px, 8px);
opacity: 1;
box-shadow: 0 1px 6px oklch(0.2 0 0 / 0.08);
pointer-events: none;
}
.gallery-stack-card[data-offset="2"] {
z-index: 1;
transform: translate(16px, 16px);
opacity: 1;
box-shadow: 0 1px 4px oklch(0.2 0 0 / 0.06);
pointer-events: none;
}
.gallery-stack-card:not([data-offset="0"]):not([data-offset="1"]):not([data-offset="2"]) {
z-index: 0;
transform: translate(20px, 20px);
opacity: 0;
pointer-events: none;
}
.gallery-stack-link {
font-size: 0.75rem;
font-weight: 500;
color: var(--color-accent);
text-decoration: none;
text-align: center;
}
.gallery-stack-link:hover {
text-decoration: underline;
}
@media (max-width: 900px) {
.antidote-row {
flex-direction: column;
}
.gallery-stack-container {
flex: none;
width: 100%;
max-width: 360px;
}
}
/* ---- Pattern tabs ---- */
.patterns-tabbed {
margin-bottom: var(--spacing-xl);
background: white;
border-radius: 8px;
padding: var(--spacing-lg);
}
.patterns-tabs {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-bottom: var(--spacing-md);
}
@media (max-width: 768px) {
.patterns-tabs {
flex-wrap: nowrap;
overflow-x: auto;
scrollbar-width: none;
-webkit-overflow-scrolling: touch;
margin-left: calc(-1 * var(--spacing-lg));
margin-right: calc(-1 * var(--spacing-lg));
padding-left: var(--spacing-lg);
padding-right: var(--spacing-lg);
}
.patterns-tabs::-webkit-scrollbar {
display: none;
}
}
.patterns-tab {
font-family: var(--font-body);
font-size: 0.75rem;
font-weight: 500;
color: var(--color-charcoal);
background: none;
border: none;
border-radius: 100px;
padding: 6px 12px;
cursor: pointer;
white-space: nowrap;
transition: background 0.2s ease, color 0.2s ease;
}
.patterns-tab:hover {
background: var(--color-mist);
}
.patterns-tab.is-active {
background: var(--color-ink);
color: var(--color-paper);
}
.patterns-content {
display: none;
}
.patterns-content.is-active {
display: flex;
flex-direction: column;
gap: var(--spacing-md);
}
.patterns-col ul {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: 6px;
}
.patterns-col li {
font-size: 0.8125rem;
line-height: 1.55;
padding-left: var(--spacing-sm);
position: relative;
color: var(--color-charcoal);
overflow-wrap: break-word;
word-break: break-word;
}
.patterns-col--dont li::before {
content: '\00d7';
position: absolute;
left: 0;
color: var(--color-accent);
font-weight: 600;
}
.patterns-col--do li::before {
content: '\2713';
position: absolute;
left: 0;
color: var(--color-success, #22c55e);
font-weight: 600;
}
/* Detection callout — flat editorial CTA, no card chrome.
Image thumbnail on the left, NEW eyebrow + CTA stacked on the right.
The whole element is a clickable anchor. Hover shifts color, no
transform or shadow theatrics. */
.detection-callout {
display: flex;
align-items: center;
gap: var(--spacing-md);
text-decoration: none;
color: inherit;
}
.detection-callout-image {
display: block;
width: 88px;
height: 88px;
flex-shrink: 0;
object-fit: cover;
object-position: top left;
border: 1px solid var(--color-mist);
border-radius: 6px;
transition: border-color 0.2s ease;
}
.detection-callout:hover .detection-callout-image {
border-color: var(--color-accent);
}
.detection-callout-inner {
flex: 1;
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: center;
gap: 8px;
}
.detection-badge {
font-family: var(--font-mono);
font-size: 0.6875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--color-accent);
border: 1px solid var(--color-accent);
padding: 3px 10px;
border-radius: 99px;
flex-shrink: 0;
}
.detection-desc {
flex: 1;
font-size: 0.8125rem;
line-height: 1.55;
color: var(--color-ash);
min-width: 200px;
}
.detection-desc code {
font-family: var(--font-mono);
font-size: 0.8125rem;
color: var(--color-charcoal);
}
.detection-cmd {
flex-shrink: 0;
font-family: var(--font-body);
font-size: 0.875rem;
font-weight: 600;
color: var(--color-ink);
white-space: nowrap;
transition: color 0.15s ease;
}
.detection-callout:hover .detection-cmd {
color: var(--color-accent);
}
/* Antidote footer */
.antidote-footer {
text-align: center;
}
.antidote-suggest-link {
font-size: 0.8125rem;
color: var(--color-ash);
text-decoration: none;
}
.antidote-suggest-link:hover {
color: var(--color-accent);
text-decoration: underline;
}
/* ============================================
SOLUTION SECTION ENHANCEMENTS
============================================ */
/* Main skill item styling */
.pillar-item--main {
background: var(--color-accent-dim);
border: 1px solid var(--color-accent);
}
.pillar-item--main .pillar-item-name {
font-size: 1.125rem;
font-weight: 600;
color: var(--color-accent);
}
.pillar-item--ref {
background: transparent;
padding: var(--spacing-xs) var(--spacing-sm);
}
.pillar-item-label {
font-size: 0.75rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--color-ash);
}
/* Reference domain tags */
.pillar-refs {
display: flex;
flex-wrap: wrap;
gap: var(--spacing-xs);
padding: 0 var(--spacing-sm);
}
.pillar-ref {
font-size: 0.6875rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.03em;
padding: 4px 10px;
background: var(--color-paper);
color: var(--color-ash);
border: 1px solid var(--color-mist);
border-radius: 3px;
transition: all var(--duration-fast) var(--ease-out);
}
.pillar-ref:hover {
border-color: var(--color-accent);
color: var(--color-accent);
}
/* Command groups */
.pillar-command-group {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--spacing-xs);
padding: var(--spacing-sm);
background: var(--color-paper);
border-radius: 4px;
}
.pillar-group-label {
font-size: 0.6875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--color-ash);
width: 100%;
margin-bottom: 4px;
}
.pillar-command-group .pillar-item-code {
font-size: 0.8125rem;
padding: 4px 8px;
background: var(--color-accent-dim);
border-radius: 3px;
}
/* ============================================
PLATFORMS SECTION (alias for downloads)
============================================ */
.platforms-section {
padding: var(--spacing-2xl) 0;
border-top: 1px solid var(--color-mist);
}
@media (min-width: 1100px) {
.platforms-section {
border-top: none;
}
}
.platforms-section .section-subtitle {
max-width: 60ch;
}
/* Two-path install layout */
.install-paths {
display: grid;
grid-template-columns: 5fr 3fr 3fr;
gap: 0 var(--spacing-xl);
align-items: start;
margin: 0 0 var(--spacing-xl);
}
.install-path {
display: flex;
flex-direction: column;
min-width: 0;
}
.install-path-primary {
background: white;
border-radius: 16px;
padding: var(--spacing-lg);
}
.install-path-label {
font-family: var(--font-mono);
font-size: 0.625rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.14em;
color: var(--color-accent);
}
.install-path:not(.install-path-primary) {
padding-top: var(--spacing-lg);
}
.install-path-secondary .install-path-label {
color: var(--color-ash);
}
.install-path-title {
font-family: var(--font-display);
font-size: 1.5rem;
font-weight: 600;
margin: var(--spacing-xs) 0 var(--spacing-sm);
line-height: 1.2;
}
/* titles unified - no size override for step 3 */
.install-path-badge {
font-family: var(--font-mono);
font-size: 0.5rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--color-accent);
border: 1px solid var(--color-accent);
border-radius: 3px;
padding: 2px 6px;
vertical-align: middle;
margin-left: 6px;
position: relative;
top: -2px;
}
.install-path-badge-muted {
color: var(--color-ash);
border-color: var(--color-mist);
}
.install-path-desc {
font-size: 0.9375rem;
line-height: 1.6;
color: var(--color-charcoal);
margin: 0 0 var(--spacing-md);
}
.terminal-header-license {
margin-left: auto;
font-size: 0.6875rem;
color: oklch(65% 0.01 350);
letter-spacing: 0.01em;
}
.terminal-header-license a {
color: inherit;
text-decoration: underline;
text-decoration-color: oklch(85% 0.005 350);
text-underline-offset: 2px;
}
.terminal-header-license a:hover {
color: var(--color-charcoal);
}
/* removed - unified font sizes across columns */
.install-path-terminal {
margin-bottom: var(--spacing-sm);
}
.install-path-terminal .glass-terminal {
height: auto;
}
.install-path-terminal .terminal-body {
padding: 0;
}
.install-path-next {
font-size: 0.8125rem;
color: var(--color-charcoal);
line-height: 1.5;
margin-top: auto;
padding-top: var(--spacing-md);
}
.install-path-next code {
font-family: var(--font-mono);
font-size: 0.8125rem;
font-weight: 600;
color: var(--color-ink);
}
.install-path-slash {
color: var(--color-accent);
}
.install-path-subcommands {
display: flex;
flex-direction: column;
gap: 6px;
margin-top: var(--spacing-sm);
}
.install-path-subcommand {
font-size: 0.75rem;
color: var(--color-charcoal);
line-height: 1.4;
}
.install-path-subcommand code {
font-family: var(--font-mono);
font-size: 0.6875rem;
font-weight: 600;
color: var(--color-ink);
background: var(--color-mist);
padding: 2px 6px;
border-radius: 3px;
margin-right: 4px;
}
.install-path-link {
margin-top: auto;
padding-top: var(--spacing-md);
font-size: 0.8125rem;
}
.install-path-link a {
color: var(--color-accent);
text-decoration: none;
}
.install-path-link a:hover {
text-decoration: underline;
}
/* Better together callout */
.install-together {
max-width: 960px;
margin: 0 0 var(--spacing-xl);
border: 1px solid var(--color-mist);
border-radius: 8px;
padding: var(--spacing-sm) var(--spacing-md);
}
.install-together-inner {
display: flex;
align-items: center;
gap: var(--spacing-md);
}
.install-together-badge {
font-family: var(--font-mono);
font-size: 0.625rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--color-accent);
border: 1px solid var(--color-accent);
padding: 2px 10px;
border-radius: 99px;
flex-shrink: 0;
white-space: nowrap;
}
.install-together-text {
font-size: 0.8125rem;
line-height: 1.55;
color: var(--color-ash);
margin: 0;
}
/* Inline step numbers in path labels */
.install-path-step {
display: inline-flex;
align-items: center;
justify-content: center;
width: 18px;
height: 18px;
border-radius: 50%;
border: 1.5px solid currentColor;
font-size: 0.5rem;
font-weight: 700;
line-height: 1;
margin-right: 4px;
vertical-align: 1px;
}
/* Stay updated (third column) */
.install-updated-subscribe {
display: flex;
flex-direction: column;
gap: var(--spacing-sm);
margin-bottom: var(--spacing-md);
}
.install-updated-subscribe iframe {
display: block;
max-width: 100%;
}
.install-updated-x {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 0.8125rem;
font-weight: 600;
color: var(--color-ink);
text-decoration: none;
transition: color var(--duration-fast) var(--ease-out);
}
.install-updated-x:hover {
color: var(--color-accent);
}
.install-updated-refs {
margin-top: auto;
padding-top: var(--spacing-md);
border-top: 1px solid var(--color-mist);
}
.install-updated-refs-label {
display: block;
font-family: var(--font-mono);
font-size: 0.5625rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--color-ash);
margin-bottom: 8px;
}
.install-updated-ref {
display: block;
font-size: 0.8125rem;
color: var(--color-charcoal);
text-decoration: none;
margin-bottom: 6px;
transition: color var(--duration-fast) var(--ease-out);
}
a.install-updated-ref:hover {
color: var(--color-accent);
}
.install-updated-ref-terminal {
display: flex;
align-items: center;
gap: var(--spacing-xs);
font-family: var(--font-mono);
font-size: 0.75rem;
color: var(--color-charcoal);
background: var(--color-cream);
border: 1px solid var(--color-mist);
border-radius: 6px;
padding: 6px 10px;
margin-top: 8px;
}
.install-updated-ref-terminal .terminal-prompt {
color: var(--color-ash);
font-size: 0.75rem;
}
.install-updated-ref-terminal code {
font-family: inherit;
font-size: inherit;
background: none;
padding: 0;
color: var(--color-ink);
}
@media (max-width: 900px) {
.install-paths {
grid-template-columns: 1fr;
gap: var(--spacing-xl);
max-width: calc(100vw - var(--spacing-md) * 2);
}
.install-path-primary {
margin-bottom: var(--spacing-sm);
padding: var(--spacing-md);
}
.install-path-title {
font-size: 1.25rem;
}
.install-path-desc {
font-size: 0.875rem;
overflow-wrap: break-word;
}
.install-together-inner {
flex-direction: column;
align-items: flex-start;
gap: var(--spacing-xs);
}
.install-updated-subscribe iframe {
height: 130px;
}
.install-terminal-cmd code {
font-size: 0.75rem;
white-space: normal;
overflow-wrap: break-word;
}
.install-alt-method {
padding: var(--spacing-sm);
}
.install-alt-method .install-terminal-cmd code {
font-size: 0.6875rem;
white-space: normal;
overflow-wrap: break-word;
}
.install-alt-method .install-terminal-cmd .copy-btn {
display: none;
}
.install-path-terminal .glass-terminal {
box-shadow: none;
}
.install-terminal {
max-width: 100%;
}
.install-alternatives {
max-width: 100%;
}
}
/* Install terminal (glass terminal style) */
.install-terminal {
max-width: 640px;
margin: 0 auto;
}
.install-terminal .glass-terminal {
height: auto;
}
.install-terminal .terminal-body {
padding: 0;
display: flex;
flex-direction: column;
}
.install-terminal-row {
display: flex;
flex-direction: column;
gap: 6px;
padding: var(--spacing-md) var(--spacing-lg);
}
.install-terminal-label {
font-family: var(--font-mono);
font-size: 0.625rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--color-ash);
}
.install-terminal-cmd {
display: flex;
align-items: center;
gap: var(--spacing-sm);
}
.install-terminal-cmd .terminal-prompt {
flex-shrink: 0;
}
.install-terminal-cmd code {
flex: 1;
font-family: var(--font-mono);
font-size: 0.9375rem;
color: var(--color-ink);
background: transparent;
padding: 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.install-terminal-cmd .copy-btn {
flex-shrink: 0;
}
.install-terminal-cmd .btn {
padding: 0.5rem 1rem;
font-size: 0.8125rem;
}
.install-terminal-note {
font-size: 0.75rem;
color: var(--color-ash);
padding-left: calc(0.75rem + var(--spacing-sm)); /* align with code after prompt */
}
.install-terminal-note code {
font-family: var(--font-mono);
font-size: 0.6875rem;
background: var(--color-mist);
padding: 2px 5px;
border-radius: 3px;
color: var(--color-ink);
}
.install-terminal-divider {
height: 1px;
background: var(--color-mist);
margin: 0;
}
@media (max-width: 600px) {
.install-terminal-row {
padding: var(--spacing-sm) var(--spacing-md);
}
.install-terminal-cmd code {
font-size: 0.75rem;
}
}
/* Works with provider badges */
.install-providers {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--spacing-sm);
margin-top: var(--spacing-md);
}
.install-providers-label {
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--color-ash);
}
.install-providers-row {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: var(--spacing-sm);
}
.install-provider-badge {
display: flex;
align-items: center;
gap: 6px;
font-size: 0.8125rem;
color: var(--color-charcoal);
}
.install-provider-badge img {
border-radius: 4px;
}
/* Install alternatives (collapsible) */
.install-alternatives {
max-width: 640px;
margin: var(--spacing-sm) auto 0;
}
.install-alternatives-toggle {
font-family: var(--font-mono);
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--color-ash);
cursor: pointer;
padding: var(--spacing-sm) 0;
list-style: none;
display: flex;
align-items: center;
gap: 6px;
transition: color var(--duration-fast) var(--ease-out);
}
.install-alternatives-toggle::-webkit-details-marker {
display: none;
}
.install-alternatives-toggle::before {
content: '';
display: inline-block;
width: 0;
height: 0;
border-left: 5px solid currentColor;
border-top: 4px solid transparent;
border-bottom: 4px solid transparent;
transition: transform var(--duration-fast) var(--ease-out);
}
.install-alternatives[open] .install-alternatives-toggle::before {
transform: rotate(90deg);
}
.install-alternatives-toggle:hover {
color: var(--color-charcoal);
}
.install-alternatives-content {
animation: altFadeIn 0.2s var(--ease-out);
}
@keyframes altFadeIn {
from { opacity: 0; transform: translateY(-4px); }
to { opacity: 1; transform: translateY(0); }
}
.install-alt-method {
padding: var(--spacing-md) var(--spacing-lg);
}
.install-alt-label {
display: block;
font-family: var(--font-mono);
font-size: 0.625rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--color-ash);
margin-bottom: 6px;
}
.install-alt-method .install-terminal-cmd {
display: flex;
align-items: center;
gap: var(--spacing-sm);
}
.install-alt-method .terminal-prompt {
color: var(--color-accent);
font-family: var(--font-mono);
font-weight: bold;
user-select: none;
}
.install-alt-method code {
font-family: var(--font-mono);
font-size: 0.875rem;
color: var(--color-ink);
}
.install-alt-note {
display: block;
font-size: 0.75rem;
color: var(--color-ash);
margin-top: 4px;
}
.install-alt-note code {
font-family: var(--font-mono);
font-size: 0.6875rem;
background: var(--color-mist);
padding: 2px 5px;
border-radius: 3px;
color: var(--color-ink);
}
.install-alt-download {
display: flex;
align-items: center;
gap: var(--spacing-sm);
}
.install-alt-divider {
height: 1px;
background: var(--color-mist);
}
.install-prefix-options {
display: flex;
align-items: flex-start;
gap: var(--spacing-sm);
margin-top: var(--spacing-md);
}
.install-prefix-option {
flex: 1;
display: flex;
align-items: flex-start;
gap: 8px;
padding: 10px 12px;
border: 1.5px solid var(--color-mist);
border-radius: 8px;
cursor: pointer;
transition: all var(--duration-fast) var(--ease-out);
line-height: 1;
}
.install-prefix-option:hover {
border-color: var(--color-charcoal);
}
.install-prefix-option:has(input:checked) {
border-color: var(--color-accent);
}
.install-prefix-option input {
appearance: none;
-webkit-appearance: none;
width: 16px;
height: 16px;
border: 1.5px solid var(--color-mist);
border-radius: 50%;
flex-shrink: 0;
margin: 0;
transition: all var(--duration-fast) var(--ease-out);
position: relative;
}
.install-prefix-option input:checked {
border-color: var(--color-accent);
background: var(--color-accent);
}
.install-prefix-option input:checked::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 6px;
height: 6px;
background: var(--color-paper);
border-radius: 50%;
}
.install-prefix-option input:focus-visible {
outline: 2px solid var(--color-accent);
outline-offset: 2px;
}
.install-prefix-option-content {
display: flex;
flex-direction: column;
gap: 3px;
padding-top: 1px;
}
.install-prefix-option-label {
font-size: 0.8125rem;
font-weight: 600;
color: var(--color-ink);
line-height: 1;
}
.install-prefix-option-examples {
display: flex;
flex-wrap: wrap;
gap: 4px;
}
.install-prefix-option-examples code {
font-family: var(--font-mono);
font-size: 0.6875rem;
background: var(--color-accent-dim);
color: var(--color-accent);
padding: 2px 6px;
border-radius: 3px;
}
.install-prefix-option-wrap {
flex: 1;
display: flex;
flex-direction: column;
gap: 4px;
align-self: flex-start;
}
.install-prefix-reason {
font-size: 0.6875rem;
color: var(--color-ash);
line-height: 1.4;
padding-left: 2px;
}
.install-prefix-option-label code {
font-family: var(--font-mono);
font-size: 0.6875rem;
background: var(--color-accent-dim);
color: var(--color-accent);
padding: 1px 5px;
border-radius: 3px;
}
.install-alt-method .install-prefix-options {
margin-top: var(--spacing-sm);
}
.install-alt-method .install-alt-download {
margin-top: var(--spacing-sm);
}
/* Hidden prefix checkbox for download logic */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
@media (max-width: 600px) {
.install-prefix-options {
flex-direction: column;
}
.install-alt-method {
padding: var(--spacing-sm) var(--spacing-md);
}
.install-alt-method code {
font-size: 0.75rem;
}
}
/* Tooltips */
.has-tooltip {
position: relative;
cursor: default;
}
.has-tooltip::after {
content: attr(data-tooltip);
position: absolute;
bottom: calc(100% + 8px);
left: 50%;
transform: translateX(-50%);
padding: 6px 10px;
background: var(--color-ink);
color: var(--color-paper);
font-size: 0.6875rem;
line-height: 1.4;
border-radius: 6px;
white-space: nowrap;
pointer-events: none;
opacity: 0;
transition: opacity 0.15s ease;
z-index: 100;
}
.has-tooltip:hover::after {
opacity: 1;
}
/* Hero logo icon wrapper */
.hero-logo-icon {
display: inline-flex;
align-items: center;
}
.download-tip {
font-size: 0.8125rem;
color: var(--color-ash);
margin-top: var(--spacing-sm);
text-align: center;
}
.download-tip a {
color: var(--color-accent);
text-decoration: none;
}
.download-tip a:hover {
text-decoration: underline;
}
/* ============================================
CONSULTING SECTION
============================================ */
.consulting-section {
padding: var(--spacing-xl) 0;
border-top: 1px solid var(--color-mist);
}
.consulting-content {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--spacing-lg);
flex-wrap: wrap;
}
.consulting-actions {
display: flex;
gap: var(--spacing-sm);
flex-shrink: 0;
}
.consulting-text {
flex: 1;
min-width: 280px;
}
.consulting-title {
font-size: clamp(1.5rem, 4vw, 2rem);
font-weight: 300;
font-style: italic;
margin: 0 0 var(--spacing-sm) 0;
}
.consulting-desc {
font-size: 1rem;
color: var(--color-charcoal);
line-height: 1.6;
margin: 0;
max-width: 45ch;
}
@media (max-width: 600px) {
.consulting-content {
flex-direction: column;
align-items: flex-start;
}
.consulting-actions {
flex-direction: column;
width: 100%;
}
.consulting-actions .btn {
width: 100%;
justify-content: center;
}
}