Learning Design
Example Project Title
A concise tagline or subtitle describing what this project is about and what makes it distinct.
Example University Library
A reference of every HTML element and custom component supported by this theme. Useful for checking how content will render and for testing colour schemes.
This is a standard paragraph. The theme uses Atkinson Hyperlegible, a typeface designed for maximum legibility by the Braille Institute. Body text is set at 1rem (16px) with a line-height of 1.7 for comfortable reading. The maximum prose width is 42rem (~672px) to maintain an optimal line length of roughly 60–75 characters.
This is a second paragraph showing the vertical rhythm between elements. Notice how bold text and italic text and bold italic text each render clearly. The typeface was specifically designed so that characters like 1, l, I and 0, O are unambiguous.
This is small text, useful for fine print, captions, and supplementary information.
This is muted text, rendered in the theme’s secondary colour.
This text contains strong emphasis and regular emphasis and a hyperlink to an example page and inline code and highlighted text and abbr and deleted text and inserted text and H2O and x2.
Blockquotes are for citing content from other sources.
This is a blockquote. It is styled with a left border accent, subtle background, and italicized text. Blockquotes are commonly used in Markdown with the
>prefix.
Multi-paragraph blockquotes work too.
This is the second paragraph within the same blockquote, separated by a blank
>line.— Attribution line
Callouts highlight important information or key insights. They use larger text and optional icons to draw attention.
Use the Kramdown attribute syntax:
Key insight: Solution-focused approaches outperform problem-focused ones across five dimensions.
Or use HTML:
Add modifier classes for different callout types with icons:
HTML approach (works everywhere):
<aside class="callout">
Your callout text here
</aside>
<aside class="callout callout--info">
Informational callout with icon
</aside>
Kramdown approach (Jekyll only):
Your callout text here
{: .callout}
Available modifiers: callout--info, callout--note, callout--success, callout--warning, callout--danger
This site uses Lucide Icons - a beautiful, open-source icon library. Icons are loaded individually as SVG files for optimal performance and sustainability.
Sustainability: Each icon is ~300-450 bytes and loaded only when used. Pages only load the icons they need, keeping the site fast and efficient.
Design: Clean line icons that inherit text color and scale perfectly at any size.
Icons are used automatically throughout the site in various contexts:
Icons appear inline with metadata:
Notes can have optional icons in their front matter:
---
title: "My Brilliant Idea"
icon: "lightbulb"
---
Common note icons: <span class=”icon icon–lightbulb “ aria-hidden=”true”
style="width: 20px; height: 20px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span>
lightbulb, <span class=”icon icon–book-open “
aria-hidden=”true”
style="width: 20px; height: 20px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span>
book-open, <span class=”icon icon–calendar “
aria-hidden=”true”
style="width: 20px; height: 20px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span>
calendar
Callouts automatically include icons based on their type:
Info/Note: <span class=”icon icon–info “ aria-hidden=”true”
style="width: 20px; height: 20px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> Information icon
Success: <span class=”icon icon–circle-check “ aria-hidden=”true”
style="width: 20px; height: 20px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> Check circle
Warning: <span class=”icon icon–triangle-alert “ aria-hidden=”true”
style="width: 20px; height: 20px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> Triangle alert
Danger: <span class=”icon icon–circle-alert “ aria-hidden=”true”
style="width: 20px; height: 20px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> Circle alert
Action & Navigation: <span class=”icon icon–external-link “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> external-link, <span class=”icon icon–link “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> link, <span class=”icon icon–file-down “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> file-down
Content Types: <span class=”icon icon–file-text “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> file-text, <span class=”icon icon–video “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> video, <span class=”icon icon–presentation “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> presentation, <span class=”icon icon–book-open “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> book-open, <span class=”icon icon–clipboard-list “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> clipboard-list
Organization: <span class=”icon icon–folder “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> folder, <span class=”icon icon–tag “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> tag, <span class=”icon icon–calendar “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> calendar
Callouts: <span class=”icon icon–info “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> info, <span class=”icon icon–circle-check “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> circle-check, <span class=”icon icon–triangle-alert “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> triangle-alert, <span class=”icon icon–circle-alert “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> circle-alert
Note Icons: <span class=”icon icon–lightbulb “ aria-hidden=”true”
style="width: 18px; height: 18px;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" >
</svg></span> lightbulb
assets/icons/{% include icon.html name="icon-name" %}To use icons in your content:
{% include icon.html name="lightbulb" %}
{% include icon.html name="video" size="24" %}
{% include icon.html name="external-link" class="custom-class" %}
{% include icon.html name="info" aria-label="Important information" %}
Use bundle exec jekyll serve to start the development server. The --port flag lets you specify a custom port like 4001.
# Example front matter for a presentation
---
title: "Scaling Student Success Through Learner-Led Design"
presenters: "Worsham, D."
meeting_name: "LOEX Conference"
meeting_short_name: "LOEX"
location: "Houston, TX"
date: 2019-05-10
sort_date: 2019-05-10
abstract: |
This presentation explores the WI+RE model
for learner-led design.
slide_url: "https://example.com/slides"
---
/* Example CSS showing theme custom properties */
:root {
--color-bg: #fdfaf8;
--color-text: #2c1810;
--color-accent: #a47864;
--color-link: #8b5e3c;
}
<!-- Example HTML structure -->
<article class="cv-entry">
<h3 class="cv-entry__title">Position Title</h3>
<div class="cv-entry__meta">
<span>Organization</span>
<span class="cv-entry__date">2021 – Present</span>
</div>
</article>
| Year | Award | Organization |
|---|---|---|
| 2018 | Librarian of the Year | LAUC-Los Angeles |
| 2017 | Top Twenty Article | ALA-LIRT |
| 2011 | Staff Excellence Award | UW-Madison L&S |
| Collection | Output | Sort Field | Grouped By | Component Include |
|---|---|---|---|---|
_experience |
No | sort_date |
Organization | experience-entry.html |
_education |
No | sort_date |
Category | education-entry.html |
_publications |
Yes | sort_date |
— | publication-entry.html |
_presentations |
Yes | sort_date |
— | presentation-entry.html |
_awards |
No | sort_date |
— | award-entry.html |
_grants |
No | sort_date |
— | grant-entry.html |
_teaching |
No | sort_date |
Category | teaching-entry.html |
_service |
No | sort_date |
Organization | service-entry.html |
Content above the rule.
Content below the rule.
Standard images in markdown or HTML are rendered responsively with max-width: 100% and a subtle border-radius.

<img src="/assets/images/photo.jpg" alt="Alt text describing the image" />
Use .image-grid utility classes for responsive multi-column photo layouts in note and presentation body content. Images fill their cell with object-fit: cover.
<div class="image-grid image-grid--2">
<img src="/assets/images/photo-a.jpg" alt="Description of photo A" />
<img src="/assets/images/photo-b.jpg" alt="Description of photo B" />
</div>
<div class="image-grid image-grid--3">
<img src="/assets/images/photo-a.jpg" alt="Description" />
<img src="/assets/images/photo-b.jpg" alt="Description" />
<img src="/assets/images/photo-c.jpg" alt="Description" />
</div>
The three-column grid collapses to two columns below 480px. All images should have meaningful alt text.
Featured images appear on individual content detail pages as a full-width hero — they do not appear on collection listing pages.
collection-detail__feature-image)Used on note, presentation, and project detail pages when the relevant image field is set in front matter. The image renders between the page header and the abstract/body content, full-width within the prose container, capped at 480px height with object-fit: cover.
Front matter fields by collection:
featured_image: "/assets/images/..." + featured_image_alt: "..."banner: "/assets/images/..." + banner_alt: "..."The alt field falls back to the page title if absent. Images are always optional — entries without the field (or with an empty value) render without any image.
Project tile cards display projects on the homepage (featured projects section) and on the /projects/ listing page. They are text-forward — no image zone. The whole card is clickable via the stretched-link technique applied to the title <a> element.
Card structure: category label (homepage only, omitted on listing page) → title (linked, stretched to full card) → subtitle → institution
Learning Design
A concise tagline or subtitle describing what this project is about and what makes it distinct.
Example University Library
Service Design
Subtitle text showing how longer content wraps within the card body at various viewport widths.
Another Institution
Classes:
.project-tiles — CSS grid container: 1 column → 2 columns at 480px → 3 columns at 1024px, gap: $space-6.project-tile — bordered card with border-radius and hover shadow; position: relative required for the stretched link.project-tile__body — padded flex column with gap: $space-3.project-tile__category — uppercase accent-colored label; used on homepage tiles (ungrouped context), omitted on /projects/ listing page tiles (the cv-section__heading already provides the category).project-tile__title — bold title; the a::after { inset: 0; position: absolute } stretched link makes the entire card surface clickable while keeping the accessible label to the title text only.project-tile__subtitle — muted smaller text; flex: 1 pushes the institution line to the bottom of the card.project-tile__institution — smallest muted text, pinned to card bottom with margin-top: auto and a top borderFront matter fields rendered in tiles: title, subtitle, institution, category (homepage only). Fields like abstract, role, skill_themes, tags, and collaborators render on the project detail page inside the .project-meta box. The impact field is defined in front matter but is not currently rendered in tiles or on detail pages.
The project detail page (_layouts/project.html) uses three components not used elsewhere: .collection-detail__subtitle, .collection-detail__byline, and .project-meta.
The page title renders as H1 (.collection-detail__title). The subtitle field renders as a separate paragraph below it. The institution and date range render as a compact .collection-detail__byline beneath the subtitle.
A concise tagline that provides context for the project without repeating the title.
Classes:
.collection-detail__title — project H1; same class used on all detail pages (notes, presentations, projects).collection-detail__subtitle — lead paragraph below H1: clamp(1.05rem, 1rem + 0.3vw, 1.2rem), font-weight: 400, color: var(--color-text-muted).collection-detail__byline — institution and date range joined by “ · “: 0.85rem, color: var(--color-text-muted); built from institution, start_date/end_date (or date as fallback)The .project-meta definition list renders summary, collaborators, role, capabilities, and tags as labeled rows. It is responsive: two-column grid (label |
value) on screens ≥ 480px, single-column stacked (label above value) below. |
Classes:
.project-meta — display: block (stacked) below $bp-sm (480px); display: grid; grid-template-columns: auto 1fr; gap: $space-2 $space-5; align-items: baseline above; background-color: var(--color-bg-alt), padding: $space-5, border-radius: 4px.project-meta__label — 0.8rem, uppercase, font-weight: 700, letter-spacing: 0.05em, color: var(--color-text-muted); white-space: nowrap.project-meta__value — 0.95rem, line-height: 1.6; margin-top: $space-1 on mobile (stacked gap), margin-top: 0 on grid; margin-left: 0 resets <dd> browser default indentFront matter → label mapping:
| Front matter field | Label in meta box |
|---|---|
abstract |
Summary |
collaborators |
With |
role |
My role |
skill_themes (array) |
Core capabilities (joined with “ · “) |
tags (array) |
Tags (joined with “ · “) |
Any row whose field is absent or empty is silently omitted.
These are the custom components used throughout the CV page and collection listings. They demonstrate how structured content renders.
Co-authored with Shanna Shaked, Renee Romero
Use the theme switcher in the header to preview how these tokens change across all five colour schemes.