|
64 | 64 | .skip:focus { left: 0.5rem; top: 0.5rem; } |
65 | 65 |
|
66 | 66 | /* 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; |
68 | 68 | color: var(--dim); text-transform: uppercase; } |
69 | 69 |
|
70 | 70 | {{ chrome_css | safe }} |
|
99 | 99 | .stats-hud { display: grid; grid-template-columns: auto auto; gap: 0.1rem 0.8rem; } |
100 | 100 | .stats-hud a { color: var(--dim); transition: color 0.15s; } |
101 | 101 | .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; } |
103 | 103 | .ok-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--ok); flex-shrink: 0; } |
104 | 104 |
|
105 | 105 | .vp-center { position: relative; z-index: 3; text-align: center; padding: 4.5rem 1.25rem; |
|
108 | 108 | font-size: clamp(2.3rem, 8.5vw, 5.6rem); line-height: 0.94; letter-spacing: 0.005em; } |
109 | 109 | .vp-center h1 .runs { color: var(--select); } |
110 | 110 | .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; } |
112 | 117 | .clone-row pre { min-width: 0; background: var(--bg2); border: 1px solid var(--border); border-right: none; |
113 | 118 | border-radius: 4px 0 0 4px; padding: 0.6rem 0.9rem; font-family: var(--font-mono); |
114 | 119 | font-size: 0.78rem; line-height: 1.4; overflow-x: auto; color: var(--text); text-align: left; } |
|
117 | 122 | color: var(--dim); padding: 0 0.85rem; cursor: pointer; font-family: var(--font-mono); |
118 | 123 | font-size: 0.72rem; transition: color 0.15s, border-color 0.15s; } |
119 | 124 | .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; } |
124 | 126 |
|
125 | 127 | /* ---- sections as Blender panels ---- */ |
126 | 128 | main { max-width: var(--maxw); margin: 0 auto; padding: 0 1.25rem 2rem; } |
|
134 | 136 | .panel-filter { background: var(--bg2); border: 1px solid var(--border); color: var(--text); |
135 | 137 | border-radius: 3px; padding: 0.18rem 0.55rem; font-family: var(--font-mono); font-size: 0.72rem; |
136 | 138 | 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; } |
138 | 140 | .panel-filter::placeholder { color: var(--dim); } |
139 | 141 | .filter-empty { color: var(--dim); font-size: 0.85rem; padding: 0.75rem 0; } |
140 | 142 | .is-filtered-out { display: none !important; } |
|
172 | 174 | .skill-row .desc, .skill-row details { overflow-wrap: anywhere; } |
173 | 175 | .skill-row .desc { color: var(--dim); font-size: 0.85rem; margin-top: 0.15rem; } |
174 | 176 | .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; } |
177 | 179 | .skill-row summary:hover { color: var(--select); } |
178 | 180 | .skill-row details ul { margin: 0.35rem 0 0 1.1rem; } |
179 | 181 | .skill-row details li { margin: 0.15rem 0; } |
|
272 | 274 | } |
273 | 275 | @media (max-width: 420px) { |
274 | 276 | .hud-bl { grid-template-columns: repeat(2, auto auto); } |
| 277 | + .hud-br { font-size: 0.6875rem; letter-spacing: 0.02em; } |
275 | 278 | } |
276 | 279 | </style> |
277 | 280 | <script>document.documentElement.classList.add('js');</script> |
|
310 | 313 | <p class="sub">Skills, rules, snippets, and starter templates that teach Cursor and Claude Code |
311 | 314 | the <code>bpy</code> that works — |
312 | 315 | 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> |
313 | 320 | <div class="clone-row"> |
314 | 321 | {# <wbr> after each path slash: a phone wraps the URL there, not mid-word #} |
315 | 322 | <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> |
316 | 323 | <button class="copy-btn" type="button" data-copy="git clone {{ repo }}">copy</button> |
317 | 324 | </div> |
318 | | - <div class="hero-links"> |
319 | | - <a href="#examples">See the proof ↓</a> |
320 | | - <a href="gallery/">Examples gallery →</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> |
323 | 325 | </div> |
324 | 326 | </section> |
325 | 327 | </div> |
|
339 | 341 | <p class="lede">These aren't mockups. Each example runs headless on Blender {{ bl_primary }} and {{ bl_fallback }} in the |
340 | 342 | smoke workflow, asserts its own correctness, and exits non-zero if the API drifted. Each still was |
341 | 343 | 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 →</a></p> |
| 344 | + <p class="cta-row"><a class="btn-cta" href="gallery/">Open the full gallery →</a></p> |
343 | 345 | <div class="render-grid"> |
344 | 346 | {% for ex in shown %} |
345 | 347 | <a class="render-card" href="gallery/{{ ex.name }}/"> |
|
351 | 353 | </a> |
352 | 354 | {% endfor %} |
353 | 355 | </div> |
354 | | - <a class="panel-cta" href="gallery/">Open the gallery — code, README, and full-size renders →</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> |
355 | 373 | </div> |
356 | 374 | </section> |
357 | 375 | {% endif %} |
|
502 | 520 | </section> |
503 | 521 | {% endif %} |
504 | 522 |
|
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 | | - |
521 | 523 | </main> |
522 | 524 |
|
523 | 525 | {{ chrome_footer | safe }} |
|
0 commit comments