hexo-theme-gnix 13.0.0 → 14.0.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.
@@ -2,98 +2,200 @@
2
2
  --archive-line: color-mix(in oklch, var(--surface1) 72%, var(--text));
3
3
  --archive-muted: color-mix(in oklch, var(--subtext1) 78%, var(--base));
4
4
  --archive-accent: var(--lavender);
5
+ --archive-rail-width: 5rem;
5
6
  display: grid;
6
7
  gap: 1.5rem;
7
8
  padding: 1.25em 1.25rem 0;
9
+
10
+ @media (max-width: 720px) {
11
+ gap: 1.25rem;
12
+ }
13
+
14
+ @media (max-width: 480px) {
15
+ padding: 1rem 0.875rem 0;
16
+ }
8
17
  }
9
18
 
19
+ /* #region Hero */
20
+
10
21
  .archive-hero {
22
+ position: relative;
11
23
  display: grid;
12
- grid-template-columns: minmax(0, 1fr) minmax(14rem, 18rem);
13
- gap: 1.25rem;
14
- align-items: start;
15
- padding-bottom: 1.25rem;
24
+ gap: 0.6rem;
25
+ padding-bottom: 1.5rem;
16
26
  border-bottom: 1px solid var(--archive-line);
27
+
28
+ &::after {
29
+ content: "";
30
+ position: absolute;
31
+ bottom: -5px;
32
+ left: 0;
33
+ right: 0;
34
+ height: 2.5px;
35
+ background: color-mix(in oklch, var(--text) 50%, var(--base));
36
+ }
17
37
  }
18
38
 
19
- .archive-eyebrow {
20
- margin: 0 0 0.35rem;
39
+ .archive-hero__eyebrow {
40
+ display: flex;
41
+ flex-wrap: wrap;
42
+ align-items: baseline;
43
+ gap: 0.5rem;
44
+ margin: 0;
21
45
  color: var(--archive-muted);
22
46
  font-family: var(--font-mono);
23
- font-size: 0.75rem;
47
+ font-size: 0.68rem;
24
48
  font-weight: 600;
25
- letter-spacing: 0.08em;
49
+ letter-spacing: 0.18em;
26
50
  text-transform: uppercase;
27
51
  }
28
52
 
29
- .archive-hero h1 {
30
- margin: 0;
53
+ .archive-hero__roman {
54
+ position: absolute;
55
+ right: 0;
56
+ bottom: 1.5rem;
31
57
  color: var(--text);
32
58
  font-family: var(--font-serif);
33
- font-size: 2.75rem;
34
- font-weight: 700;
59
+ font-size: 4.5rem;
60
+ font-weight: 400;
61
+ letter-spacing: 0.02em;
62
+ opacity: 0.06;
35
63
  line-height: 1;
36
- letter-spacing: 0;
64
+ pointer-events: none;
65
+ user-select: none;
66
+
67
+ @media (max-width: 720px) {
68
+ font-size: 4rem;
69
+ }
70
+
71
+ @media (max-width: 480px) {
72
+ font-size: 2rem;
73
+ opacity: 0.04;
74
+ }
75
+ }
76
+
77
+ .archive-hero__sep {
78
+ opacity: 0.3;
37
79
  }
38
80
 
39
- .archive-hero__summary {
40
- max-width: 34rem;
41
- margin: 1rem 0 0;
42
- color: var(--subtext1);
81
+ .archive-hero__title {
82
+ margin: 0;
83
+ color: var(--text);
43
84
  font-family: var(--font-serif);
44
85
  font-style: italic;
86
+ font-synthesis: none;
87
+ font-size: 3rem;
88
+ font-weight: 500;
89
+ line-height: 1;
90
+ letter-spacing: -0.02em;
91
+ position: relative;
92
+ z-index: 1;
93
+
94
+ @media (max-width: 480px) {
95
+ font-size: 2.1rem;
96
+ }
45
97
  }
46
98
 
47
- .archive-stats {
48
- display: grid;
49
- gap: 0.45rem;
50
- margin: 0;
99
+ /* #endregion */
100
+
101
+ /* #region Right rail (year jump) */
102
+
103
+ .archive-rail {
104
+ position: fixed;
105
+ top: 50%;
106
+ left: max(1.25rem, calc((100vw - 50em) / 2 - var(--archive-rail-width) - 0.5rem));
107
+ transform: translateY(-50%);
108
+ z-index: 20;
109
+ pointer-events: none;
110
+
111
+ @media (max-width: 1023px) {
112
+ display: none;
113
+ }
51
114
  }
52
115
 
53
- .archive-stats > div {
116
+ .archive-rail__list {
54
117
  display: grid;
55
- grid-template-columns: 4.5rem minmax(0, 1fr);
56
- gap: 0.65rem;
57
- align-items: baseline;
118
+ gap: 0.4rem;
119
+ margin: 0;
120
+ padding: 0;
121
+ list-style: none;
122
+ text-align: left;
123
+ pointer-events: auto;
58
124
  }
59
125
 
60
- .archive-stats dt {
126
+ .archive-rail__link {
127
+ display: inline-block;
128
+ padding: 0.1rem 0;
61
129
  color: var(--archive-muted);
62
130
  font-family: var(--font-mono);
63
131
  font-size: 0.72rem;
64
- text-transform: uppercase;
65
- }
132
+ font-variant-numeric: tabular-nums;
133
+ letter-spacing: 0.08em;
134
+ text-decoration: none;
135
+ opacity: 0.6;
136
+ transition:
137
+ color 160ms ease,
138
+ opacity 160ms ease;
66
139
 
67
- .archive-stats dd {
68
- min-width: 0;
69
- margin: 0;
70
- color: var(--text);
71
- font-weight: 700;
72
- overflow-wrap: anywhere;
140
+ &:hover,
141
+ &:focus-visible {
142
+ color: var(--text);
143
+ opacity: 1;
144
+ }
145
+
146
+ &:focus-visible {
147
+ outline: 2px solid color-mix(in oklch, var(--archive-accent) 70%, transparent);
148
+ outline-offset: 3px;
149
+ border-radius: 2px;
150
+ }
73
151
  }
74
152
 
75
- .archive-years {
153
+ /* #endregion */
154
+
155
+ /* #region Era marker */
156
+
157
+ .archive-era {
76
158
  display: flex;
77
- flex-wrap: wrap;
78
- gap: 0.5rem 0.75rem;
79
- align-items: center;
159
+ align-items: baseline;
160
+ justify-content: center;
161
+ gap: 0.85rem;
162
+ margin: 1.5rem 0 0.25rem;
163
+ padding-top: 0.25rem;
164
+ color: var(--archive-muted);
80
165
  font-family: var(--font-mono);
81
- font-size: 0.85rem;
166
+ font-size: 0.76rem;
167
+ letter-spacing: 0.22em;
168
+ text-transform: uppercase;
169
+ scroll-margin-top: 4.5rem;
170
+
171
+ &:first-child {
172
+ margin-top: 0;
173
+ }
174
+
175
+ @media (max-width: 720px) {
176
+ margin-top: 1.1rem;
177
+ }
82
178
  }
83
179
 
84
- .archive-years a {
85
- color: var(--archive-muted);
86
- text-decoration: none;
87
- text-underline-offset: 0.25em;
180
+ .archive-era__roman {
181
+ flex: 0 0 auto;
182
+ color: var(--text);
183
+ font-family: var(--font-serif);
184
+ font-size: 0.9rem;
185
+ letter-spacing: 0.28em;
88
186
  }
89
187
 
90
- .archive-years a:hover,
91
- .archive-years a:focus-visible,
92
- .archive-years a.is-active {
93
- color: var(--archive-accent);
94
- text-decoration: underline;
188
+ .archive-era__year {
189
+ flex: 0 0 auto;
190
+ color: var(--archive-muted);
191
+ font-size: 0.66rem;
192
+ font-variant-numeric: tabular-nums;
193
+ letter-spacing: 0.18em;
194
+ opacity: 0.55;
95
195
  }
96
196
 
197
+ /* #endregion */
198
+
97
199
  .archive-stack {
98
200
  display: grid;
99
201
  gap: 1.35rem;
@@ -104,37 +206,42 @@
104
206
  position: relative;
105
207
  content-visibility: auto;
106
208
  contain-intrinsic-size: auto 18rem;
107
- padding: 1.35rem 0 0;
108
- border-top: 1px dashed var(--archive-line);
109
- }
209
+ padding: 1.1rem 0 0;
110
210
 
111
- .archive-group.spring {
112
- --archive-accent: var(--peach);
113
- }
114
-
115
- .archive-group.summer {
116
- --archive-accent: var(--green);
117
- }
118
-
119
- .archive-group.autumn {
120
- --archive-accent: var(--red);
121
- }
211
+ .archive-era + & {
212
+ border-top: none;
213
+ padding-top: 0.35rem;
214
+ }
122
215
 
123
- .archive-group.winter {
124
- --archive-accent: var(--blue);
216
+ &.spring {
217
+ --archive-accent: var(--peach);
218
+ }
219
+ &.summer {
220
+ --archive-accent: var(--green);
221
+ }
222
+ &.autumn {
223
+ --archive-accent: var(--red);
224
+ }
225
+ &.winter {
226
+ --archive-accent: var(--blue);
227
+ }
125
228
  }
126
229
 
127
230
  .archive-group__header {
128
- display: flex;
231
+ display: grid;
232
+ grid-template-columns: minmax(0, 1fr) auto;
129
233
  gap: 1rem;
130
- align-items: start;
131
- justify-content: space-between;
132
- margin-bottom: 1rem;
234
+ align-items: baseline;
235
+ margin-bottom: 0.85rem;
236
+
237
+ @media (max-width: 480px) {
238
+ gap: 0.6rem;
239
+ }
133
240
  }
134
241
 
135
242
  .archive-group__title {
136
243
  margin: 0;
137
- color: var(--text);
244
+ color: var(--archive-accent);
138
245
  font-family: var(--font-serif);
139
246
  font-style: italic;
140
247
  font-size: 1.7rem;
@@ -144,13 +251,10 @@
144
251
  }
145
252
 
146
253
  .archive-group__count {
147
- flex: 0 0 auto;
148
- border: 1px solid color-mix(in oklch, var(--archive-accent) 46%, var(--archive-line));
149
- border-radius: 999px;
150
- color: var(--text);
151
- font-family: var(--font-mono);
152
- font-size: 0.78rem;
153
- padding: 0.2rem 0.6rem;
254
+ align-self: baseline;
255
+ color: var(--archive-muted);
256
+ font-family: var(--font-serif);
257
+ font-variant-numeric: oldstyle-nums;
154
258
  }
155
259
 
156
260
  .timeline {
@@ -163,45 +267,123 @@
163
267
  .archive-item {
164
268
  position: relative;
165
269
  text-align: left;
270
+
271
+ & > div {
272
+ display: grid;
273
+ grid-template-columns: 4.9rem minmax(0, 1fr);
274
+ gap: 0.85rem;
275
+ align-items: baseline;
276
+ padding: 0.55rem 0.35rem 0.55rem 0;
277
+
278
+ @media (max-width: 480px) {
279
+ grid-template-columns: 1fr;
280
+ gap: 0.1rem;
281
+ padding: 0.7rem 0.5rem 0.7rem 0;
282
+ }
283
+ }
284
+
285
+ & + & {
286
+ border-top: 0.5px solid color-mix(in oklch, var(--surface0) 80%, transparent);
287
+ }
166
288
  }
167
289
 
168
- .archive-item::before {
290
+ /* #region Popup */
291
+
292
+ .archive-popup {
293
+ --popup-accent: var(--archive-accent);
169
294
  position: absolute;
170
- top: 1em;
171
- left: -1rem;
172
- width: 0.55rem;
173
- height: 0.55rem;
174
- border-radius: 999px;
175
- background: transparent;
176
- content: "";
177
- transition: background 500ms ease;
178
- }
295
+ z-index: 100;
296
+ contain: layout style;
297
+ width: min(20rem, calc(100vw - 2rem));
298
+ padding: 0.85rem 1rem 0.9rem;
299
+ opacity: 0;
300
+ pointer-events: none;
301
+ transform: translateX(-4px);
302
+
303
+ &[data-placement="right"] {
304
+ width: 14rem;
305
+ }
306
+
307
+ &[data-placement="below"],
308
+ &[data-placement="above"] {
309
+ transform: translateY(-3px);
310
+ border: 1px dashed var(--surface0);
311
+ border-radius: 5px;
312
+ }
313
+
314
+ &.is-open {
315
+ opacity: 1;
316
+ pointer-events: auto;
317
+ transform: translate(0, 0);
318
+ background: var(--mantle);
319
+ transition:
320
+ opacity 140ms ease,
321
+ transform 180ms cubic-bezier(0.22, 1, 0.36, 1);
322
+ }
179
323
 
180
- .archive-item:hover::before,
181
- .archive-item:focus-within::before {
182
- background: var(--archive-accent);
183
- transform: scale(1.08);
324
+ @media (hover: none), (max-width: 720px) {
325
+ display: none !important;
326
+ }
184
327
  }
185
328
 
186
- .archive-item > div {
187
- display: grid;
188
- grid-template-columns: 4.9rem minmax(0, 1fr);
189
- gap: 0.85rem;
329
+ .archive-popup__eyebrow {
330
+ display: flex;
331
+ flex-wrap: wrap;
190
332
  align-items: baseline;
191
- padding: 0.55rem 0.35rem 0.55rem 0;
333
+ margin: 0 0 0.5rem;
334
+ padding-bottom: 0.45rem;
335
+ border-bottom: 0.5px solid color-mix(in oklch, var(--surface1) 65%, transparent);
336
+ color: var(--archive-muted);
337
+ font-family: var(--font-mono);
338
+ font-size: 0.68rem;
339
+ letter-spacing: 0.08em;
340
+ text-transform: uppercase;
192
341
  }
193
342
 
194
- .archive-item + .archive-item {
195
- border-top: 1px solid color-mix(in oklch, var(--archive-line) 52%, transparent);
343
+ .archive-popup__index {
344
+ color: color-mix(in oklch, var(--popup-accent) 80%, var(--text));
345
+ font-weight: 600;
196
346
  }
197
347
 
348
+ .archive-popup__sep {
349
+ margin: 0 0.4em;
350
+ opacity: 0.4;
351
+ }
352
+
353
+ .archive-popup__excerpt {
354
+ margin: 0;
355
+ color: var(--archive-muted);
356
+ font-family: var(--font-serif);
357
+ font-size: 0.88rem;
358
+ line-height: 1.55;
359
+
360
+ & :where(p, ul, ol) {
361
+ margin: 0 0 0.35em;
362
+
363
+ &:last-child {
364
+ margin-bottom: 0;
365
+ }
366
+ }
367
+
368
+ & :where(img, video, iframe, figure, pre) {
369
+ display: none;
370
+ }
371
+ }
372
+
373
+ /* #endregion */
374
+
198
375
  .article-meta {
199
376
  margin: 0;
200
377
  color: var(--archive-muted);
201
378
  font-family: var(--font-mono);
202
379
  font-size: 0.78rem;
380
+ font-variant-numeric: tabular-nums;
203
381
  line-height: 1.4;
204
382
  white-space: nowrap;
383
+
384
+ @media (max-width: 480px) {
385
+ white-space: normal;
386
+ }
205
387
  }
206
388
 
207
389
  a.archive-title {
@@ -218,77 +400,16 @@ a.archive-title {
218
400
  transition:
219
401
  color 140ms ease,
220
402
  text-decoration-color 140ms ease;
221
- }
222
-
223
- a.archive-title:hover,
224
- a.archive-title:focus-visible {
225
- color: var(--archive-accent);
226
- text-decoration-color: currentColor;
227
- }
228
-
229
- a.archive-title:focus-visible {
230
- outline: 2px solid color-mix(in oklch, var(--archive-accent) 70%, transparent);
231
- outline-offset: 3px;
232
- border-radius: 3px;
233
- }
234
-
235
- @media (max-width: 720px) {
236
- .archive-page {
237
- gap: 1.25rem;
238
- }
239
-
240
- .archive-hero {
241
- grid-template-columns: 1fr;
242
- }
243
-
244
- .archive-hero h1 {
245
- font-size: 2.35rem;
246
- }
247
403
 
248
- .archive-stats {
249
- grid-template-columns: repeat(3, minmax(0, 1fr));
250
- gap: 0.5rem;
404
+ &:hover,
405
+ &:focus-visible {
406
+ color: var(--archive-accent);
407
+ text-decoration-color: currentColor;
251
408
  }
252
409
 
253
- .archive-stats > div {
254
- display: block;
255
- border-bottom: 0;
256
- border-left: 1px solid color-mix(in oklch, var(--archive-line) 72%, transparent);
257
- padding: 0 0 0 0.6rem;
258
- }
259
- }
260
-
261
- @media (max-width: 480px) {
262
- .archive-page {
263
- padding: 1rem 0.875rem 0;
264
- }
265
-
266
- .archive-hero h1 {
267
- font-size: 2rem;
268
- }
269
-
270
- .archive-group__header {
271
- display: grid;
272
- }
273
-
274
- .archive-group__count {
275
- justify-self: start;
276
- }
277
-
278
- .archive-item > div {
279
- grid-template-columns: 1fr;
280
- gap: 0.1rem;
281
- padding: 0.7rem 0.5rem 0.7rem 0;
282
- }
283
-
284
- .article-meta {
285
- white-space: normal;
286
- }
287
- }
288
-
289
- @media (prefers-reduced-motion: reduce) {
290
- .archive-item::before,
291
- a.archive-title {
292
- transition: none;
410
+ &:focus-visible {
411
+ outline: 2px solid color-mix(in oklch, var(--archive-accent) 70%, transparent);
412
+ outline-offset: 3px;
413
+ border-radius: 3px;
293
414
  }
294
415
  }