Skip to content

Commit d6aa585

Browse files
TMHSDigitalclaude
andcommitted
feat(site): landing hero primary CTA, install after proof, legibility fixes
Add a filled Get started button and ghost gallery button to the hero, move the GitHub sponsor iframe into the Install panel, reorder Install ahead of the reference panels (nav follows), shorten the duplicate gallery CTA, raise HUD and summary sizes, and restore a visible focus ring on the panel filter. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
1 parent 4ed5f93 commit d6aa585

2 files changed

Lines changed: 36 additions & 34 deletions

File tree

‎scripts/site/chrome.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@
2323
NAV = (
2424
("Examples", "gallery/#k=examples", "examples"),
2525
("Showcase", "gallery/#k=showcase", "showcase"),
26+
("Install", "#install", "install"),
2627
("What's new", "#new", "new"),
2728
("Skills", "#skills", "skills"),
2829
("Rules", "#rules", "rules"),
2930
("Snippets", "#snippets", "snippets"),
30-
("Install", "#install", "install"),
3131
)
3232

3333
CSS = """

‎scripts/site/template.html.j2‎

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
.skip:focus { left: 0.5rem; top: 0.5rem; }
6565
6666
/* HUD vocabulary: small mono labels, everywhere */
67-
.hud { font-family: var(--font-mono); font-size: 0.6875rem; letter-spacing: 0.04em;
67+
.hud { font-family: var(--font-mono); font-size: 0.75rem; letter-spacing: 0.04em;
6868
color: var(--dim); text-transform: uppercase; }
6969
7070
{{ chrome_css | safe }}
@@ -99,7 +99,7 @@
9999
.stats-hud { display: grid; grid-template-columns: auto auto; gap: 0.1rem 0.8rem; }
100100
.stats-hud a { color: var(--dim); transition: color 0.15s; }
101101
.stats-hud a:hover { color: var(--select); }
102-
.stats-hud .v { color: var(--text); text-align: right; font-family: var(--font-mono); font-size: 0.6875rem; }
102+
.stats-hud .v { color: var(--text); text-align: right; font-family: var(--font-mono); font-size: 0.75rem; }
103103
.ok-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--ok); flex-shrink: 0; }
104104
105105
.vp-center { position: relative; z-index: 3; text-align: center; padding: 4.5rem 1.25rem;
@@ -108,7 +108,12 @@
108108
font-size: clamp(2.3rem, 8.5vw, 5.6rem); line-height: 0.94; letter-spacing: 0.005em; }
109109
.vp-center h1 .runs { color: var(--select); }
110110
.vp-center .sub { color: var(--dim); font-size: 1.02rem; max-width: 56ch; margin: 1.25rem auto 0; }
111-
.clone-row { display: flex; justify-content: center; align-items: stretch; margin-top: 1.75rem; }
111+
.hero-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.75rem; margin-top: 1.75rem; }
112+
.btn-cta.btn-lg, .btn-ghost.btn-lg { font-size: 1rem; line-height: 1.4; padding: 0.7rem 1.5rem; }
113+
.btn-ghost { display: inline-block; font-weight: 500; color: var(--text); border: 1px solid var(--border);
114+
border-radius: 4px; transition: color 0.15s, border-color 0.15s; }
115+
.btn-ghost:hover { color: var(--select); border-color: var(--select); }
116+
.clone-row { display: flex; justify-content: center; align-items: stretch; margin-top: 1.25rem; }
112117
.clone-row pre { min-width: 0; background: var(--bg2); border: 1px solid var(--border); border-right: none;
113118
border-radius: 4px 0 0 4px; padding: 0.6rem 0.9rem; font-family: var(--font-mono);
114119
font-size: 0.78rem; line-height: 1.4; overflow-x: auto; color: var(--text); text-align: left; }
@@ -117,10 +122,7 @@
117122
color: var(--dim); padding: 0 0.85rem; cursor: pointer; font-family: var(--font-mono);
118123
font-size: 0.72rem; transition: color 0.15s, border-color 0.15s; }
119124
.copy-btn:hover { color: var(--select); border-color: var(--select); }
120-
.hero-links { margin-top: 1.1rem; font-size: 0.85rem; }
121-
.hero-links a { color: var(--dim); font-weight: 500; margin: 0 0.7rem; transition: color 0.15s; }
122-
.hero-links a:hover { color: var(--select); }
123-
.hero-sponsor { margin-top: 0.9rem; line-height: 0; }
125+
.install-sponsor { margin-top: 1.25rem; line-height: 0; }
124126
125127
/* ---- sections as Blender panels ---- */
126128
main { max-width: var(--maxw); margin: 0 auto; padding: 0 1.25rem 2rem; }
@@ -134,7 +136,7 @@
134136
.panel-filter { background: var(--bg2); border: 1px solid var(--border); color: var(--text);
135137
border-radius: 3px; padding: 0.18rem 0.55rem; font-family: var(--font-mono); font-size: 0.72rem;
136138
width: 12rem; max-width: 45vw; align-self: center; }
137-
.panel-filter:focus { border-color: var(--select); outline: none; }
139+
.panel-filter:focus { border-color: var(--select); outline: 2px solid var(--select); outline-offset: 1px; }
138140
.panel-filter::placeholder { color: var(--dim); }
139141
.filter-empty { color: var(--dim); font-size: 0.85rem; padding: 0.75rem 0; }
140142
.is-filtered-out { display: none !important; }
@@ -172,8 +174,8 @@
172174
.skill-row .desc, .skill-row details { overflow-wrap: anywhere; }
173175
.skill-row .desc { color: var(--dim); font-size: 0.85rem; margin-top: 0.15rem; }
174176
.skill-row details { margin-top: 0.35rem; font-size: 0.8rem; color: var(--dim); }
175-
.skill-row summary { cursor: pointer; font-family: var(--font-mono); font-size: 0.68rem;
176-
text-transform: uppercase; letter-spacing: 0.04em; width: fit-content; }
177+
.skill-row summary { cursor: pointer; font-family: var(--font-mono); font-size: 0.75rem;
178+
text-transform: uppercase; letter-spacing: 0.04em; width: fit-content; padding: 0.25rem 0; }
177179
.skill-row summary:hover { color: var(--select); }
178180
.skill-row details ul { margin: 0.35rem 0 0 1.1rem; }
179181
.skill-row details li { margin: 0.15rem 0; }
@@ -272,6 +274,7 @@
272274
}
273275
@media (max-width: 420px) {
274276
.hud-bl { grid-template-columns: repeat(2, auto auto); }
277+
.hud-br { font-size: 0.6875rem; letter-spacing: 0.02em; }
275278
}
276279
</style>
277280
<script>document.documentElement.classList.add('js');</script>
@@ -310,16 +313,15 @@
310313
<p class="sub">Skills, rules, snippets, and starter templates that teach Cursor and Claude Code
311314
the <code>bpy</code> that works —
312315
backed by runnable examples asserted headless on Blender {{ bl_primary }} and {{ bl_fallback }} before they ship.</p>
316+
<div class="hero-actions">
317+
<a class="btn-cta btn-lg" href="#install">Get started</a>
318+
<a class="btn-ghost btn-lg" href="gallery/">Browse the gallery</a>
319+
</div>
313320
<div class="clone-row">
314321
{# <wbr> after each path slash: a phone wraps the URL there, not mid-word #}
315322
<pre id="cloneCmd"><span class="p">$</span> git clone {% for part in repo.split('/') %}{{ part }}{% if not loop.last %}/{% if loop.index >= 3 %}<wbr>{% endif %}{% endif %}{% endfor %}</pre>
316323
<button class="copy-btn" type="button" data-copy="git clone {{ repo }}">copy</button>
317324
</div>
318-
<div class="hero-links">
319-
<a href="#examples">See the proof &darr;</a>
320-
<a href="gallery/">Examples gallery &rarr;</a>
321-
</div>
322-
<div class="hero-sponsor"><iframe src="https://github.com/sponsors/TMHSDigital/button" title="Sponsor TMHSDigital" height="32" width="114" style="border: 0; border-radius: 6px;"></iframe></div>
323325
</div>
324326
</section>
325327
</div>
@@ -339,7 +341,7 @@
339341
<p class="lede">These aren't mockups. Each example runs headless on Blender {{ bl_primary }} and {{ bl_fallback }} in the
340342
smoke workflow, asserts its own correctness, and exits non-zero if the API drifted. Each still was
341343
rendered by that same script.</p>
342-
<p class="cta-row"><a class="btn-cta" href="gallery/">Browse all {{ example_count }} rendered examples and {{ showcase_count }} showcase pieces in the gallery &rarr;</a></p>
344+
<p class="cta-row"><a class="btn-cta" href="gallery/">Open the full gallery &rarr;</a></p>
343345
<div class="render-grid">
344346
{% for ex in shown %}
345347
<a class="render-card" href="gallery/{{ ex.name }}/">
@@ -351,7 +353,23 @@
351353
</a>
352354
{% endfor %}
353355
</div>
354-
<a class="panel-cta" href="gallery/">Open the gallery — code, README, and full-size renders &rarr;</a>
356+
</div>
357+
</section>
358+
{% endif %}
359+
360+
{% if site.installSteps %}
361+
<section class="panel" id="install">
362+
<div class="panel-head">
363+
<span class="hud">Install</span>
364+
</div>
365+
<div class="panel-body">
366+
<h2>Clone it. Point your AI at it.</h2>
367+
<ol class="steps">
368+
{% for step in site.installSteps %}
369+
<li><span>{{ step | safe }}</span></li>
370+
{% endfor %}
371+
</ol>
372+
<div class="install-sponsor"><iframe src="https://github.com/sponsors/TMHSDigital/button" title="Sponsor TMHSDigital" height="32" width="114" style="border: 0; border-radius: 6px;" loading="lazy"></iframe></div>
355373
</div>
356374
</section>
357375
{% endif %}
@@ -502,22 +520,6 @@
502520
</section>
503521
{% endif %}
504522

505-
{% if site.installSteps %}
506-
<section class="panel" id="install">
507-
<div class="panel-head">
508-
<span class="hud">Install</span>
509-
</div>
510-
<div class="panel-body">
511-
<h2>Clone it. Point your AI at it.</h2>
512-
<ol class="steps">
513-
{% for step in site.installSteps %}
514-
<li><span>{{ step | safe }}</span></li>
515-
{% endfor %}
516-
</ol>
517-
</div>
518-
</section>
519-
{% endif %}
520-
521523
</main>
522524

523525
{{ chrome_footer | safe }}

0 commit comments

Comments
 (0)