Redesign Get Started section: three-column layout with skills, CLI, and stay updated

- Replace sequential steps with three-column grid (skills/CLI/stay updated)
- Skills column (step 1) gets visual prominence with wider column and Recommended badge
- CLI column (step 2) shows install, subcommands, npm link, Beta badge
- Stay updated column (step 3) leads with Substack embed + X follow, quick refs below
- Add "Best together" callout matching detection-callout pattern
- Unify font sizes and spacing across all columns
- Left-align section content to match rest of page
- Remove demo-caption background, section divider on wide viewports
- Fisheye starts on /clarify for balanced top/bottom
- Magazine container gets white background containment on wide viewports
- Spread-flow stays on one line (nowrap)
- Remove demo-caption background from skill-demos.css

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Paul Bakaus
2026-04-01 10:20:38 -07:00
co-authored by Claude Opus 4.6
parent 107aa8b7e1
commit b5cd306e70
6 changed files with 606 additions and 208 deletions
+271 -82
View File
@@ -2480,123 +2480,312 @@ code {
border-top: 1px solid var(--color-mist);
}
@media (min-width: 1100px) {
.platforms-section {
border-top: none;
}
}
.platforms-section .section-subtitle {
max-width: 60ch;
}
/* Install steps layout */
.install-steps {
/* 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;
gap: var(--spacing-xl);
max-width: 640px;
margin: 0 auto var(--spacing-xl);
}
.install-step-header {
display: flex;
align-items: flex-start;
gap: var(--spacing-md);
margin-bottom: var(--spacing-md);
.install-path:first-child {
border-right: 1px solid var(--color-mist);
padding-right: var(--spacing-xl);
}
.install-step-number {
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 40px;
flex-shrink: 0;
border-radius: 50%;
border: 1.5px solid var(--color-accent);
.install-path-secondary {
border-right: 1px solid var(--color-mist);
padding-right: var(--spacing-xl);
}
.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-secondary .install-path-label {
color: var(--color-ash);
}
.install-path-title {
font-family: var(--font-display);
font-size: 1.125rem;
font-size: 1.5rem;
font-weight: 600;
line-height: 1;
margin: var(--spacing-xs) 0 var(--spacing-sm);
line-height: 1.2;
}
.install-step-meta {
padding-top: 6px;
/* 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-step-title {
font-size: 1.125rem;
.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);
}
/* 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;
margin: 0;
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-step-desc {
font-size: 0.875rem;
.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: 2px 0 0;
margin: 0;
}
/* Subscribe card (step 2) */
.install-subscribe {
max-width: 640px;
margin: 0 auto;
/* 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;
}
.install-subscribe iframe {
/* 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-subscribe-btn {
.install-updated-x {
display: inline-flex;
align-items: center;
gap: 10px;
font-size: 0.9375rem;
font-weight: 600;
letter-spacing: 0.03em;
color: var(--color-paper);
text-decoration: none;
padding: 1rem 2rem;
background: var(--color-ink);
border: 1px solid var(--color-ink);
transition: all var(--duration-base) var(--ease-out);
flex-shrink: 0;
position: relative;
overflow: hidden;
}
.install-subscribe-btn::before {
content: '';
position: absolute;
inset: 0;
background: var(--color-accent);
transform: translateY(100%);
transition: transform var(--duration-base) var(--ease-out);
z-index: 0;
}
.install-subscribe-btn:hover::before {
transform: translateY(0);
}
.install-subscribe-btn svg,
.install-subscribe-btn span {
position: relative;
z-index: 1;
}
.install-subscribe-btn:hover {
color: var(--color-paper);
}
.install-subscribe-note {
gap: 6px;
font-size: 0.8125rem;
color: var(--color-ash);
margin: 0;
line-height: 1.5;
font-weight: 600;
color: var(--color-ink);
text-decoration: none;
transition: color var(--duration-fast) var(--ease-out);
}
@media (max-width: 600px) {
.install-subscribe {
flex-direction: column;
align-items: flex-start;
.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);
}
.install-path:first-child,
.install-path-secondary {
border-right: none;
padding-right: 0;
padding-bottom: var(--spacing-xl);
border-bottom: 1px solid var(--color-mist);
}
}
-1
View File
@@ -180,7 +180,6 @@
font-size: 0.6875rem;
letter-spacing: 0.03em;
color: var(--color-ash);
background: var(--color-paper);
text-align: center;
}
+240 -78
View File
@@ -127,6 +127,13 @@
align-items: start;
overflow: hidden;
}
@media (min-width: 1100px) {
.magazine-container {
background: white;
border-radius: 16px;
padding: var(--spacing-lg);
}
}
.fisheye-list {
position: relative;
height: 400px;
@@ -273,7 +280,7 @@
gap: 6px;
flex-wrap: nowrap;
margin-top: var(--spacing-xs);
overflow: hidden;
white-space: nowrap;
}
.spread-flow-label {
font-family: var(--font-body);
@@ -375,7 +382,6 @@
color: var(--color-ash);
text-align: center;
padding: var(--spacing-sm) var(--spacing-md);
background: var(--color-paper);
}
.spread-demo-area .demo-container {
flex: 1;
@@ -1463,7 +1469,6 @@
font-size: 0.6875rem;
letter-spacing: 0.03em;
color: var(--color-ash);
background: var(--color-paper);
text-align: center;
}
.uxw-demo {
@@ -4371,105 +4376,262 @@ code {
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;
}
.install-steps {
.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;
gap: var(--spacing-xl);
max-width: 640px;
margin: 0 auto var(--spacing-xl);
}
.install-step-header {
display: flex;
align-items: flex-start;
gap: var(--spacing-md);
margin-bottom: var(--spacing-md);
.install-path:first-child {
border-right: 1px solid var(--color-mist);
padding-right: var(--spacing-xl);
}
.install-step-number {
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 40px;
flex-shrink: 0;
border-radius: 50%;
border: 1.5px solid var(--color-accent);
.install-path-secondary {
border-right: 1px solid var(--color-mist);
padding-right: var(--spacing-xl);
}
.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-secondary .install-path-label {
color: var(--color-ash);
}
.install-path-title {
font-family: var(--font-display);
font-size: 1.125rem;
font-size: 1.5rem;
font-weight: 600;
line-height: 1;
margin: var(--spacing-xs) 0 var(--spacing-sm);
line-height: 1.2;
}
.install-step-meta {
padding-top: 6px;
}
.install-step-title {
font-size: 1.125rem;
.install-path-badge {
font-family: var(--font-mono);
font-size: 0.5rem;
font-weight: 600;
margin: 0;
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);
}
.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-step-desc {
font-size: 0.875rem;
.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;
}
.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: 2px 0 0;
margin: 0;
}
.install-subscribe {
max-width: 640px;
margin: 0 auto;
.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;
}
.install-subscribe iframe {
.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-subscribe-btn {
.install-updated-x {
display: inline-flex;
align-items: center;
gap: 10px;
font-size: 0.9375rem;
font-weight: 600;
letter-spacing: 0.03em;
color: var(--color-paper);
text-decoration: none;
padding: 1rem 2rem;
background: var(--color-ink);
border: 1px solid var(--color-ink);
transition: all var(--duration-base) var(--ease-out);
flex-shrink: 0;
position: relative;
overflow: hidden;
}
.install-subscribe-btn::before {
content: '';
position: absolute;
inset: 0;
background: var(--color-accent);
transform: translateY(100%);
transition: transform var(--duration-base) var(--ease-out);
z-index: 0;
}
.install-subscribe-btn:hover::before {
transform: translateY(0);
}
.install-subscribe-btn svg, .install-subscribe-btn span {
position: relative;
z-index: 1;
}
.install-subscribe-btn:hover {
color: var(--color-paper);
}
.install-subscribe-note {
gap: 6px;
font-size: 0.8125rem;
color: var(--color-ash);
margin: 0;
line-height: 1.5;
font-weight: 600;
color: var(--color-ink);
text-decoration: none;
transition: color var(--duration-fast) var(--ease-out);
}
@media (max-width: 600px) {
.install-subscribe {
flex-direction: column;
align-items: flex-start;
.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);
}
.install-path:first-child, .install-path-secondary {
border-right: none;
padding-right: 0;
padding-bottom: var(--spacing-xl);
border-bottom: 1px solid var(--color-mist);
}
}
.install-terminal {
+9 -2
View File
@@ -33,6 +33,14 @@
overflow: hidden;
}
@media (min-width: 1100px) {
.magazine-container {
background: white;
border-radius: 16px;
padding: var(--spacing-lg);
}
}
/* Fisheye command list */
.fisheye-list {
position: relative;
@@ -202,7 +210,7 @@
gap: 6px;
flex-wrap: nowrap;
margin-top: var(--spacing-xs);
overflow: hidden;
white-space: nowrap;
}
.spread-flow-label {
@@ -320,7 +328,6 @@
color: var(--color-ash);
text-align: center;
padding: var(--spacing-sm) var(--spacing-md);
background: var(--color-paper);
}
/* Fallback demo container inside spread */
+74 -36
View File
@@ -247,33 +247,26 @@
</section>
<!-- 5. INSTALL -->
<!-- 5. GET STARTED -->
<section class="platforms-section" id="downloads">
<div class="section-header" data-reveal>
<span class="section-number">04</span>
<h2 class="section-title">Get Started</h2>
<p class="section-subtitle">Three steps to impeccable design.</p>
</div>
<div class="install-steps">
<!-- Step 1: Install -->
<div class="install-step" data-reveal>
<div class="install-step-header">
<span class="install-step-number">1</span>
<div class="install-step-meta">
<h3 class="install-step-title">Install the skills</h3>
<p class="install-step-desc">One command. Every provider.</p>
</div>
</div>
<div class="install-paths" data-reveal>
<!-- Skills path (primary) -->
<div class="install-path install-path-primary">
<span class="install-path-label"><span class="install-path-step">1</span></span>
<h3 class="install-path-title">Install the skills <span class="install-path-badge">Recommended</span></h3>
<p class="install-path-desc">24 commands that steer your AI toward better design, in real time. The full Impeccable experience.</p>
<!-- Primary: npx command -->
<div class="install-terminal">
<div class="install-path-terminal">
<div class="glass-terminal">
<div class="terminal-header">
<span class="terminal-dot red"></span>
<span class="terminal-dot yellow"></span>
<span class="terminal-dot green"></span>
<span class="terminal-title">install</span>
</div>
<div class="terminal-body">
<div class="install-terminal-row">
@@ -287,12 +280,16 @@
</svg>
</button>
</div>
<span class="install-terminal-note">Works with Cursor, Claude Code, Gemini CLI, Codex CLI, and more. Auto-detects your AI harness.</span>
<span class="install-terminal-note">Works with Cursor, Claude Code, Gemini CLI, Codex CLI, and more.</span>
</div>
</div>
</div>
</div>
<div class="install-path-next">
Then run <code><span class="install-path-slash">/</span>impeccable teach</code> to set up your project's design context.
</div>
<!-- Alternatives (collapsible) -->
<details class="install-alternatives">
<summary class="install-alternatives-toggle">Other install methods</summary>
@@ -348,36 +345,77 @@
</details>
</div>
<!-- Step 2: Set up design context -->
<div class="install-step" data-reveal>
<div class="install-step-header">
<span class="install-step-number">2</span>
<div class="install-step-meta">
<h3 class="install-step-title">Teach it your design</h3>
<p class="install-step-desc">Run once to set up your project's design context.</p>
<!-- CLI path (secondary) -->
<div class="install-path install-path-secondary">
<span class="install-path-label"><span class="install-path-step">2</span></span>
<h3 class="install-path-title">Add the CLI <span class="install-path-badge install-path-badge-muted">Beta</span></h3>
<p class="install-path-desc">Deterministic anti-pattern detection, cheatsheet and more. Use in CI and beyond.</p>
<div class="install-path-terminal">
<div class="glass-terminal">
<div class="terminal-header">
<span class="terminal-dot red"></span>
<span class="terminal-dot yellow"></span>
<span class="terminal-dot green"></span>
</div>
<div class="terminal-body">
<div class="install-terminal-row">
<div class="install-terminal-cmd">
<span class="terminal-prompt">$</span>
<code>npm i -g impeccable</code>
<button class="copy-btn" aria-label="Copy command" data-copy="npm i -g impeccable">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
<path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path>
</svg>
</button>
</div>
<span class="install-terminal-note">Or run directly: <code>npx impeccable ...</code></span>
</div>
</div>
</div>
</div>
<div class="install-terminal" style="margin-top: var(--spacing-sm);">
<code class="install-cmd" style="font-family: var(--font-mono); font-size: 0.875rem; color: var(--color-charcoal); display: block; padding: var(--spacing-sm) var(--spacing-md); background: var(--color-cream); border-radius: 6px; border: 1px solid var(--color-mist);"><span style="color: var(--color-accent);">/</span>impeccable teach</code>
<div class="install-path-subcommands">
<span class="install-path-subcommand"><code>detect</code> Scan files, dirs, or URLs</span>
<span class="install-path-subcommand"><code>skills install</code> Install skills into your project</span>
<span class="install-path-subcommand"><code>skills update</code> Update to latest version</span>
</div>
<p class="install-path-link"><a href="https://www.npmjs.com/package/impeccable">View on npm</a></p>
</div>
<!-- Step 3: Subscribe -->
<div class="install-step" data-reveal>
<div class="install-step-header">
<span class="install-step-number">3</span>
<div class="install-step-meta">
<h3 class="install-step-title">Stay up to date</h3>
<p class="install-step-desc">New skills, pattern updates, and design tips.</p>
</div>
</div>
<div class="install-subscribe">
<!-- Stay sharp (third column) -->
<div class="install-path install-updated">
<span class="install-path-label"><span class="install-path-step">3</span></span>
<h3 class="install-path-title">Stay updated</h3>
<div class="install-updated-subscribe">
<iframe src="https://impeccablestyle.substack.com/embed" width="100%" height="150" style="border: 1px solid #e8e4df; border-radius: 8px; background: white;" frameborder="0" scrolling="no"></iframe>
<a href="https://x.com/impeccable_ai" class="install-updated-x" target="_blank" rel="noopener">
<svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg>
<span>Follow @impeccable_ai</span>
</a>
</div>
<div class="install-updated-refs">
<span class="install-updated-refs-label">Quick reference</span>
<a href="/cheatsheet" class="install-updated-ref">Command cheatsheet &rarr;</a>
<div class="install-updated-ref install-updated-ref-terminal">
<span class="terminal-prompt">$</span>
<code>impeccable skills help</code>
</div>
</div>
</div>
</div>
<p class="download-tip" data-reveal>Keep the <a href="/cheatsheet">command cheatsheet</a> handy for quick reference. To update skills, run <code>npx skills update</code>.</p>
<!-- Better together callout -->
<div class="install-together" data-reveal>
<div class="install-together-inner">
<span class="install-together-badge">Best together</span>
<p class="install-together-text">Skills give your AI the full design toolkit. The CLI adds automated quality gates for reviews and CI.</p>
</div>
</div>
</section>
<!-- 5. CHANGELOG -->
+12 -9
View File
@@ -69,15 +69,7 @@ const categoryLabels = {
function renderDesktopLayout(container, commands) {
magazineState.commands = commands;
// Determine starting index from URL hash
const hash = window.location.hash;
let startIndex = 0;
if (hash && hash.startsWith('#cmd-')) {
const cmdId = hash.slice(5);
const idx = commands.findIndex(c => c.id === cmdId);
if (idx >= 0) startIndex = idx;
}
magazineState.currentIndex = startIndex;
let startIndex = -1;
// Filter out deprecated shims, then sort by category
const deprecated = new Set(['teach-impeccable', 'frontend-design', 'impeccable']);
@@ -106,6 +98,17 @@ function renderDesktopLayout(container, commands) {
filteredCommands.push(...orderedCommands);
magazineState.commands = filteredCommands;
// Determine starting index: URL hash takes priority, otherwise default to "clarify"
const hash = window.location.hash;
if (hash && hash.startsWith('#cmd-')) {
const idx = filteredCommands.findIndex(c => c.id === hash.slice(5));
if (idx >= 0) startIndex = idx;
}
if (startIndex < 0) {
startIndex = Math.max(0, filteredCommands.findIndex(c => c.id === 'clarify'));
}
magazineState.currentIndex = startIndex;
// Build spreads HTML (after ordering so indices match fisheye)
const spreadsHTML = filteredCommands.map((cmd, i) => renderSpread(cmd, i, i === startIndex)).join('');