jekyll-bear-theme 0.2.3 → 0.3.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3ff08eadac46e03fb1806ee17aa05f1c3e781adc9a37a63c9b2fe6d8091e4e09
4
- data.tar.gz: 2f733ffa2737c15a5a922910b38d18d2cd2418911b726fbc38f8e33918d76aa4
3
+ metadata.gz: 3d03b43a44bb6836f6c5e1e9aa92d850aaf064b9ca8c6e7857554909e6a53dbf
4
+ data.tar.gz: cf00fe723e7d08808aa0a8e36861262554058004b790db48bc6f7f4fd940aea2
5
5
  SHA512:
6
- metadata.gz: 2392b39ce303ccb1b832628290937c58f862ea5d005807d0b3ea389ae1c71fde48dada77419c5d165710f9f24db1f9c22660c050b9ac6a5dd2cb88ddc35fd759
7
- data.tar.gz: 4c3ff1cb58b97b95aa1d8d3ec94dcc18dded2f7a2526e038ef4012a801f8a0394fb57cbb211b31faadfff1c662d8e4b6ffefcd40007f2babb0fba8c084fe1596
6
+ metadata.gz: 38550f11d7725953e630b3514e83dc690ace23b525bc1aa528ffe24decb3b61cafa2044d311efb2af920b55b3d0e4ea0367d0ad392ab8373aee90dedf88f41ad
7
+ data.tar.gz: b533bf95ddb547ff7bc5c14c58046a27abdcf9485eb3d827a66f3e915c18bf28ed23d1713fefaff3c0ac034c8ca431ef35a41ea065a6495e2afe4ca25398f41a
data/README.md CHANGED
@@ -17,6 +17,8 @@ This is a port of it's theme to Jekyll, with some tweaks. So you can use GitHub
17
17
  - Gallery view for your images
18
18
  - Code highlighting
19
19
  - **Life in Weeks visualization** - Interactive timeline of your life events
20
+ - **IBM Plex Mono typography** - Consistent monospace font across all elements
21
+ - **Pine Forest color palette** - Cool, nature-inspired greens with automatic dark mode
20
22
 
21
23
  ## Screenshots
22
24
 
@@ -57,6 +59,21 @@ Or install it yourself as:
57
59
 
58
60
  $ gem install jekyll-bear-theme
59
61
 
62
+ ### Design Philosophy
63
+
64
+ jekyllBear now features a **monospace-first design** with IBM Plex Mono typography, creating a technical yet natural aesthetic. The pine forest color palette provides visual tranquility while maintaining excellent readability across light and dark modes, evoking the calm and focus of a peaceful woodland environment.
65
+
66
+ ### Customization
67
+
68
+ The theme's CSS is now highly modular and customizable:
69
+
70
+ - **Typography**: Modify `--font-main`, `--font-secondary`, and `--font-monospace` variables
71
+ - **Spacing**: Use the standardized spacing scale for consistent layouts
72
+ - **Colors**: All theme colors are centralized in CSS custom properties for easy customization
73
+ - **Pine Forest Palette**: Cool greens ranging from light pine mist to deep forest shadows
74
+ - **Glow Effects**: Configurable glow colors via `--glow-color-light` and `--glow-color-medium`
75
+ - **Layout**: Responsive design with mobile-first approach
76
+
60
77
  ## Usage
61
78
 
62
79
  ### Basic Setup
@@ -121,17 +138,6 @@ Use them as templates for your front matter.
121
138
 
122
139
  >To test your theme, run `bundle exec jekyll serve` and open your browser at `http://localhost:4000`.
123
140
 
124
-
125
- ## Recent Updates: Life in Weeks Interactive Carousel
126
-
127
- - The **Life in Weeks** page now features an interactive carousel blockquote above the grid, showing a key event from your life.
128
- - Up/down arrows let you cycle through events. The week number, event name, and description are shown, with the week number highlighted.
129
- - As you change the quote, the corresponding week in the grid pulses, visually connecting the event to its week.
130
- - The quote area has a fixed height and is vertically centered, so the grid never shifts as you browse events.
131
- - The grid is fully non-interactive (no tooltips, no pointer/question mark cursor), for a clean and minimal look.
132
- - The carousel arrows are styled to match the theme and do not show a highlight on click.
133
- - All code is lean and efficient: no extra network requests, no heavy JS, and all data is embedded at build time for instant loading.
134
-
135
141
  See `life.md`, `_layouts/life-in-weeks.html`, and `assets/life-carousel.js` for implementation details.
136
142
 
137
143
  ## Contributing
Binary file
Binary file
Binary file
Binary file
Binary file
data/assets/style.css CHANGED
@@ -1,175 +1,94 @@
1
- /* Highlighted week number in carousel quote */
2
- .carousel-weeknum {
3
- color: var(--link-color);
4
- font-weight: bold;
5
- font-style: normal;
6
- }
7
- /* Pulse effect for carousel-selected week */
8
- .carousel-pulse {
9
- animation: carousel-pulse 1.2s cubic-bezier(0.4,0,0.6,1) infinite;
10
- border-width: 2px !important;
11
- border-color: var(--link-color) !important;
12
- box-shadow: 0 0 10px rgba(124, 64, 17, 0.5);
13
- z-index: 2;
14
- }
1
+ /* =============================================================================
2
+ JEKYLL BEAR THEME - PINE FOREST AESTHETIC
3
+ ============================================================================= */
4
+ /* =============================================================================
5
+ FONTS & IMPORTS
6
+ ============================================================================= */
15
7
 
16
- @keyframes carousel-pulse {
17
- 0% {
18
- transform: scale(1);
19
- opacity: 1;
20
- }
21
- 50% {
22
- transform: scale(1.18);
23
- opacity: 0.7;
24
- }
25
- 100% {
26
- transform: scale(1);
27
- opacity: 1;
28
- }
29
- }
30
- /* Carousel arrow button styles */
31
- #life-carousel-up, #life-carousel-down {
32
- background: none;
33
- border: none;
34
- cursor: pointer;
35
- font-size: 1.5em;
36
- line-height: 1;
37
- padding: 0.2em;
38
- color: var(--main-color);
39
- outline: none;
40
- user-select: none;
41
- -webkit-tap-highlight-color: transparent;
42
- transition: color 0.2s;
43
- }
44
- #life-carousel-up:focus, #life-carousel-down:focus, #life-carousel-up:active, #life-carousel-down:active {
45
- outline: none;
46
- box-shadow: none;
47
- background: none;
48
- color: var(--main-color);
49
- }
50
- #life-carousel-up span, #life-carousel-down span {
51
- color: inherit;
52
- }
53
- /* Tooltip for event squares */
54
-
55
- .week[data-event] {
56
- position: relative;
57
- cursor: default !important;
58
- }
8
+ @import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&display=swap');
59
9
 
60
- .week {
61
- cursor: default !important;
62
- }
63
-
64
- /* Desktop: show tooltip on hover */
65
- @media (hover: hover) {
66
- .week[data-event]:hover::after {
67
- content: attr(data-event);
68
- position: absolute;
69
- background: var(--background-color);
70
- color: var(--text-color);
71
- padding: 0.6rem;
72
- border-radius: 0.2rem;
73
- border: 1px solid var(--blockquote-color);
74
- font-size: 1rem;
75
- font-family: var(--font-thin);
76
- font-weight: normal;
77
- line-height: 1.2;
78
- white-space: pre-line;
79
- z-index: 100;
80
- box-shadow: 0 4px 16px rgba(0,0,0,0.18);
81
- top: 130%;
82
- left: 50%;
83
- transform: translateX(-50%);
84
- pointer-events: none;
85
- max-width: 30vw;
86
- min-width: max-content;
87
- width: max-content;
88
- text-align: left;
89
- display: flex;
90
- align-items: center;
91
- vertical-align: baseline;
92
- }
93
- }
94
-
95
- /* Mobile: show tooltip on active/focus */
96
- @media (hover: none) {
97
- .week[data-event]:active::after,
98
- .week[data-event]:focus::after {
99
- content: attr(data-event);
100
- position: absolute;
101
- background: var(--background-color);
102
- color: var(--text-color);
103
- padding: 0.6rem;
104
- border-radius: 0.2rem;
105
- border: 1px solid var(--blockquote-color);
106
- font-size: 1rem;
107
- font-family: var(--font-thin);
108
- font-weight: normal;
109
- line-height: 1.2;
110
- white-space: pre-line;
111
- z-index: 100;
112
- box-shadow: 0 4px 16px rgba(0,0,0,0.18);
113
- top: 130%;
114
- left: 50%;
115
- transform: translateX(-50%);
116
- pointer-events: none;
117
- max-width: 50vw;
118
- min-width: max-content;
119
- width: max-content;
120
- text-align: left;
121
- display: flex;
122
- align-items: center;
123
- vertical-align: baseline;
124
- }
125
-
126
- .week[data-event] {
127
- -webkit-tap-highlight-color: transparent;
128
- outline: none;
129
- }
130
- }
131
-
132
-
133
-
134
- @import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=IBM+Plex+Mono:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&display=swap');
10
+ /* =============================================================================
11
+ CSS CUSTOM PROPERTIES (VARIABLES)
12
+ ============================================================================= */
135
13
 
136
14
  :root {
137
- --width: 900px;
138
- --font-main: 'IBM Plex Sans', sans-serif;
139
- --font-thin: 'IBM Plex Sans Thin', sans-serif;
140
- --font-secondary: 'IBM Plex Sans', sans-serif;
15
+ /* Layout */
16
+ --width: 720px;
17
+
18
+ /* Typography */
19
+ --font-main: 'IBM Plex Mono', monospace;
20
+ --font-secondary: 'IBM Plex Mono', monospace;
141
21
  --font-monospace: 'IBM Plex Mono', monospace;
142
- --font-scale: .95em;
143
- --background-color: #F8F1E5; /* Lighter cream */
144
- --heading-color: #2C1E15; /* Darker roast coffee */
145
- --text-color: #1F1408; /* Darker espresso */
146
- --link-color: #7C4011; /* Darker caramel */
147
- --visited-color: #5E3211; /* Darker roasted coffee beans */
148
- --main-color: #96572D; /* Darker café au lait */
149
- --code-background-color: #E6D7C3; /* Coffee stained paper */
150
- --code-color: #2C1E15; /* Darker roast coffee */
151
- --blockquote-color: #B99B6B; /* Darker café latte foam */
152
- }
153
-
22
+ --font-scale: 0.9em;
23
+
24
+ /* Spacing */
25
+ --spacing-xs: 5px;
26
+ --spacing-sm: 10px;
27
+ --spacing-md: 20px;
28
+ --spacing-lg: 40px;
29
+ --spacing-xl: 60px;
30
+
31
+ /* Border radius */
32
+ --radius-sm: 3px;
33
+ --radius-md: 5px;
34
+
35
+ /* Transitions */
36
+ --transition-fast: 0.2s;
37
+ --transition-normal: 0.3s;
38
+
39
+ /* Z-index scale */
40
+ --z-dropdown: 200;
41
+ --z-modal: 1000;
42
+
43
+ /* Pine Forest Theme Colors - Light Mode */
44
+ --background-color: #F5F7F3; /* Light pine needle mist */
45
+ --heading-color: #1A3025; /* Deep forest green */
46
+ --text-color: #0F2018; /* Dark pine shadow */
47
+ --link-color: #2D5016; /* Forest moss */
48
+ --visited-color: #1E3A11; /* Deep woodland */
49
+ --main-color: #4A7C59; /* Pine needle green */
50
+ --code-background-color: #E8EDEA; /* Frosted pine */
51
+ --code-color: #1A3025; /* Deep forest green */
52
+ --blockquote-color: #7A9B85; /* Sage green */
53
+
54
+ /* Interactive colors derived from theme */
55
+ --hover-color: white;
56
+ --border-color: var(--blockquote-color);
57
+ --shadow-color: rgba(0, 0, 0, 0.18);
58
+
59
+ /* Glow effects for interactive elements */
60
+ --glow-color-light: rgba(45, 80, 22, 0.3);
61
+ --glow-color-medium: rgba(45, 80, 22, 0.5);
62
+ }
63
+
64
+ /* Dark Mode Color Overrides */
154
65
  @media (prefers-color-scheme: dark) {
155
66
  :root {
156
- --background-color: #1A1310; /* Darker espresso */
157
- --heading-color: #F0DFC0; /* Lighter café latte foam */
158
- --text-color: #F0E6D2; /* Lighter coffee stained paper */
159
- --link-color: #E5A254; /* Lighter caramel drizzle */
160
- --visited-color: #C49B76; /* Lighter roasted coffee beans */
161
- --main-color: #B89470; /* Lighter mocha */
162
- --code-background-color: #2C2117; /* Dark chocolate coffee */
163
- --code-color: #F0DFC0; /* Lighter café latte foam */
164
- --blockquote-color: #6E563D; /* Lighter coffee grounds */
67
+ --background-color: #0D1B12; /* Dark pine shadow */
68
+ --heading-color: #C8D8CE; /* Light pine mist */
69
+ --text-color: #E0EADE; /* Pale forest light */
70
+ --link-color: #7AB069; /* Bright moss green */
71
+ --visited-color: #9BC490; /* Light woodland */
72
+ --main-color: #8BB899; /* Soft pine green */
73
+ --code-background-color: #1A2B1F; /* Dark evergreen */
74
+ --code-color: #C8D8CE; /* Light pine mist */
75
+ --blockquote-color: #4A6B52; /* Forest undergrowth */
76
+
77
+ /* Dark mode glow effects */
78
+ --glow-color-light: rgba(122, 176, 105, 0.3);
79
+ --glow-color-medium: rgba(122, 176, 105, 0.5);
165
80
  }
166
81
  }
167
82
 
83
+ /* =============================================================================
84
+ BASE STYLES
85
+ ============================================================================= */
86
+
168
87
  body {
169
88
  font-family: var(--font-secondary);
170
89
  font-size: var(--font-scale);
171
90
  margin: auto;
172
- padding: 20px;
91
+ padding: var(--spacing-md);
173
92
  max-width: var(--width);
174
93
  text-align: left;
175
94
  background-color: var(--background-color);
@@ -179,33 +98,63 @@ body {
179
98
  color: var(--text-color);
180
99
  }
181
100
 
182
- h1,
183
- h2,
184
- h3,
185
- h4,
186
- h5,
187
- h6 {
101
+ /* =============================================================================
102
+ TYPOGRAPHY
103
+ ============================================================================= */
104
+
105
+ h1, h2, h3, h4, h5, h6 {
188
106
  font-family: var(--font-main);
189
107
  color: var(--heading-color);
190
108
  }
191
109
 
110
+ strong, b {
111
+ color: var(--heading-color);
112
+ }
113
+
114
+ /* =============================================================================
115
+ LINKS
116
+ ============================================================================= */
117
+
192
118
  a {
193
119
  color: var(--link-color);
194
120
  font-family: var(--font-main);
195
121
  cursor: pointer;
196
122
  text-decoration: none;
197
123
  border-bottom: 3px solid var(--main-color);
124
+ transition: all var(--transition-fast) ease;
198
125
  }
199
126
 
200
127
  a:hover {
201
128
  background-color: var(--main-color);
202
- color: white;
129
+ color: var(--hover-color);
203
130
  text-decoration: none;
204
131
  }
205
132
 
133
+ a:visited {
134
+ color: var(--visited-color);
135
+ }
136
+
137
+ /* External link marker */
138
+ a[href^="http"]:where(:not([href*="knhash.in/"])):not(:has(img))::after {
139
+ content: "↗";
140
+ font-family: var(--font-monospace);
141
+ }
142
+
143
+ .title:hover {
144
+ text-decoration: none;
145
+ }
146
+
147
+ .title h1 {
148
+ font-size: 1.5em;
149
+ }
150
+
151
+ /* =============================================================================
152
+ LAYOUT COMPONENTS
153
+ ============================================================================= */
154
+
206
155
  header {
207
- margin-bottom: 40px;
208
- padding-bottom: 20px;
156
+ margin-bottom: var(--spacing-lg);
157
+ padding-bottom: var(--spacing-md);
209
158
  border-bottom: 3px dotted var(--main-color);
210
159
  }
211
160
 
@@ -213,69 +162,51 @@ nav a {
213
162
  margin-right: 8px;
214
163
  }
215
164
 
216
- strong,
217
- b {
218
- color: var(--heading-color);
165
+ main {
166
+ line-height: 1.6;
219
167
  }
220
168
 
221
- button {
222
- margin: 0;
223
- cursor: pointer;
169
+ footer {
170
+ margin-top: var(--spacing-lg);
171
+ border-top: 3px dotted var(--main-color);
172
+ padding: 25px 0;
173
+ text-align: center;
224
174
  }
225
175
 
226
- main {
227
- line-height: 1.6;
176
+ footer > span:has(a[href="https://bearblog.dev"]) {
177
+ display: none;
228
178
  }
229
179
 
230
- table {
231
- width: 100%;
232
- }
180
+ /* =============================================================================
181
+ CONTENT ELEMENTS
182
+ ============================================================================= */
233
183
 
234
184
  hr {
235
185
  border: 0;
236
- border-top: 1px dashed;
186
+ border-top: 1px dashed var(--border-color);
237
187
  }
238
188
 
239
189
  img {
240
190
  max-width: 100%;
241
191
  }
242
192
 
243
- code {
244
- font-family: var(--font-monospace);
245
- padding: 2px;
246
- background-color: var(--code-background-color);
247
- color: var(--code-color);
248
- border-radius: 3px;
249
- }
250
-
251
193
  blockquote {
252
194
  border-left: 1px solid var(--blockquote-color);
253
195
  color: var(--code-color);
254
- padding-left: 20px;
196
+ padding-left: var(--spacing-md);
255
197
  font-style: italic;
256
198
  }
257
199
 
258
- footer {
259
- margin-top: 40px;
260
- border-top: 3px dotted var(--main-color);
261
- padding: 25px 0;
262
- text-align: center;
263
- }
264
-
265
- footer > span:has(a[href="https://bearblog.dev"]) {
266
- display: none;
267
- }
268
-
269
- .title:hover {
270
- text-decoration: none;
271
- }
200
+ /* =============================================================================
201
+ CODE & SYNTAX HIGHLIGHTING
202
+ ============================================================================= */
272
203
 
273
- .title h1 {
274
- font-size: 1.5em;
275
- }
276
-
277
- .inline {
278
- width: auto !important;
204
+ code {
205
+ font-family: var(--font-monospace);
206
+ padding: 2px;
207
+ background-color: var(--code-background-color);
208
+ color: var(--code-color);
209
+ border-radius: var(--radius-sm);
279
210
  }
280
211
 
281
212
  .highlight,
@@ -283,13 +214,31 @@ footer > span:has(a[href="https://bearblog.dev"]) {
283
214
  padding: 1px 15px;
284
215
  background-color: var(--code-background-color);
285
216
  color: var(--code-color);
286
- border-radius: 3px;
217
+ border-radius: var(--radius-sm);
287
218
  margin-block-start: 1em;
288
219
  margin-block-end: 1em;
289
220
  overflow-x: auto;
290
221
  }
291
222
 
292
- /* blog post list */
223
+ /* =============================================================================
224
+ TABLES
225
+ ============================================================================= */
226
+
227
+ table {
228
+ width: 100%;
229
+ border-spacing: 0;
230
+ }
231
+
232
+ th, td {
233
+ padding: 6px 13px;
234
+ border: 1px solid var(--border-color);
235
+ font-size: 1em;
236
+ }
237
+
238
+ /* =============================================================================
239
+ BLOG POST LISTINGS
240
+ ============================================================================= */
241
+
293
242
  ul.blog-posts {
294
243
  list-style-type: none;
295
244
  padding: unset;
@@ -297,304 +246,393 @@ ul.blog-posts {
297
246
 
298
247
  ul.blog-posts li {
299
248
  display: flex;
300
- margin-bottom: 10px;
301
- }
302
-
303
- i time {
304
- font-style: normal;
305
- opacity: 0.7;
249
+ margin-bottom: var(--spacing-sm);
306
250
  }
307
251
 
308
252
  ul.blog-posts li span {
309
253
  flex: 0 0 130px;
310
254
  }
311
255
 
312
-
313
256
  ul.blog-posts li a:visited {
314
257
  color: var(--visited-color);
315
258
  }
316
259
 
317
- table {
318
- border-spacing: 0;
260
+ i time {
261
+ font-style: normal;
262
+ opacity: 0.7;
319
263
  }
320
264
 
321
- th,
322
- td {
323
- padding: 6px 13px;
324
- font-size: 1em;
265
+ /* =============================================================================
266
+ UTILITY CLASSES
267
+ ============================================================================= */
268
+
269
+ .inline {
270
+ width: auto !important;
325
271
  }
326
272
 
327
- /* external link marker */
328
- a[href^="http"]:where(:not([href*="knhash.in/"])):not(:has(img))::after {
329
- content: "↗";
330
- font-family: var(--font-monospace);
273
+ button {
274
+ margin: 0;
275
+ cursor: pointer;
331
276
  }
332
277
 
333
- /* Form elements */
278
+ /* =============================================================================
279
+ FORM ELEMENTS
280
+ ============================================================================= */
281
+
334
282
  input, button, textarea, select {
335
- margin: 0;
336
- padding: 0;
337
- box-sizing: border-box;
338
- font: inherit;
283
+ margin: 0;
284
+ padding: 0;
285
+ box-sizing: border-box;
286
+ font: inherit;
339
287
  }
288
+
340
289
  legend {
341
- margin: 20px 0;
342
- font-weight: bold;
290
+ margin: var(--spacing-md) 0;
291
+ font-weight: bold;
343
292
  }
293
+
344
294
  label {
345
- display: block;
346
- font-weight: bold;
295
+ display: block;
296
+ font-weight: bold;
347
297
  }
348
- input,
349
- textarea {
350
- margin: 0 0 10px;
351
- padding: 5px 10px;
352
- color: var(--text-color);
353
- background: var(--accent-color);
354
- border: 2px solid var(--link-color);
355
- border-radius: 5px;
298
+
299
+ input, textarea {
300
+ margin: 0 0 var(--spacing-sm);
301
+ padding: var(--spacing-xs) var(--spacing-sm);
302
+ color: var(--text-color);
303
+ background: var(--code-background-color);
304
+ border: 2px solid var(--link-color);
305
+ border-radius: var(--radius-md);
356
306
  }
307
+
357
308
  input {
358
- width: 55%;
309
+ width: 55%;
359
310
  }
311
+
360
312
  textarea {
361
- width: 95%;
362
- }
363
- input[type=button], input[type=submit], input[type=reset] {
364
- margin: 0 0 20px;
365
- padding: 7px;
366
- font-family: var(--font-secondary);
367
- font-weight: bold;
368
- color: var(--background-color);
369
- background: var(--link-color);
370
- border-radius: 5px;
371
- cursor: pointer;
313
+ width: 95%;
314
+ }
315
+
316
+ input[type=button],
317
+ input[type=submit],
318
+ input[type=reset] {
319
+ margin: 0 0 var(--spacing-md);
320
+ padding: 7px;
321
+ font-family: var(--font-secondary);
322
+ font-weight: bold;
323
+ color: var(--background-color);
324
+ background: var(--link-color);
325
+ border-radius: var(--radius-md);
326
+ cursor: pointer;
372
327
  }
328
+
373
329
  ::placeholder {
374
- color: var(--text-color);
375
- opacity: 0.7;
330
+ color: var(--text-color);
331
+ opacity: 0.7;
376
332
  }
377
333
 
378
- /* Life in Weeks Styles */
334
+ /* =============================================================================
335
+ LIFE IN WEEKS - MAIN COMPONENT
336
+ ============================================================================= */
337
+
379
338
  .life-in-weeks {
380
- margin: 20px 0;
339
+ margin: var(--spacing-md) 0;
381
340
  }
382
341
 
383
342
  .weeks-grid {
384
- margin: 60px 0;
385
- display: flex;
386
- flex-wrap: wrap;
387
- gap: 2px;
388
- max-width: 100%;
389
- align-items: flex-start;
343
+ margin: var(--spacing-xl) 0;
344
+ display: flex;
345
+ flex-wrap: wrap;
346
+ gap: 2px;
347
+ max-width: 100%;
348
+ align-items: flex-start;
390
349
  }
391
350
 
392
- /* Removed wide-screen overrides for .weeks-grid to always fit its container */
393
-
351
+ /* Week Square Base Styles */
394
352
  .week {
395
- width: 16px;
396
- height: 16px;
397
- border: 1px solid var(--main-color);
398
- background-color: var(--background-color);
399
- display: inline-flex;
400
- align-items: center;
401
- justify-content: center;
402
- position: relative;
403
- cursor: help;
404
- font-family: var(--font-thin);
405
- font-size: var(--font-scale);
406
- line-height: 1.5;
407
- padding: 2px 2px;
408
- white-space: nowrap;
409
- box-sizing: border-box;
410
- }
411
-
412
- /* Alternating decade bands */
353
+ width: 16px;
354
+ height: 16px;
355
+ border: 1px solid var(--main-color);
356
+ background-color: var(--background-color);
357
+ display: inline-flex;
358
+ align-items: center;
359
+ justify-content: center;
360
+ position: relative;
361
+ cursor: default;
362
+ font-family: var(--font-secondary);
363
+ font-size: var(--font-scale);
364
+ line-height: 1.5;
365
+ padding: 2px;
366
+ white-space: nowrap;
367
+ box-sizing: border-box;
368
+ transition: all var(--transition-fast) ease;
369
+ }
370
+
371
+ /* Week Square State Variations */
413
372
  .week.decade-0 {
414
- background-color: var(--background-color);
373
+ background-color: var(--background-color);
415
374
  }
416
375
 
417
376
  .week.decade-1 {
418
- background-color: var(--code-background-color);
377
+ background-color: var(--code-background-color);
419
378
  }
420
379
 
421
380
  .week.future {
422
- background-color: transparent;
423
- border-color: var(--blockquote-color);
424
- opacity: 0.3;
381
+ background-color: transparent;
382
+ border-color: var(--blockquote-color);
383
+ opacity: 0.3;
425
384
  }
426
385
 
427
386
  .week.decade-1.future {
428
- background-color: var(--code-background-color);
429
- opacity: 0.2;
387
+ background-color: var(--code-background-color);
388
+ opacity: 0.2;
430
389
  }
431
390
 
432
391
  .week.has-events {
433
- border-color: var(--visited-color);
434
- background-color: var(--blockquote-color);
435
- color: inherit;
436
- font-size: var(--font-scale);
437
- padding: 0;
392
+ border-color: var(--visited-color);
393
+ background-color: var(--blockquote-color);
394
+ color: inherit;
395
+ font-size: var(--font-scale);
396
+ padding: 0;
438
397
  }
439
398
 
440
399
  .week.has-events.future {
441
- border-color: var(--blockquote-color);
442
- opacity: 0.6;
443
- color: var(--blockquote-color);
400
+ border-color: var(--blockquote-color);
401
+ opacity: 0.6;
402
+ color: var(--blockquote-color);
444
403
  }
445
404
 
405
+ /* Current Week Animation */
446
406
  .week.current {
447
- animation: pulse 2s ease-in-out infinite;
448
- border-width: 2px;
449
- border-color: var(--link-color);
450
- box-shadow: 0 0 10px rgba(124, 64, 17, 0.3);
407
+ animation: pulse 2s ease-in-out infinite;
408
+ border-width: 2px;
409
+ border-color: var(--link-color);
410
+ box-shadow: 0 0 10px var(--glow-color-light);
451
411
  }
452
412
 
453
413
  .week.current.has-events {
454
- box-shadow: 0 0 10px rgba(124, 64, 17, 0.5);
414
+ box-shadow: 0 0 10px var(--glow-color-medium);
455
415
  }
456
416
 
457
417
  @keyframes pulse {
458
- 0% {
459
- transform: scale(1);
460
- opacity: 1;
461
- }
462
- 50% {
463
- transform: scale(1.1);
464
- opacity: 0.7;
465
- }
466
- 100% {
467
- transform: scale(1);
468
- opacity: 1;
469
- }
418
+ 0% {
419
+ transform: scale(1);
420
+ opacity: 1;
421
+ }
422
+ 50% {
423
+ transform: scale(1.1);
424
+ opacity: 0.7;
425
+ }
426
+ 100% {
427
+ transform: scale(1);
428
+ opacity: 1;
429
+ }
470
430
  }
471
431
 
432
+ /* Dark Mode Week Adjustments */
472
433
  @media (prefers-color-scheme: dark) {
473
- .week.current {
474
- box-shadow: 0 0 10px rgba(229, 162, 84, 0.3);
475
- }
476
-
477
- .week.current.has-events {
478
- box-shadow: 0 0 10px rgba(229, 162, 84, 0.5);
479
- }
434
+ .week.current {
435
+ box-shadow: 0 0 10px var(--glow-color-light);
436
+ }
437
+
438
+ .week.current.has-events {
439
+ box-shadow: 0 0 10px var(--glow-color-medium);
440
+ }
480
441
  }
481
442
 
443
+ /* =============================================================================
444
+ LIFE IN WEEKS - INTERACTIVE COMPONENTS
445
+ ============================================================================= */
446
+
447
+ /* Event Indicator */
482
448
  .event-indicator {
483
- position: absolute;
484
- top: 50%;
485
- left: 50%;
486
- transform: translate(-50%, -50%);
487
- color: var(--background-color);
488
- font-size: 8px;
489
- line-height: 1;
449
+ position: absolute;
450
+ top: 50%;
451
+ left: 50%;
452
+ transform: translate(-50%, -50%);
453
+ color: var(--background-color);
454
+ font-size: 8px;
455
+ line-height: 1;
490
456
  }
491
457
 
458
+ /* Events List */
492
459
  .events-list {
493
- margin: 40px 0;
494
- padding: 20px;
495
- background-color: var(--code-background-color);
496
- border-radius: 5px;
460
+ margin: var(--spacing-lg) 0;
461
+ padding: var(--spacing-md);
462
+ background-color: var(--code-background-color);
463
+ border-radius: var(--radius-md);
497
464
  }
498
465
 
499
466
  .events-list h3 {
500
- margin-top: 0;
501
- color: var(--heading-color);
502
- border-bottom: 1px solid var(--main-color);
503
- padding-bottom: 10px;
467
+ margin-top: 0;
468
+ color: var(--heading-color);
469
+ border-bottom: 1px solid var(--main-color);
470
+ padding-bottom: var(--spacing-sm);
504
471
  }
505
472
 
506
473
  .event-item {
507
- margin: 10px 0;
508
- padding: 8px 0;
509
- border-bottom: 1px dotted var(--blockquote-color);
510
- font-size: 0.9em;
511
- line-height: 1.4;
474
+ margin: var(--spacing-sm) 0;
475
+ padding: 8px 0;
476
+ border-bottom: 1px dotted var(--blockquote-color);
477
+ font-size: 0.9em;
478
+ line-height: 1.4;
512
479
  }
513
480
 
514
481
  .event-item:last-child {
515
- border-bottom: none;
482
+ border-bottom: none;
516
483
  }
517
484
 
518
485
  .event-year {
519
- color: var(--main-color);
520
- margin-right: 15px;
521
- min-width: 50px;
522
- display: inline-block;
486
+ color: var(--main-color);
487
+ margin-right: 15px;
488
+ min-width: 50px;
489
+ display: inline-block;
523
490
  }
524
491
 
525
492
  .event-name {
526
- color: var(--heading-color);
527
- margin-right: 10px;
493
+ color: var(--heading-color);
494
+ margin-right: var(--spacing-sm);
528
495
  }
529
496
 
530
497
  .event-desc {
531
- color: var(--text-color);
532
- font-style: italic;
533
- display: block;
534
- margin-top: 5px;
535
- margin-left: 65px;
498
+ color: var(--text-color);
499
+ font-style: italic;
500
+ display: block;
501
+ margin-top: var(--spacing-xs);
502
+ margin-left: 65px;
503
+ }
504
+
505
+ /* =============================================================================
506
+ LIFE IN WEEKS - CAROUSEL COMPONENTS
507
+ ============================================================================= */
508
+
509
+ /* Highlighted week number in carousel quote */
510
+ .carousel-weeknum {
511
+ color: var(--link-color);
512
+ font-weight: bold;
513
+ font-style: normal;
514
+ }
515
+
516
+ /* Pulse effect for carousel-selected week */
517
+ .carousel-pulse {
518
+ animation: carousel-pulse 1.2s cubic-bezier(0.4,0,0.6,1) infinite;
519
+ border-width: 2px !important;
520
+ border-color: var(--link-color) !important;
521
+ box-shadow: 0 0 10px var(--glow-color-medium);
522
+ z-index: 2;
523
+ }
524
+
525
+ @keyframes carousel-pulse {
526
+ 0% {
527
+ transform: scale(1);
528
+ opacity: 1;
529
+ }
530
+ 50% {
531
+ transform: scale(1.18);
532
+ opacity: 0.7;
533
+ }
534
+ 100% {
535
+ transform: scale(1);
536
+ opacity: 1;
537
+ }
538
+ }
539
+
540
+ /* Carousel arrow button styles */
541
+ #life-carousel-up,
542
+ #life-carousel-down {
543
+ background: none;
544
+ border: none;
545
+ cursor: pointer;
546
+ font-size: 1.5em;
547
+ line-height: 1;
548
+ padding: 0.2em;
549
+ color: var(--main-color);
550
+ outline: none;
551
+ user-select: none;
552
+ -webkit-tap-highlight-color: transparent;
553
+ transition: color var(--transition-fast);
536
554
  }
537
555
 
538
- /* Responsive adjustments */
539
- /* Responsive sizing to fit ~52 squares across screen width */
556
+ #life-carousel-up:focus,
557
+ #life-carousel-down:focus,
558
+ #life-carousel-up:active,
559
+ #life-carousel-down:active {
560
+ outline: none;
561
+ box-shadow: none;
562
+ background: none;
563
+ color: var(--main-color);
564
+ }
565
+
566
+ #life-carousel-up span,
567
+ #life-carousel-down span {
568
+ color: inherit;
569
+ }
570
+
571
+ /* =============================================================================
572
+ RESPONSIVE DESIGN
573
+ ============================================================================= */
574
+
575
+ /* Large screens - optimize week grid sizing */
540
576
  @media (max-width: 1200px) {
541
- .week {
542
- width: calc((100vw - 40px - (51 * 2px)) / 52);
543
- height: calc((100vw - 40px - (51 * 2px)) / 52);
544
- font-size: calc(var(--font-scale) * 0.8);
545
- padding: 0;
546
- min-width: 8px;
547
- min-height: 8px;
548
- }
549
-
550
- .week.has-events {
551
- font-size: calc(var(--font-scale) * 0.8);
552
- padding: 0;
553
- }
577
+ .week {
578
+ width: calc((100vw - 40px - (51 * 2px)) / 52);
579
+ height: calc((100vw - 40px - (51 * 2px)) / 52);
580
+ font-size: calc(var(--font-scale) * 0.8);
581
+ padding: 0;
582
+ min-width: 8px;
583
+ min-height: 8px;
584
+ }
585
+
586
+ .week.has-events {
587
+ font-size: calc(var(--font-scale) * 0.8);
588
+ padding: 0;
589
+ }
554
590
  }
555
591
 
592
+ /* Tablet screens */
556
593
  @media (max-width: 768px) {
557
- .week {
558
- width: calc((100vw - 40px - (51 * 1px)) / 52);
559
- height: calc((100vw - 40px - (51 * 1px)) / 52);
560
- font-size: calc(var(--font-scale) * 0.7);
561
- padding: 0;
562
- min-width: 8px;
563
- min-height: 8px;
564
- }
565
-
566
- .week.has-events {
567
- font-size: calc(var(--font-scale) * 0.7);
568
- padding: 0;
569
- }
570
-
571
- .weeks-grid {
572
- gap: 1px;
573
- }
574
-
575
- .event-desc {
576
- margin-left: 0;
577
- }
594
+ .week {
595
+ width: calc((100vw - 40px - (51 * 1px)) / 52);
596
+ height: calc((100vw - 40px - (51 * 1px)) / 52);
597
+ font-size: calc(var(--font-scale) * 0.7);
598
+ padding: 0;
599
+ min-width: 8px;
600
+ min-height: 8px;
601
+ }
602
+
603
+ .week.has-events {
604
+ font-size: calc(var(--font-scale) * 0.7);
605
+ padding: 0;
606
+ }
607
+
608
+ .weeks-grid {
609
+ gap: 1px;
610
+ }
611
+
612
+ .event-desc {
613
+ margin-left: 0;
614
+ }
578
615
  }
579
616
 
617
+ /* Mobile screens */
580
618
  @media (max-width: 480px) {
581
- .week {
582
- width: calc((100vw - 40px - (51 * 1px)) / 52);
583
- height: calc((100vw - 40px - (51 * 1px)) / 52);
584
- font-size: calc(var(--font-scale) * 0.6);
585
- padding: 0;
586
- min-width: 8px;
587
- min-height: 8px;
588
- }
589
-
590
- .week.has-events {
591
- font-size: calc(var(--font-scale) * 0.6);
592
- padding: 0;
593
- }
594
-
595
- .weeks-grid {
596
- gap: 1px;
597
- }
619
+ .week {
620
+ width: calc((100vw - 40px - (51 * 1px)) / 52);
621
+ height: calc((100vw - 40px - (51 * 1px)) / 52);
622
+ font-size: calc(var(--font-scale) * 0.6);
623
+ padding: 0;
624
+ min-width: 8px;
625
+ min-height: 8px;
626
+ }
627
+
628
+ .week.has-events {
629
+ font-size: calc(var(--font-scale) * 0.6);
630
+ padding: 0;
631
+ }
632
+
633
+ .weeks-grid {
634
+ gap: 1px;
635
+ }
598
636
  }
599
637
 
600
638
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-bear-theme
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - knhash
@@ -66,8 +66,9 @@ dependencies:
66
66
  - !ruby/object:Gem::Version
67
67
  version: '1.7'
68
68
  description: jekyllBear is a clean, minimal Jekyll theme focused on readability and
69
- simplicity. Features include a responsive design, tag system, life tracking, and
70
- a distraction-free reading experience inspired by Bear Blog.
69
+ simplicity. Features a Pine Forest color palette with cool, nature-inspired greens,
70
+ IBM Plex Mono typography, responsive design, tag system, life tracking visualization,
71
+ and a distraction-free reading experience inspired by Bear Blog.
71
72
  email:
72
73
  - mail@knhash.in
73
74
  executables: []
@@ -133,5 +134,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
134
  requirements: []
134
135
  rubygems_version: 3.6.2
135
136
  specification_version: 4
136
- summary: A minimal, text focused blog theme inspired by Bear Blog
137
+ summary: A minimal, text focused blog theme with Pine Forest aesthetics
137
138
  test_files: []