howdy-jekyll-theme 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/AGENTS.md +1 -0
- data/Gemfile +0 -8
- data/README.md +1 -1
- data/_includes/blog-pagination.html +2 -2
- data/_includes/head.html +0 -1
- data/_layouts/default.html +2 -2
- data/_layouts/page.html +1 -1
- data/_layouts/post.html +3 -3
- data/_layouts/project.html +4 -4
- data/_sass/_base.scss +0 -1
- data/_sass/_layout.scss +4 -12
- data/_sass/_typography.scss +2 -2
- data/assets/js/hero-carousel.js +0 -3
- data/assets/js/theme-toggle.js +0 -17
- data/contact.md +1 -1
- data/howdy-jekyll-theme.gemspec +2 -1
- metadata +16 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7ed9dd05ba0a5247cf2a24cd463d7382670faf53c12c676131ef1bd46a6ef3d9
|
|
4
|
+
data.tar.gz: efe04c285cf8a8aec7a5ebb04d0ae5eef6f147e3663b74f52cae0d05cd3b5e9d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e3663db58963755d6e3dd4ac56f33d813b3b80045528928c7e3d489048581ace0df6e77aefbe1710887a1fb4baa8f1d9909451389a5e7eaa27cb0bdf9d95d270
|
|
7
|
+
data.tar.gz: 12b8f70cfe8c8e0b9c0c9ea40831f6f673bb6782c2392a0e3abf1adc86bc3149cc34ee772030fb90eed7e825520aa6fb2de24af888c8c83ae6e03e300af92105
|
data/AGENTS.md
CHANGED
|
@@ -60,3 +60,4 @@ lib/ — Gem entry point (Jekyll hook)
|
|
|
60
60
|
- The `.bundle/` directory contains vendored gems — do not edit files inside it.
|
|
61
61
|
- When deploying to a GitHub Pages project site, build with `--baseurl "/repository-name"` so asset paths resolve correctly.
|
|
62
62
|
- The Playwright Docker container is based on Ubuntu 22.04 — Ruby native gems that need C compilation require `build-essential` and `ruby-dev`.
|
|
63
|
+
- `main` is a **protected branch** — requires 4 status checks to pass. Commits cannot be pushed directly to main; use branches + PRs into main. Tags can be pushed independently without PRs (`git push origin <tagname>`).
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> A clean, modern, and minimalist Jekyll theme for personal websites and portfolios.
|
|
4
4
|
|
|
5
|
-
[](https://rubygems.org/gems/howdy-jekyll-theme)
|
|
6
6
|
[](https://rubygems.org/gems/howdy-jekyll-theme)
|
|
7
7
|
[](https://github.com/howdyitskyle/howdy-jekyll-theme/actions/workflows/ci.yml)
|
|
8
8
|
[](https://jekyllrb.com/)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<div class="pagination">
|
|
3
3
|
{% if paginator.previous_page %}
|
|
4
4
|
<a href="{{ paginator.previous_page_path }}" class="btn btn-secondary">
|
|
5
|
-
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true"
|
|
5
|
+
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true">
|
|
6
6
|
<path d="M9 3L4 8L9 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
7
7
|
</svg>
|
|
8
8
|
{{ site.pagination.prev_text | default: "Prev" }}
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
{% if paginator.next_page %}
|
|
23
23
|
<a href="{{ paginator.next_page_path }}" class="btn btn-secondary post-nav-next">
|
|
24
24
|
{{ site.pagination.next_text | default: "Next" }}
|
|
25
|
-
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true"
|
|
25
|
+
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true">
|
|
26
26
|
<path d="M7 3L12 8L7 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
27
27
|
</svg>
|
|
28
28
|
</a>
|
data/_includes/head.html
CHANGED
|
@@ -87,7 +87,6 @@
|
|
|
87
87
|
const root = document.documentElement;
|
|
88
88
|
const saved = localStorage.getItem('howdy-theme');
|
|
89
89
|
{% if site.default_theme and site.default_theme != "auto" %}
|
|
90
|
-
const defaultMode = '{{ site.default_theme }}';
|
|
91
90
|
if (saved === 'dark') {
|
|
92
91
|
root.classList.add('dark-mode');
|
|
93
92
|
root.classList.remove('light-mode');
|
data/_layouts/default.html
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
</div>
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
<script src="{{ '/assets/js/theme-toggle.js' | relative_url }}"></script>
|
|
13
|
-
<script src="{{ '/assets/js/mobile-nav.js' | relative_url }}"></script>
|
|
12
|
+
<script src="{{ '/assets/js/theme-toggle.js' | relative_url }}" defer></script>
|
|
13
|
+
<script src="{{ '/assets/js/mobile-nav.js' | relative_url }}" defer></script>
|
|
14
14
|
|
|
15
15
|
<!-- Analytics -->
|
|
16
16
|
{% include analytics.html %}
|
data/_layouts/page.html
CHANGED
data/_layouts/post.html
CHANGED
|
@@ -48,10 +48,10 @@ layout: default
|
|
|
48
48
|
|
|
49
49
|
<!-- Post navigation -->
|
|
50
50
|
{% if page.previous.url or page.next.url %}
|
|
51
|
-
<div class="detail-nav
|
|
51
|
+
<div class="detail-nav">
|
|
52
52
|
{% if page.previous.url %}
|
|
53
53
|
<a href="{{ page.previous.url | relative_url }}" class="btn btn-secondary">
|
|
54
|
-
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true"
|
|
54
|
+
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true">
|
|
55
55
|
<path d="M9 3L4 8L9 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
56
56
|
</svg>
|
|
57
57
|
<span class="btn-label">{{ page.previous.title }}</span>
|
|
@@ -60,7 +60,7 @@ layout: default
|
|
|
60
60
|
{% if page.next.url %}
|
|
61
61
|
<a href="{{ page.next.url | relative_url }}" class="btn btn-secondary post-nav-next">
|
|
62
62
|
<span class="btn-label">{{ page.next.title }}</span>
|
|
63
|
-
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true"
|
|
63
|
+
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true">
|
|
64
64
|
<path d="M7 3L12 8L7 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
65
65
|
</svg>
|
|
66
66
|
</a>
|
data/_layouts/project.html
CHANGED
|
@@ -39,17 +39,17 @@ layout: default
|
|
|
39
39
|
{{ content }}
|
|
40
40
|
</div>
|
|
41
41
|
|
|
42
|
-
<div class="detail-nav
|
|
42
|
+
<div class="detail-nav">
|
|
43
43
|
<a href="{{ '/projects' | relative_url }}" class="btn btn-secondary">
|
|
44
|
-
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true"
|
|
44
|
+
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true">
|
|
45
45
|
<path d="M9 3L4 8L9 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
46
46
|
</svg>
|
|
47
47
|
Back to Projects
|
|
48
48
|
</a>
|
|
49
49
|
{% if page.next %}
|
|
50
|
-
<a href="{{ page.next.url | relative_url }}" class="btn btn-secondary
|
|
50
|
+
<a href="{{ page.next.url | relative_url }}" class="btn btn-secondary">
|
|
51
51
|
<span class="btn-label">{{ page.next.title }}</span>
|
|
52
|
-
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true"
|
|
52
|
+
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true">
|
|
53
53
|
<path d="M7 3L12 8L7 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
54
54
|
</svg>
|
|
55
55
|
</a>
|
data/_sass/_base.scss
CHANGED
data/_sass/_layout.scss
CHANGED
|
@@ -49,8 +49,7 @@
|
|
|
49
49
|
// Page exit transition — content only, keeps hero/nav persistent
|
|
50
50
|
body.howdy-navigating {
|
|
51
51
|
.content-area,
|
|
52
|
-
.company-logos
|
|
53
|
-
.stats {
|
|
52
|
+
.company-logos {
|
|
54
53
|
opacity: 0;
|
|
55
54
|
transition: opacity 0.15s var(--howdy-ease-in);
|
|
56
55
|
will-change: opacity;
|
|
@@ -82,13 +81,6 @@ body.loaded .hero-content {
|
|
|
82
81
|
opacity: 1;
|
|
83
82
|
}
|
|
84
83
|
|
|
85
|
-
// Carousel container starts invisible, fades in smoothly
|
|
86
|
-
.hero-carousel {
|
|
87
|
-
opacity: 0;
|
|
88
|
-
transform: scale(1.02);
|
|
89
|
-
transition: opacity 0.5s var(--howdy-ease-out), transform 0.5s var(--howdy-ease-out);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
84
|
body.loaded .hero-carousel {
|
|
93
85
|
opacity: 1;
|
|
94
86
|
transform: scale(1);
|
|
@@ -362,9 +354,6 @@ body.loaded .projects-grid {
|
|
|
362
354
|
position: relative;
|
|
363
355
|
overflow-y: auto;
|
|
364
356
|
transition: var(--howdy-transition);
|
|
365
|
-
scrollbar-width: thin;
|
|
366
|
-
scrollbar-color: var(--howdy-border) transparent;
|
|
367
|
-
|
|
368
357
|
@media (max-width: $howdy-lg) {
|
|
369
358
|
flex: none;
|
|
370
359
|
width: 100%;
|
|
@@ -863,6 +852,9 @@ html.nav-open .nav-overlay {
|
|
|
863
852
|
position: relative;
|
|
864
853
|
width: 100%;
|
|
865
854
|
height: 100%;
|
|
855
|
+
opacity: 0;
|
|
856
|
+
transform: scale(1.02);
|
|
857
|
+
transition: opacity 0.5s var(--howdy-ease-out), transform 0.5s var(--howdy-ease-out);
|
|
866
858
|
|
|
867
859
|
.swiper-wrapper {
|
|
868
860
|
height: 100%;
|
data/_sass/_typography.scss
CHANGED
|
@@ -122,7 +122,7 @@ ul ul {
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
// Heading 2 — fluid responsive sizing
|
|
125
|
-
h2
|
|
125
|
+
h2 {
|
|
126
126
|
font-family: var(--howdy-font-primary);
|
|
127
127
|
font-weight: 600;
|
|
128
128
|
// Fluid: 24px at 360px → 40px at 1440px+
|
|
@@ -140,7 +140,7 @@ h2, .h2 {
|
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
// Heading 3 — fluid responsive sizing
|
|
143
|
-
h3
|
|
143
|
+
h3 {
|
|
144
144
|
font-family: var(--howdy-font-primary);
|
|
145
145
|
font-weight: 600;
|
|
146
146
|
// Fluid: 18px at 480px → 24px at 1440px+
|
data/assets/js/hero-carousel.js
CHANGED
|
@@ -4,9 +4,6 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
4
4
|
carousels.forEach(carousel => {
|
|
5
5
|
if (typeof Swiper === 'undefined') return;
|
|
6
6
|
|
|
7
|
-
const slideCount = carousel.querySelectorAll('.swiper-slide').length;
|
|
8
|
-
if (slideCount < 2) return;
|
|
9
|
-
|
|
10
7
|
new Swiper(carousel, {
|
|
11
8
|
effect: 'fade',
|
|
12
9
|
fadeEffect: { crossFade: true },
|
data/assets/js/theme-toggle.js
CHANGED
|
@@ -9,18 +9,6 @@
|
|
|
9
9
|
const moonIcon = toggleButton.querySelector('.moon-icon');
|
|
10
10
|
const root = document.documentElement;
|
|
11
11
|
|
|
12
|
-
// Update icon visibility
|
|
13
|
-
function updateIcon(theme) {
|
|
14
|
-
if (!sunIcon || !moonIcon) return;
|
|
15
|
-
if (theme === 'dark') {
|
|
16
|
-
sunIcon.style.display = 'block';
|
|
17
|
-
moonIcon.style.display = 'none';
|
|
18
|
-
} else {
|
|
19
|
-
sunIcon.style.display = 'none';
|
|
20
|
-
moonIcon.style.display = 'block';
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
12
|
// Set theme
|
|
25
13
|
function setTheme(theme) {
|
|
26
14
|
if (theme === 'dark') {
|
|
@@ -31,13 +19,8 @@
|
|
|
31
19
|
root.classList.remove('dark-mode');
|
|
32
20
|
}
|
|
33
21
|
localStorage.setItem('howdy-theme', theme);
|
|
34
|
-
updateIcon(theme);
|
|
35
22
|
}
|
|
36
23
|
|
|
37
|
-
// Initialize - check current theme from class
|
|
38
|
-
const currentTheme = root.classList.contains('dark-mode') ? 'dark' : 'light';
|
|
39
|
-
updateIcon(currentTheme);
|
|
40
|
-
|
|
41
24
|
// Toggle on click
|
|
42
25
|
toggleButton.addEventListener('click', function() {
|
|
43
26
|
const newTheme = root.classList.contains('dark-mode') ? 'light' : 'dark';
|
data/contact.md
CHANGED
data/howdy-jekyll-theme.gemspec
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Gem::Specification.new do |spec|
|
|
2
2
|
spec.name = "howdy-jekyll-theme"
|
|
3
|
-
spec.version = "1.0.
|
|
3
|
+
spec.version = "1.0.8"
|
|
4
4
|
spec.authors = ["Kyle Greenan"]
|
|
5
5
|
spec.email = ["kyle@howdyitskyle.com"]
|
|
6
6
|
|
|
@@ -22,4 +22,5 @@ Gem::Specification.new do |spec|
|
|
|
22
22
|
spec.add_development_dependency "bundler", ">= 2.4"
|
|
23
23
|
spec.add_development_dependency "rake", "~> 13.0"
|
|
24
24
|
spec.add_development_dependency "html-proofer", "~> 5.0"
|
|
25
|
+
spec.add_development_dependency "webrick", "~> 1.8"
|
|
25
26
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: howdy-jekyll-theme
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kyle Greenan
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-06
|
|
11
|
+
date: 2026-07-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: jekyll
|
|
@@ -128,6 +128,20 @@ dependencies:
|
|
|
128
128
|
- - "~>"
|
|
129
129
|
- !ruby/object:Gem::Version
|
|
130
130
|
version: '5.0'
|
|
131
|
+
- !ruby/object:Gem::Dependency
|
|
132
|
+
name: webrick
|
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
|
134
|
+
requirements:
|
|
135
|
+
- - "~>"
|
|
136
|
+
- !ruby/object:Gem::Version
|
|
137
|
+
version: '1.8'
|
|
138
|
+
type: :development
|
|
139
|
+
prerelease: false
|
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
141
|
+
requirements:
|
|
142
|
+
- - "~>"
|
|
143
|
+
- !ruby/object:Gem::Version
|
|
144
|
+
version: '1.8'
|
|
131
145
|
description: Howdy is a clean and modern Jekyll theme designed for personal websites
|
|
132
146
|
and portfolios. Features both light and dark themes, responsive layout, elegant
|
|
133
147
|
typography, and support for projects and blog.
|