index.astro

 1---
 2import { getCollection } from 'astro:content';
 3import Base from '../../layouts/Base.astro';
 4import '../../styles/sub-pages.css';
 5
 6const tutorials = (await getCollection('tutorials'))
 7  .sort((a, b) => a.data.order - b.data.order);
 8---
 9
10<Base
11  title="Tutorials | Impeccable"
12  description="Step-by-step guides for getting started with Impeccable, from first install to live browser iteration."
13  activeNav="docs"
14  canonicalPath="/tutorials"
15  bodyClass="sub-page"
16>
17  <div class="tutorials-index">
18    <header class="tutorials-index-header">
19      <h1 class="sub-page-title">Tutorials</h1>
20      <p class="sub-page-lede">Step-by-step guides, from first install to live browser iteration.</p>
21    </header>
22
23    <div class="tutorials-list">
24      {tutorials.map((t, i) => (
25        <a href={`/tutorials/${t.id}`} class="tutorial-card">
26          <span class="tutorial-card-num">{String(i + 1).padStart(2, '0')}</span>
27          <div>
28            <h2 class="tutorial-card-title">{t.data.title}</h2>
29            <p class="tutorial-card-desc">{t.data.description}</p>
30          </div>
31        </a>
32      ))}
33    </div>
34  </div>
35
36  <style>
37    .tutorials-index { max-width: 720px; margin: 0 auto; padding: 2rem 1.5rem 4rem; }
38    .tutorials-index-header { margin-bottom: 2rem; }
39    .tutorials-list { display: flex; flex-direction: column; gap: 1rem; }
40    .tutorial-card {
41      display: flex; gap: 1.25rem; align-items: flex-start;
42      padding: 1.25rem; border-radius: 8px; border: 1px solid var(--color-mist);
43      text-decoration: none; color: inherit;
44      transition: border-color 0.15s ease;
45    }
46    .tutorial-card:hover { border-color: var(--color-accent); }
47    .tutorial-card-num { font-family: var(--font-mono); font-size: 0.8125rem; color: var(--color-ash); flex-shrink: 0; padding-top: 0.125rem; }
48    .tutorial-card-title { font-size: 1.125rem; font-weight: 600; margin: 0 0 0.25rem; }
49    .tutorial-card-desc { font-size: 0.875rem; color: var(--color-ash); margin: 0; line-height: 1.5; }
50  </style>
51</Base>