@noxion/renderer 0.2.0 → 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.
Files changed (153) hide show
  1. package/README.md +9 -8
  2. package/dist/index.d.ts +1 -31
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +0 -25
  5. package/dist/index.js.map +1 -1
  6. package/dist/theme/types.d.ts +11 -22
  7. package/dist/theme/types.d.ts.map +1 -1
  8. package/package.json +1 -1
  9. package/dist/components/DocsBreadcrumb.d.ts +0 -5
  10. package/dist/components/DocsBreadcrumb.d.ts.map +0 -1
  11. package/dist/components/DocsBreadcrumb.js +0 -10
  12. package/dist/components/DocsBreadcrumb.js.map +0 -1
  13. package/dist/components/DocsSidebar.d.ts +0 -5
  14. package/dist/components/DocsSidebar.d.ts.map +0 -1
  15. package/dist/components/DocsSidebar.js +0 -15
  16. package/dist/components/DocsSidebar.js.map +0 -1
  17. package/dist/components/EmptyState.d.ts +0 -7
  18. package/dist/components/EmptyState.d.ts.map +0 -1
  19. package/dist/components/EmptyState.js +0 -6
  20. package/dist/components/EmptyState.js.map +0 -1
  21. package/dist/components/FeaturedPostCard.d.ts +0 -5
  22. package/dist/components/FeaturedPostCard.d.ts.map +0 -1
  23. package/dist/components/FeaturedPostCard.js +0 -19
  24. package/dist/components/FeaturedPostCard.js.map +0 -1
  25. package/dist/components/Footer.d.ts +0 -5
  26. package/dist/components/Footer.d.ts.map +0 -1
  27. package/dist/components/Footer.js +0 -7
  28. package/dist/components/Footer.js.map +0 -1
  29. package/dist/components/Header.d.ts +0 -5
  30. package/dist/components/Header.d.ts.map +0 -1
  31. package/dist/components/Header.js +0 -7
  32. package/dist/components/Header.js.map +0 -1
  33. package/dist/components/HeroSection.d.ts +0 -7
  34. package/dist/components/HeroSection.d.ts.map +0 -1
  35. package/dist/components/HeroSection.js +0 -16
  36. package/dist/components/HeroSection.js.map +0 -1
  37. package/dist/components/PortfolioFilter.d.ts +0 -5
  38. package/dist/components/PortfolioFilter.d.ts.map +0 -1
  39. package/dist/components/PortfolioFilter.js +0 -20
  40. package/dist/components/PortfolioFilter.js.map +0 -1
  41. package/dist/components/PortfolioProjectCard.d.ts +0 -5
  42. package/dist/components/PortfolioProjectCard.d.ts.map +0 -1
  43. package/dist/components/PortfolioProjectCard.js +0 -13
  44. package/dist/components/PortfolioProjectCard.js.map +0 -1
  45. package/dist/components/PostCard.d.ts +0 -5
  46. package/dist/components/PostCard.d.ts.map +0 -1
  47. package/dist/components/PostCard.js +0 -17
  48. package/dist/components/PostCard.js.map +0 -1
  49. package/dist/components/PostList.d.ts +0 -5
  50. package/dist/components/PostList.d.ts.map +0 -1
  51. package/dist/components/PostList.js +0 -13
  52. package/dist/components/PostList.js.map +0 -1
  53. package/dist/components/Search.d.ts +0 -5
  54. package/dist/components/Search.d.ts.map +0 -1
  55. package/dist/components/Search.js +0 -25
  56. package/dist/components/Search.js.map +0 -1
  57. package/dist/components/TOC.d.ts +0 -5
  58. package/dist/components/TOC.d.ts.map +0 -1
  59. package/dist/components/TOC.js +0 -7
  60. package/dist/components/TOC.js.map +0 -1
  61. package/dist/components/TagFilter.d.ts +0 -5
  62. package/dist/components/TagFilter.d.ts.map +0 -1
  63. package/dist/components/TagFilter.js +0 -19
  64. package/dist/components/TagFilter.js.map +0 -1
  65. package/dist/components/ThemeToggle.d.ts +0 -4
  66. package/dist/components/ThemeToggle.d.ts.map +0 -1
  67. package/dist/components/ThemeToggle.js +0 -20
  68. package/dist/components/ThemeToggle.js.map +0 -1
  69. package/dist/layouts/BaseLayout.d.ts +0 -3
  70. package/dist/layouts/BaseLayout.d.ts.map +0 -1
  71. package/dist/layouts/BaseLayout.js +0 -11
  72. package/dist/layouts/BaseLayout.js.map +0 -1
  73. package/dist/layouts/BlogLayout.d.ts +0 -3
  74. package/dist/layouts/BlogLayout.d.ts.map +0 -1
  75. package/dist/layouts/BlogLayout.js +0 -6
  76. package/dist/layouts/BlogLayout.js.map +0 -1
  77. package/dist/layouts/DocsLayout.d.ts +0 -3
  78. package/dist/layouts/DocsLayout.d.ts.map +0 -1
  79. package/dist/layouts/DocsLayout.js +0 -11
  80. package/dist/layouts/DocsLayout.js.map +0 -1
  81. package/dist/layouts/MagazineLayout.d.ts +0 -3
  82. package/dist/layouts/MagazineLayout.d.ts.map +0 -1
  83. package/dist/layouts/MagazineLayout.js +0 -11
  84. package/dist/layouts/MagazineLayout.js.map +0 -1
  85. package/dist/layouts/index.d.ts +0 -5
  86. package/dist/layouts/index.d.ts.map +0 -1
  87. package/dist/layouts/index.js +0 -5
  88. package/dist/layouts/index.js.map +0 -1
  89. package/dist/templates/ArchivePage.d.ts +0 -3
  90. package/dist/templates/ArchivePage.d.ts.map +0 -1
  91. package/dist/templates/ArchivePage.js +0 -8
  92. package/dist/templates/ArchivePage.js.map +0 -1
  93. package/dist/templates/DocsPage.d.ts +0 -3
  94. package/dist/templates/DocsPage.d.ts.map +0 -1
  95. package/dist/templates/DocsPage.js +0 -13
  96. package/dist/templates/DocsPage.js.map +0 -1
  97. package/dist/templates/HomePage.d.ts +0 -3
  98. package/dist/templates/HomePage.d.ts.map +0 -1
  99. package/dist/templates/HomePage.js +0 -16
  100. package/dist/templates/HomePage.js.map +0 -1
  101. package/dist/templates/PortfolioGrid.d.ts +0 -3
  102. package/dist/templates/PortfolioGrid.d.ts.map +0 -1
  103. package/dist/templates/PortfolioGrid.js +0 -10
  104. package/dist/templates/PortfolioGrid.js.map +0 -1
  105. package/dist/templates/PortfolioProject.d.ts +0 -3
  106. package/dist/templates/PortfolioProject.d.ts.map +0 -1
  107. package/dist/templates/PortfolioProject.js +0 -12
  108. package/dist/templates/PortfolioProject.js.map +0 -1
  109. package/dist/templates/PostPage.d.ts +0 -13
  110. package/dist/templates/PostPage.d.ts.map +0 -1
  111. package/dist/templates/PostPage.js +0 -33
  112. package/dist/templates/PostPage.js.map +0 -1
  113. package/dist/templates/TagPage.d.ts +0 -3
  114. package/dist/templates/TagPage.d.ts.map +0 -1
  115. package/dist/templates/TagPage.js +0 -8
  116. package/dist/templates/TagPage.js.map +0 -1
  117. package/dist/templates/index.d.ts +0 -8
  118. package/dist/templates/index.d.ts.map +0 -1
  119. package/dist/templates/index.js +0 -8
  120. package/dist/templates/index.js.map +0 -1
  121. package/dist/theme/ThemeProvider.d.ts +0 -21
  122. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  123. package/dist/theme/ThemeProvider.js +0 -71
  124. package/dist/theme/ThemeProvider.js.map +0 -1
  125. package/dist/theme/component-resolver.d.ts +0 -3
  126. package/dist/theme/component-resolver.d.ts.map +0 -1
  127. package/dist/theme/component-resolver.js +0 -16
  128. package/dist/theme/component-resolver.js.map +0 -1
  129. package/dist/theme/css-generator.d.ts +0 -4
  130. package/dist/theme/css-generator.d.ts.map +0 -1
  131. package/dist/theme/css-generator.js +0 -80
  132. package/dist/theme/css-generator.js.map +0 -1
  133. package/dist/theme/define-theme.d.ts +0 -4
  134. package/dist/theme/define-theme.d.ts.map +0 -1
  135. package/dist/theme/define-theme.js +0 -45
  136. package/dist/theme/define-theme.js.map +0 -1
  137. package/dist/theme/extend-theme.d.ts +0 -27
  138. package/dist/theme/extend-theme.d.ts.map +0 -1
  139. package/dist/theme/extend-theme.js +0 -102
  140. package/dist/theme/extend-theme.js.map +0 -1
  141. package/dist/theme/slot-resolver.d.ts +0 -3
  142. package/dist/theme/slot-resolver.d.ts.map +0 -1
  143. package/dist/theme/slot-resolver.js +0 -13
  144. package/dist/theme/slot-resolver.js.map +0 -1
  145. package/dist/theme/template-resolver.d.ts +0 -4
  146. package/dist/theme/template-resolver.d.ts.map +0 -1
  147. package/dist/theme/template-resolver.js +0 -38
  148. package/dist/theme/template-resolver.js.map +0 -1
  149. package/dist/theme/validate-theme.d.ts +0 -14
  150. package/dist/theme/validate-theme.d.ts.map +0 -1
  151. package/dist/theme/validate-theme.js +0 -235
  152. package/dist/theme/validate-theme.js.map +0 -1
  153. package/src/styles/noxion.css +0 -1815
@@ -1,1815 +0,0 @@
1
- :root {
2
- --noxion-primary: #000000;
3
- --noxion-primaryForeground: #ffffff;
4
- --noxion-background: #ffffff;
5
- --noxion-foreground: #111111;
6
- --noxion-muted: #f2f2f2;
7
- --noxion-mutedForeground: #6b6b6b;
8
- --noxion-border: #e8e8e8;
9
- --noxion-accent: #f7f7f7;
10
- --noxion-accentForeground: #111111;
11
- --noxion-card: #ffffff;
12
- --noxion-cardForeground: #111111;
13
-
14
- --noxion-font-sans: "Geist", "Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
15
- --noxion-font-serif: Georgia, "Times New Roman", serif;
16
- --noxion-font-mono: "Geist Mono", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, monospace;
17
-
18
- --noxion-spacing-content: 720px;
19
- --noxion-spacing-sidebar: 260px;
20
- --noxion-border-radius: 0.5rem;
21
-
22
- --noxion-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04), 0 1px 1px rgba(0, 0, 0, 0.03);
23
- --noxion-shadow-md: 0 4px 8px rgba(0, 0, 0, 0.06), 0 1px 3px rgba(0, 0, 0, 0.04);
24
- --noxion-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.08), 0 2px 6px rgba(0, 0, 0, 0.04);
25
-
26
- --noxion-transition-fast: 100ms cubic-bezier(0.4, 0, 0.2, 1);
27
- --noxion-transition-normal: 180ms cubic-bezier(0.4, 0, 0.2, 1);
28
- --noxion-transition-slow: 280ms cubic-bezier(0.4, 0, 0.2, 1);
29
-
30
- --noxion-breakpoint-sm: 640px;
31
- --noxion-breakpoint-md: 768px;
32
- --noxion-breakpoint-lg: 1024px;
33
- --noxion-breakpoint-xl: 1280px;
34
- }
35
-
36
- [data-theme="dark"] {
37
- --noxion-primary: #ffffff;
38
- --noxion-primaryForeground: #000000;
39
- --noxion-background: #0c0c0c;
40
- --noxion-foreground: #ededed;
41
- --noxion-muted: #1a1a1a;
42
- --noxion-mutedForeground: #888888;
43
- --noxion-border: #272727;
44
- --noxion-accent: #1e1e1e;
45
- --noxion-accentForeground: #ededed;
46
- --noxion-card: #141414;
47
- --noxion-cardForeground: #ededed;
48
-
49
- --noxion-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
50
- --noxion-shadow-md: 0 4px 8px rgba(0, 0, 0, 0.4);
51
- --noxion-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5);
52
- }
53
-
54
- *,
55
- *::before,
56
- *::after {
57
- box-sizing: border-box;
58
- }
59
-
60
- body {
61
- margin: 0;
62
- font-family: var(--noxion-font-sans);
63
- font-size: 0.9375rem;
64
- color: var(--noxion-foreground);
65
- background-color: var(--noxion-background);
66
- line-height: 1.6;
67
- -webkit-font-smoothing: antialiased;
68
- -moz-osx-font-smoothing: grayscale;
69
- text-rendering: optimizeLegibility;
70
- font-feature-settings: "rlig" 1, "calt" 1, "ss01" 1;
71
- }
72
-
73
- ::selection {
74
- background-color: var(--noxion-foreground);
75
- color: var(--noxion-background);
76
- }
77
-
78
- a {
79
- color: inherit;
80
- text-decoration: none;
81
- }
82
-
83
- img {
84
- max-width: 100%;
85
- height: auto;
86
- display: block;
87
- }
88
-
89
- /* ============================================
90
- Header
91
- ============================================ */
92
-
93
- .noxion-header {
94
- position: sticky;
95
- top: 0;
96
- z-index: 100;
97
- display: flex;
98
- align-items: center;
99
- justify-content: space-between;
100
- height: 56px;
101
- padding: 0 1.25rem;
102
- border-bottom: 1px solid var(--noxion-border);
103
- background-color: color-mix(in srgb, var(--noxion-background) 82%, transparent);
104
- backdrop-filter: saturate(180%) blur(16px);
105
- -webkit-backdrop-filter: saturate(180%) blur(16px);
106
- }
107
-
108
- @media (max-width: 640px) {
109
- .noxion-header {
110
- height: 52px;
111
- padding: 0 1rem;
112
- }
113
- }
114
-
115
- .noxion-header__logo {
116
- display: flex;
117
- align-items: center;
118
- font-size: 0.9375rem;
119
- font-weight: 600;
120
- color: var(--noxion-foreground);
121
- text-decoration: none;
122
- letter-spacing: -0.03em;
123
- transition: opacity var(--noxion-transition-fast);
124
- }
125
-
126
- .noxion-header__logo svg {
127
- height: 1.125rem;
128
- width: auto;
129
- }
130
-
131
- .noxion-header__logo:hover {
132
- opacity: 0.6;
133
- }
134
-
135
- .noxion-header__nav {
136
- display: flex;
137
- align-items: center;
138
- gap: 0.125rem;
139
- }
140
-
141
- @media (max-width: 640px) {
142
- .noxion-header__nav {
143
- gap: 0;
144
- }
145
- }
146
-
147
- .noxion-header__nav-link {
148
- position: relative;
149
- font-size: 0.8125rem;
150
- font-weight: 450;
151
- color: var(--noxion-mutedForeground);
152
- text-decoration: none;
153
- padding: 0.3125rem 0.625rem;
154
- border-radius: 0.375rem;
155
- transition:
156
- color var(--noxion-transition-fast),
157
- background-color var(--noxion-transition-fast);
158
- }
159
-
160
- .noxion-header__nav-link:hover {
161
- color: var(--noxion-foreground);
162
- background-color: var(--noxion-muted);
163
- }
164
-
165
- .noxion-header__actions {
166
- display: flex;
167
- align-items: center;
168
- gap: 0.25rem;
169
- }
170
-
171
- /* ============================================
172
- Footer
173
- ============================================ */
174
-
175
- .noxion-footer {
176
- display: flex;
177
- align-items: center;
178
- justify-content: space-between;
179
- padding: 1.5rem 1.25rem;
180
- border-top: 1px solid var(--noxion-border);
181
- font-size: 0.8125rem;
182
- color: var(--noxion-mutedForeground);
183
- }
184
-
185
- @media (max-width: 640px) {
186
- .noxion-footer {
187
- flex-direction: column;
188
- gap: 0.375rem;
189
- text-align: center;
190
- padding: 1.25rem 1rem;
191
- }
192
- }
193
-
194
- .noxion-footer__copyright {
195
- color: inherit;
196
- letter-spacing: -0.01em;
197
- }
198
-
199
- .noxion-footer__powered-by {
200
- display: inline-flex;
201
- align-items: center;
202
- gap: 0.25rem;
203
- color: var(--noxion-mutedForeground);
204
- text-decoration: none;
205
- transition: color var(--noxion-transition-fast);
206
- letter-spacing: -0.01em;
207
- }
208
-
209
- .noxion-footer__powered-by:hover {
210
- color: var(--noxion-foreground);
211
- }
212
-
213
- /* ============================================
214
- PostCard
215
- ============================================ */
216
-
217
- .noxion-post-card {
218
- display: flex;
219
- flex-direction: column;
220
- text-decoration: none;
221
- color: inherit;
222
- border-radius: var(--noxion-border-radius);
223
- overflow: hidden;
224
- background-color: var(--noxion-card);
225
- border: 1px solid var(--noxion-border);
226
- transition:
227
- border-color var(--noxion-transition-normal),
228
- box-shadow var(--noxion-transition-normal),
229
- transform var(--noxion-transition-normal);
230
- }
231
-
232
- .noxion-post-card:hover {
233
- border-color: color-mix(in srgb, var(--noxion-foreground) 20%, transparent);
234
- box-shadow: var(--noxion-shadow-lg);
235
- transform: translateY(-2px);
236
- }
237
-
238
- .noxion-post-card--no-cover .noxion-post-card__cover {
239
- aspect-ratio: 3 / 1;
240
- }
241
-
242
- .noxion-post-card__cover {
243
- position: relative;
244
- width: 100%;
245
- aspect-ratio: 16 / 9;
246
- overflow: hidden;
247
- background-color: var(--noxion-muted);
248
- }
249
-
250
- .noxion-post-card__cover-image {
251
- width: 100%;
252
- height: 100%;
253
- object-fit: cover;
254
- object-position: center;
255
- transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
256
- }
257
-
258
- .noxion-post-card:hover .noxion-post-card__cover-image {
259
- transform: scale(1.04);
260
- }
261
-
262
- .noxion-post-card__cover-overlay {
263
- position: absolute;
264
- inset: 0;
265
- background: linear-gradient(to top, rgba(0, 0, 0, 0.06) 0%, transparent 40%);
266
- pointer-events: none;
267
- }
268
-
269
- .noxion-post-card__body {
270
- display: flex;
271
- flex-direction: column;
272
- flex: 1;
273
- padding: 1.25rem;
274
- gap: 0;
275
- }
276
-
277
- .noxion-post-card--no-cover .noxion-post-card__body {
278
- padding: 1.25rem;
279
- }
280
-
281
- .noxion-post-card__header {
282
- display: flex;
283
- align-items: center;
284
- gap: 0.5rem;
285
- margin-bottom: 0.5rem;
286
- }
287
-
288
- .noxion-post-card__category {
289
- display: inline-block;
290
- font-size: 0.6875rem;
291
- font-weight: 600;
292
- color: var(--noxion-mutedForeground);
293
- letter-spacing: 0.04em;
294
- text-transform: uppercase;
295
- }
296
-
297
- .noxion-post-card__title {
298
- margin: 0;
299
- font-size: 1.0625rem;
300
- font-weight: 600;
301
- color: var(--noxion-cardForeground);
302
- line-height: 1.4;
303
- letter-spacing: -0.02em;
304
- display: -webkit-box;
305
- -webkit-line-clamp: 2;
306
- -webkit-box-orient: vertical;
307
- overflow: hidden;
308
- }
309
-
310
- .noxion-post-card--no-cover .noxion-post-card__title {
311
- font-size: 1.125rem;
312
- letter-spacing: -0.025em;
313
- }
314
-
315
- .noxion-post-card__description {
316
- margin: 0.5rem 0 0;
317
- font-size: 0.8125rem;
318
- color: var(--noxion-mutedForeground);
319
- line-height: 1.6;
320
- display: -webkit-box;
321
- -webkit-line-clamp: 2;
322
- -webkit-box-orient: vertical;
323
- overflow: hidden;
324
- }
325
-
326
- .noxion-post-card__meta {
327
- display: flex;
328
- align-items: center;
329
- gap: 0.5rem;
330
- margin-top: auto;
331
- padding-top: 0.875rem;
332
- }
333
-
334
- .noxion-post-card__author {
335
- font-size: 0.75rem;
336
- font-weight: 500;
337
- color: var(--noxion-mutedForeground);
338
- letter-spacing: -0.01em;
339
- }
340
-
341
- .noxion-post-card__author + .noxion-post-card__date::before {
342
- content: "\00b7";
343
- margin-right: 0.375rem;
344
- color: var(--noxion-border);
345
- }
346
-
347
- .noxion-post-card__date {
348
- font-size: 0.75rem;
349
- font-weight: 400;
350
- color: var(--noxion-mutedForeground);
351
- letter-spacing: -0.01em;
352
- }
353
-
354
- .noxion-post-card__tags {
355
- display: flex;
356
- flex-wrap: wrap;
357
- gap: 0.375rem;
358
- margin-top: 0.75rem;
359
- }
360
-
361
- .noxion-post-card__tag {
362
- font-size: 0.6875rem;
363
- font-weight: 500;
364
- padding: 0.1875rem 0.5rem;
365
- border-radius: 9999px;
366
- background-color: var(--noxion-muted);
367
- color: var(--noxion-mutedForeground);
368
- letter-spacing: 0;
369
- transition:
370
- color var(--noxion-transition-fast),
371
- background-color var(--noxion-transition-fast);
372
- }
373
-
374
- .noxion-post-card:hover .noxion-post-card__tag {
375
- color: var(--noxion-foreground);
376
- background-color: color-mix(in srgb, var(--noxion-muted) 80%, var(--noxion-foreground) 20%);
377
- }
378
-
379
- /* ============================================
380
- PostList
381
- ============================================ */
382
-
383
- .noxion-post-list {
384
- display: grid;
385
- grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
386
- gap: 1.25rem;
387
- width: 100%;
388
- }
389
-
390
- @media (max-width: 640px) {
391
- .noxion-post-list {
392
- grid-template-columns: 1fr;
393
- gap: 0;
394
- }
395
- }
396
-
397
- .noxion-post-list--list {
398
- grid-template-columns: 1fr;
399
- gap: 0;
400
- }
401
-
402
- .noxion-post-list--list .noxion-post-card {
403
- border: none;
404
- border-bottom: 1px solid var(--noxion-border);
405
- border-radius: 0;
406
- background-color: transparent;
407
- }
408
-
409
- .noxion-post-list--list .noxion-post-card:hover {
410
- box-shadow: none;
411
- border-bottom-color: color-mix(in srgb, var(--noxion-foreground) 25%, transparent);
412
- }
413
-
414
- .noxion-post-list--list .noxion-post-card__body {
415
- padding: 1.125rem 0;
416
- }
417
-
418
- /* ── POST PAGE (article detail) ── */
419
-
420
- .noxion-template-post {
421
- display: flex;
422
- flex-direction: column;
423
- align-items: center;
424
- width: 100%;
425
- }
426
-
427
- .noxion-template-post__cover {
428
- width: 100%;
429
- max-height: 480px;
430
- overflow: hidden;
431
- background-color: var(--noxion-muted);
432
- }
433
-
434
- .noxion-template-post__cover-image {
435
- display: block;
436
- width: 100%;
437
- height: 100%;
438
- max-height: 480px;
439
- object-fit: cover;
440
- object-position: center;
441
- }
442
-
443
- .noxion-template-post__header {
444
- display: flex;
445
- flex-direction: column;
446
- width: 100%;
447
- max-width: var(--noxion-spacing-content, 720px);
448
- margin: 0 auto;
449
- padding: 2.5rem 1.25rem 0;
450
- }
451
-
452
- .noxion-template-post__topics {
453
- display: flex;
454
- flex-wrap: wrap;
455
- align-items: center;
456
- gap: 0.5rem;
457
- margin-bottom: 1rem;
458
- }
459
-
460
- .noxion-template-post__category {
461
- display: inline-block;
462
- font-size: 0.75rem;
463
- font-weight: 700;
464
- letter-spacing: 0.06em;
465
- text-transform: uppercase;
466
- color: var(--noxion-primary);
467
- }
468
-
469
- .noxion-template-post__tag {
470
- display: inline-block;
471
- font-size: 0.6875rem;
472
- font-weight: 500;
473
- padding: 0.1875rem 0.625rem;
474
- border-radius: 9999px;
475
- background-color: var(--noxion-muted);
476
- color: var(--noxion-mutedForeground);
477
- text-decoration: none;
478
- transition:
479
- color var(--noxion-transition-fast, 100ms ease),
480
- background-color var(--noxion-transition-fast, 100ms ease);
481
- }
482
-
483
- .noxion-template-post__tag:hover {
484
- color: var(--noxion-foreground);
485
- background-color: color-mix(in srgb, var(--noxion-muted) 70%, var(--noxion-foreground) 30%);
486
- }
487
-
488
- .noxion-template-post__title {
489
- margin: 0;
490
- font-size: 2.5rem;
491
- font-weight: 700;
492
- line-height: 1.15;
493
- letter-spacing: -0.03em;
494
- color: var(--noxion-foreground);
495
- word-break: keep-all;
496
- overflow-wrap: break-word;
497
- }
498
-
499
- .noxion-template-post__description {
500
- margin: 1rem 0 0;
501
- font-size: 1.1875rem;
502
- font-weight: 400;
503
- line-height: 1.55;
504
- color: var(--noxion-mutedForeground);
505
- letter-spacing: -0.01em;
506
- }
507
-
508
- .noxion-template-post__meta {
509
- display: flex;
510
- align-items: center;
511
- margin-top: 1.5rem;
512
- padding-top: 1.25rem;
513
- border-top: 1px solid var(--noxion-border);
514
- font-size: 0.875rem;
515
- color: var(--noxion-mutedForeground);
516
- }
517
-
518
- .noxion-template-post__author {
519
- font-weight: 600;
520
- color: var(--noxion-foreground);
521
- }
522
-
523
- .noxion-template-post__meta-dot {
524
- display: inline-block;
525
- width: 3px;
526
- height: 3px;
527
- border-radius: 50%;
528
- background-color: var(--noxion-mutedForeground);
529
- margin: 0 0.625rem;
530
- flex-shrink: 0;
531
- }
532
-
533
- .noxion-template-post__date {
534
- font-weight: 400;
535
- color: var(--noxion-mutedForeground);
536
- letter-spacing: -0.01em;
537
- }
538
-
539
- .noxion-template-post__body {
540
- width: 100%;
541
- max-width: var(--noxion-spacing-content, 720px);
542
- margin: 0 auto;
543
- padding: 2rem 1.25rem calc(max(10vh, 100px));
544
- }
545
-
546
- .noxion-template-post__body .noxion-page--inline {
547
- padding: 0;
548
- }
549
-
550
- @media (max-width: 768px) {
551
- .noxion-template-post__header {
552
- padding: 2rem 1rem 0;
553
- }
554
-
555
- .noxion-template-post__title {
556
- font-size: 1.875rem;
557
- line-height: 1.2;
558
- }
559
-
560
- .noxion-template-post__description {
561
- font-size: 1.0625rem;
562
- }
563
-
564
- .noxion-template-post__meta {
565
- margin-top: 1.25rem;
566
- padding-top: 1rem;
567
- }
568
-
569
- .noxion-template-post__body {
570
- padding: 1.5rem 1rem calc(max(8vh, 80px));
571
- }
572
-
573
- .noxion-template-post__cover {
574
- max-height: 320px;
575
- }
576
-
577
- .noxion-template-post__cover-image {
578
- max-height: 320px;
579
- }
580
- }
581
-
582
- @media (max-width: 480px) {
583
- .noxion-template-post__header {
584
- padding: 1.5rem 1rem 0;
585
- }
586
-
587
- .noxion-template-post__title {
588
- font-size: 1.625rem;
589
- }
590
-
591
- .noxion-template-post__description {
592
- font-size: 1rem;
593
- }
594
-
595
- .noxion-template-post__meta {
596
- flex-wrap: wrap;
597
- gap: 0.25rem;
598
- }
599
-
600
- .noxion-template-post__cover {
601
- max-height: 240px;
602
- }
603
-
604
- .noxion-template-post__cover-image {
605
- max-height: 240px;
606
- }
607
- }
608
-
609
- .noxion-template-post .noxion-page__title {
610
- font-family: var(--noxion-font-sans);
611
- letter-spacing: -0.02em;
612
- }
613
-
614
- .noxion-template-post .noxion-heading {
615
- font-family: var(--noxion-font-sans);
616
- }
617
-
618
- .noxion-template-post .noxion-quote {
619
- border-color: var(--noxion-border);
620
- color: var(--noxion-mutedForeground);
621
- }
622
-
623
- .noxion-template-post .noxion-divider {
624
- border-color: var(--noxion-border);
625
- }
626
-
627
- .noxion-template-post .noxion-callout {
628
- border-color: var(--noxion-border);
629
- background-color: var(--noxion-muted);
630
- }
631
-
632
- .noxion-template-post .noxion-code {
633
- border: 1px solid var(--noxion-border);
634
- }
635
-
636
- .noxion-template-post .noxion-inline-code {
637
- border-radius: var(--noxion-border-radius, 3px);
638
- }
639
-
640
- .noxion-template-post .noxion-link {
641
- border-color: color-mix(in srgb, var(--noxion-primary) 40%, transparent);
642
- }
643
-
644
- .noxion-template-post .noxion-link:hover {
645
- border-color: var(--noxion-primary);
646
- }
647
-
648
- /* ============================================
649
- FeaturedPostCard
650
- ============================================ */
651
-
652
- .noxion-featured-card {
653
- display: block;
654
- position: relative;
655
- text-decoration: none;
656
- color: inherit;
657
- border-radius: var(--noxion-border-radius);
658
- overflow: hidden;
659
- min-height: 360px;
660
- }
661
-
662
- .noxion-featured-card__cover {
663
- position: absolute;
664
- inset: 0;
665
- overflow: hidden;
666
- background-color: var(--noxion-foreground);
667
- }
668
-
669
- .noxion-featured-card__cover-image {
670
- width: 100%;
671
- height: 100%;
672
- object-fit: cover;
673
- object-position: center;
674
- transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
675
- }
676
-
677
- .noxion-featured-card:hover .noxion-featured-card__cover-image {
678
- transform: scale(1.03);
679
- }
680
-
681
- .noxion-featured-card__cover-overlay {
682
- position: absolute;
683
- inset: 0;
684
- background: linear-gradient(
685
- to top,
686
- rgba(0, 0, 0, 0.7) 0%,
687
- rgba(0, 0, 0, 0.35) 40%,
688
- rgba(0, 0, 0, 0.1) 100%
689
- );
690
- pointer-events: none;
691
- }
692
-
693
- .noxion-featured-card--no-cover .noxion-featured-card__cover {
694
- background-color: var(--noxion-foreground);
695
- }
696
-
697
- .noxion-featured-card__content {
698
- position: relative;
699
- z-index: 1;
700
- display: flex;
701
- flex-direction: column;
702
- justify-content: flex-end;
703
- min-height: 360px;
704
- padding: 2rem;
705
- gap: 0.5rem;
706
- color: #ffffff;
707
- }
708
-
709
- .noxion-featured-card__category {
710
- display: inline-block;
711
- font-size: 0.6875rem;
712
- font-weight: 700;
713
- letter-spacing: 0.06em;
714
- text-transform: uppercase;
715
- color: rgba(255, 255, 255, 0.8);
716
- }
717
-
718
- .noxion-featured-card__title {
719
- margin: 0;
720
- font-size: 1.75rem;
721
- font-weight: 700;
722
- line-height: 1.2;
723
- letter-spacing: -0.025em;
724
- color: #ffffff;
725
- }
726
-
727
- @media (min-width: 769px) {
728
- .noxion-featured-card__title {
729
- font-size: 2.25rem;
730
- }
731
- }
732
-
733
- .noxion-featured-card__description {
734
- margin: 0;
735
- font-size: 0.9375rem;
736
- line-height: 1.55;
737
- color: rgba(255, 255, 255, 0.8);
738
- display: -webkit-box;
739
- -webkit-line-clamp: 2;
740
- -webkit-box-orient: vertical;
741
- overflow: hidden;
742
- }
743
-
744
- .noxion-featured-card__meta {
745
- display: flex;
746
- align-items: center;
747
- gap: 0.5rem;
748
- margin-top: 0.25rem;
749
- font-size: 0.8125rem;
750
- color: rgba(255, 255, 255, 0.6);
751
- }
752
-
753
- .noxion-featured-card__author + .noxion-featured-card__date::before {
754
- content: "\00b7";
755
- margin-right: 0.5rem;
756
- }
757
-
758
- .noxion-featured-card__tags {
759
- display: flex;
760
- flex-wrap: wrap;
761
- gap: 0.375rem;
762
- margin-top: 0.25rem;
763
- }
764
-
765
- .noxion-featured-card__tag {
766
- font-size: 0.6875rem;
767
- color: rgba(255, 255, 255, 0.6);
768
- background-color: rgba(255, 255, 255, 0.15);
769
- padding: 0.125rem 0.5rem;
770
- border-radius: 9999px;
771
- letter-spacing: 0.01em;
772
- }
773
-
774
- @media (max-width: 768px) {
775
- .noxion-featured-card {
776
- min-height: 280px;
777
- }
778
-
779
- .noxion-featured-card__content {
780
- min-height: 280px;
781
- padding: 1.5rem;
782
- }
783
-
784
- .noxion-featured-card__title {
785
- font-size: 1.5rem;
786
- }
787
-
788
- .noxion-featured-card__description {
789
- font-size: 0.875rem;
790
- -webkit-line-clamp: 2;
791
- }
792
- }
793
-
794
- @media (max-width: 640px) {
795
- .noxion-featured-card {
796
- min-height: 240px;
797
- }
798
-
799
- .noxion-featured-card__content {
800
- min-height: 240px;
801
- padding: 1.25rem;
802
- gap: 0.375rem;
803
- }
804
-
805
- .noxion-featured-card__title {
806
- font-size: 1.25rem;
807
- }
808
-
809
- .noxion-featured-card__description {
810
- font-size: 0.8125rem;
811
- -webkit-line-clamp: 1;
812
- }
813
-
814
- .noxion-featured-card__meta {
815
- font-size: 0.75rem;
816
- }
817
-
818
- .noxion-featured-card__tags {
819
- display: none;
820
- }
821
- }
822
-
823
- /* ============================================
824
- Home Page
825
- ============================================ */
826
-
827
- .noxion-template-home {
828
- display: flex;
829
- flex-direction: column;
830
- gap: 3rem;
831
- }
832
-
833
- .noxion-home-hero {
834
- display: flex;
835
- flex-direction: column;
836
- gap: 1.25rem;
837
- width: 100vw;
838
- margin-left: calc(-50vw + 50%);
839
- padding: 0 1.25rem;
840
- }
841
-
842
- @media (max-width: 768px) {
843
- .noxion-home-hero {
844
- gap: 1rem;
845
- padding: 0 1rem;
846
- }
847
-
848
- .noxion-home-hero__secondary {
849
- grid-template-columns: 1fr 1fr;
850
- }
851
- }
852
-
853
- @media (max-width: 640px) {
854
- .noxion-home-hero {
855
- gap: 0.75rem;
856
- padding: 0;
857
- }
858
-
859
- .noxion-featured-card {
860
- border-radius: 0;
861
- }
862
-
863
- .noxion-home-hero__secondary {
864
- grid-template-columns: 1fr;
865
- gap: 0.75rem;
866
- padding: 0 0.75rem;
867
- }
868
-
869
- .noxion-template-home {
870
- gap: 2rem;
871
- }
872
- }
873
-
874
- .noxion-home-hero__secondary {
875
- display: grid;
876
- grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
877
- gap: 1.25rem;
878
- }
879
-
880
- .noxion-home-feed__title {
881
- font-size: 0.6875rem;
882
- font-weight: 600;
883
- text-transform: uppercase;
884
- letter-spacing: 0.06em;
885
- color: var(--noxion-mutedForeground);
886
- margin: 0 0 1.25rem;
887
- padding-bottom: 0.75rem;
888
- border-bottom: 1px solid var(--noxion-border);
889
- }
890
-
891
- .noxion-home-feed__toolbar {
892
- display: flex;
893
- flex-direction: column;
894
- gap: 1rem;
895
- margin-bottom: 2rem;
896
- }
897
-
898
- .noxion-loading-spinner {
899
- display: flex;
900
- justify-content: center;
901
- padding: 2rem 0;
902
- }
903
-
904
- .noxion-loading-spinner__ring {
905
- width: 24px;
906
- height: 24px;
907
- border: 2px solid var(--noxion-border, #e5e5e5);
908
- border-top-color: var(--noxion-foreground, #171717);
909
- border-radius: 50%;
910
- animation: noxion-spin 0.6s linear infinite;
911
- }
912
-
913
- @keyframes noxion-spin {
914
- to { transform: rotate(360deg); }
915
- }
916
-
917
- /* ============================================
918
- Tag Page Template
919
- ============================================ */
920
-
921
- .noxion-template-tag {
922
- display: flex;
923
- flex-direction: column;
924
- gap: 2rem;
925
- }
926
-
927
- .noxion-template-tag__title {
928
- font-size: 1.5rem;
929
- font-weight: 600;
930
- letter-spacing: -0.02em;
931
- color: var(--noxion-mutedForeground);
932
- }
933
-
934
- /* ============================================
935
- Archive Page Template
936
- ============================================ */
937
-
938
- .noxion-template-archive {
939
- display: flex;
940
- flex-direction: column;
941
- gap: 2rem;
942
- }
943
-
944
- .noxion-template-archive__title {
945
- font-size: 1.5rem;
946
- font-weight: 700;
947
- letter-spacing: -0.02em;
948
- color: var(--noxion-foreground);
949
- }
950
-
951
- /* ============================================
952
- Search
953
- ============================================ */
954
-
955
- .noxion-search {
956
- position: relative;
957
- width: 100%;
958
- max-width: 280px;
959
- display: flex;
960
- align-items: center;
961
- }
962
-
963
- .noxion-search__icon {
964
- position: absolute;
965
- left: 0.625rem;
966
- top: 50%;
967
- transform: translateY(-50%);
968
- color: var(--noxion-mutedForeground);
969
- pointer-events: none;
970
- display: flex;
971
- align-items: center;
972
- transition: color var(--noxion-transition-fast);
973
- }
974
-
975
- .noxion-search:focus-within .noxion-search__icon {
976
- color: var(--noxion-foreground);
977
- }
978
-
979
- .noxion-search__input {
980
- width: 100%;
981
- padding: 0.4375rem 3rem 0.4375rem 2.125rem;
982
- border-radius: 0.375rem;
983
- border: 1px solid var(--noxion-border);
984
- background-color: var(--noxion-accent);
985
- color: var(--noxion-foreground);
986
- font-size: 0.8125rem;
987
- font-family: inherit;
988
- outline: none;
989
- transition:
990
- border-color var(--noxion-transition-fast),
991
- background-color var(--noxion-transition-fast),
992
- box-shadow var(--noxion-transition-fast);
993
- }
994
-
995
- .noxion-search__input::placeholder {
996
- color: var(--noxion-mutedForeground);
997
- }
998
-
999
- .noxion-search__input:hover {
1000
- border-color: color-mix(in srgb, var(--noxion-foreground) 30%, transparent);
1001
- }
1002
-
1003
- .noxion-search__input:focus {
1004
- border-color: var(--noxion-primary);
1005
- background-color: var(--noxion-background);
1006
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--noxion-primary) 10%, transparent);
1007
- }
1008
-
1009
- .noxion-search__kbd {
1010
- position: absolute;
1011
- right: 0.5rem;
1012
- top: 50%;
1013
- transform: translateY(-50%);
1014
- font-family: var(--noxion-font-sans);
1015
- font-size: 0.625rem;
1016
- font-weight: 500;
1017
- padding: 0.125rem 0.3125rem;
1018
- border-radius: 0.25rem;
1019
- border: 1px solid var(--noxion-border);
1020
- background-color: var(--noxion-background);
1021
- color: var(--noxion-mutedForeground);
1022
- pointer-events: none;
1023
- line-height: 1.4;
1024
- letter-spacing: 0.02em;
1025
- }
1026
-
1027
- /* ============================================
1028
- TagFilter
1029
- ============================================ */
1030
-
1031
- .noxion-tag-filter {
1032
- display: flex;
1033
- flex-wrap: wrap;
1034
- gap: 0.375rem;
1035
- }
1036
-
1037
- .noxion-tag-filter__tag {
1038
- padding: 0.3125rem 0.75rem;
1039
- border-radius: 9999px;
1040
- border: 1px solid var(--noxion-border);
1041
- background-color: transparent;
1042
- color: var(--noxion-mutedForeground);
1043
- font-size: 0.8125rem;
1044
- font-weight: 450;
1045
- font-family: inherit;
1046
- cursor: pointer;
1047
- letter-spacing: -0.01em;
1048
- transition:
1049
- color var(--noxion-transition-fast),
1050
- border-color var(--noxion-transition-fast),
1051
- background-color var(--noxion-transition-fast);
1052
- outline: none;
1053
- }
1054
-
1055
- .noxion-tag-filter__tag:hover {
1056
- color: var(--noxion-foreground);
1057
- border-color: color-mix(in srgb, var(--noxion-foreground) 35%, transparent);
1058
- background-color: var(--noxion-accent);
1059
- }
1060
-
1061
- .noxion-tag-filter__tag:focus-visible {
1062
- box-shadow: 0 0 0 2px var(--noxion-primary);
1063
- }
1064
-
1065
- .noxion-tag-filter__tag--selected {
1066
- background-color: var(--noxion-foreground);
1067
- color: var(--noxion-background);
1068
- border-color: var(--noxion-foreground);
1069
- }
1070
-
1071
- .noxion-tag-filter__tag--selected:hover {
1072
- opacity: 0.82;
1073
- color: var(--noxion-background);
1074
- border-color: var(--noxion-foreground);
1075
- background-color: var(--noxion-foreground);
1076
- }
1077
-
1078
- .noxion-tag-filter__tag--more {
1079
- color: var(--noxion-mutedForeground);
1080
- border-style: dashed;
1081
- letter-spacing: 0;
1082
- }
1083
-
1084
- .noxion-tag-filter__tag--more:hover {
1085
- background-color: var(--noxion-accent);
1086
- border-style: dashed;
1087
- border-color: color-mix(in srgb, var(--noxion-foreground) 35%, transparent);
1088
- color: var(--noxion-foreground);
1089
- }
1090
-
1091
- /* ============================================
1092
- TOC
1093
- ============================================ */
1094
-
1095
- .noxion-toc {
1096
- padding: 1rem 0;
1097
- font-size: 0.8125rem;
1098
- }
1099
-
1100
- .noxion-toc__heading {
1101
- font-size: 0.625rem;
1102
- font-weight: 600;
1103
- text-transform: uppercase;
1104
- letter-spacing: 0.1em;
1105
- color: var(--noxion-mutedForeground);
1106
- margin-bottom: 0.75rem;
1107
- }
1108
-
1109
- .noxion-toc__list {
1110
- list-style: none;
1111
- padding: 0;
1112
- margin: 0;
1113
- border-left: 1px solid var(--noxion-border);
1114
- }
1115
-
1116
- .noxion-toc__item {
1117
- margin-bottom: 0;
1118
- }
1119
-
1120
- .noxion-toc__link {
1121
- display: block;
1122
- padding: 0.25rem 0 0.25rem 0.875rem;
1123
- margin-left: -1px;
1124
- border-left: 2px solid transparent;
1125
- color: var(--noxion-mutedForeground);
1126
- text-decoration: none;
1127
- line-height: 1.45;
1128
- font-size: 0.8125rem;
1129
- letter-spacing: -0.01em;
1130
- transition:
1131
- color var(--noxion-transition-fast),
1132
- border-color var(--noxion-transition-fast);
1133
- }
1134
-
1135
- .noxion-toc__link:hover {
1136
- color: var(--noxion-foreground);
1137
- }
1138
-
1139
- .noxion-toc__item--active > .noxion-toc__link {
1140
- color: var(--noxion-foreground);
1141
- border-left-color: var(--noxion-foreground);
1142
- font-weight: 500;
1143
- }
1144
-
1145
- /* ============================================
1146
- ThemeToggle
1147
- ============================================ */
1148
-
1149
- .noxion-theme-toggle {
1150
- display: inline-flex;
1151
- align-items: center;
1152
- justify-content: center;
1153
- width: 1.875rem;
1154
- height: 1.875rem;
1155
- border-radius: 0.375rem;
1156
- border: none;
1157
- background-color: transparent;
1158
- cursor: pointer;
1159
- color: var(--noxion-mutedForeground);
1160
- transition:
1161
- color var(--noxion-transition-fast),
1162
- background-color var(--noxion-transition-fast);
1163
- outline: none;
1164
- padding: 0;
1165
- }
1166
-
1167
- .noxion-theme-toggle:hover {
1168
- color: var(--noxion-foreground);
1169
- background-color: var(--noxion-muted);
1170
- }
1171
-
1172
- .noxion-theme-toggle:focus-visible {
1173
- box-shadow: 0 0 0 2px var(--noxion-primary);
1174
- }
1175
-
1176
- /* ============================================
1177
- EmptyState
1178
- ============================================ */
1179
-
1180
- .noxion-empty-state {
1181
- display: flex;
1182
- flex-direction: column;
1183
- align-items: center;
1184
- justify-content: center;
1185
- padding: 5rem 1rem;
1186
- text-align: center;
1187
- gap: 0.5rem;
1188
- }
1189
-
1190
- .noxion-empty-state__icon {
1191
- color: var(--noxion-mutedForeground);
1192
- margin-bottom: 0.75rem;
1193
- opacity: 0.5;
1194
- }
1195
-
1196
- .noxion-empty-state__title {
1197
- font-size: 1.0625rem;
1198
- font-weight: 600;
1199
- color: var(--noxion-foreground);
1200
- margin: 0;
1201
- letter-spacing: -0.02em;
1202
- }
1203
-
1204
- .noxion-empty-state__message {
1205
- font-size: 0.875rem;
1206
- color: var(--noxion-mutedForeground);
1207
- margin: 0;
1208
- max-width: 340px;
1209
- line-height: 1.55;
1210
- }
1211
-
1212
- /* ============================================
1213
- Layout
1214
- ============================================ */
1215
-
1216
- .noxion-layout {
1217
- display: flex;
1218
- flex-direction: column;
1219
- min-height: 100vh;
1220
- background-color: var(--noxion-background);
1221
- }
1222
-
1223
- .noxion-layout__header {
1224
- flex-shrink: 0;
1225
- }
1226
-
1227
- .noxion-layout__content {
1228
- flex: 1;
1229
- width: 100%;
1230
- max-width: var(--noxion-spacing-content);
1231
- margin: 0 auto;
1232
- padding: 2.5rem 1.25rem;
1233
- }
1234
-
1235
- @media (max-width: 640px) {
1236
- .noxion-layout__content {
1237
- padding: 1.5rem 1rem;
1238
- }
1239
- }
1240
-
1241
- .noxion-layout__footer {
1242
- flex-shrink: 0;
1243
- margin-top: auto;
1244
- }
1245
-
1246
- .noxion-layout__sidebar {
1247
- width: var(--noxion-spacing-sidebar);
1248
- flex-shrink: 0;
1249
- padding: 2.5rem 1.5rem;
1250
- border-right: 1px solid var(--noxion-border);
1251
- }
1252
-
1253
- .noxion-layout__hero {
1254
- width: 100%;
1255
- }
1256
-
1257
- .noxion-layout--single-column {
1258
- flex-direction: column;
1259
- }
1260
-
1261
- .noxion-layout--sidebar-left > .noxion-layout__main {
1262
- display: flex;
1263
- flex: 1;
1264
- }
1265
-
1266
- .noxion-layout--sidebar-left > .noxion-layout__main > .noxion-layout__sidebar {
1267
- order: -1;
1268
- border-right: 1px solid var(--noxion-border);
1269
- border-left: none;
1270
- }
1271
-
1272
- .noxion-layout--sidebar-right > .noxion-layout__main {
1273
- display: flex;
1274
- flex: 1;
1275
- }
1276
-
1277
- .noxion-layout--sidebar-right > .noxion-layout__main > .noxion-layout__sidebar {
1278
- border-left: 1px solid var(--noxion-border);
1279
- border-right: none;
1280
- }
1281
-
1282
- @media (max-width: 768px) {
1283
- .noxion-layout__sidebar {
1284
- width: 100%;
1285
- border-right: none;
1286
- border-bottom: 1px solid var(--noxion-border);
1287
- padding: 1.5rem 1rem;
1288
- }
1289
-
1290
- .noxion-layout--sidebar-left > .noxion-layout__main,
1291
- .noxion-layout--sidebar-right > .noxion-layout__main {
1292
- flex-direction: column;
1293
- }
1294
-
1295
- .noxion-layout--sidebar-left > .noxion-layout__main > .noxion-layout__sidebar,
1296
- .noxion-layout--sidebar-right > .noxion-layout__main > .noxion-layout__sidebar {
1297
- border-left: none;
1298
- border-right: none;
1299
- }
1300
- }
1301
-
1302
- /* ============================================
1303
- PortfolioGrid
1304
- ============================================ */
1305
-
1306
- .noxion-template-portfolio-grid {
1307
- width: 100%;
1308
- }
1309
-
1310
- .noxion-portfolio-grid {
1311
- display: grid;
1312
- grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
1313
- gap: 1.5rem;
1314
- width: 100%;
1315
- }
1316
-
1317
- @media (max-width: 640px) {
1318
- .noxion-portfolio-grid {
1319
- grid-template-columns: 1fr;
1320
- gap: 1rem;
1321
- }
1322
- }
1323
-
1324
- /* ============================================
1325
- PortfolioProjectCard
1326
- ============================================ */
1327
-
1328
- .noxion-portfolio-card {
1329
- display: flex;
1330
- flex-direction: column;
1331
- border-radius: var(--noxion-border-radius);
1332
- overflow: hidden;
1333
- background-color: var(--noxion-card);
1334
- border: 1px solid var(--noxion-border);
1335
- transition:
1336
- border-color var(--noxion-transition-normal),
1337
- box-shadow var(--noxion-transition-normal),
1338
- transform var(--noxion-transition-normal);
1339
- }
1340
-
1341
- .noxion-portfolio-card:hover {
1342
- border-color: color-mix(in srgb, var(--noxion-foreground) 20%, transparent);
1343
- box-shadow: var(--noxion-shadow-lg);
1344
- transform: translateY(-2px);
1345
- }
1346
-
1347
- .noxion-portfolio-card--featured {
1348
- grid-column: 1 / -1;
1349
- }
1350
-
1351
- .noxion-portfolio-card--no-cover .noxion-portfolio-card__cover {
1352
- aspect-ratio: 3 / 1;
1353
- }
1354
-
1355
- @media (min-width: 769px) {
1356
- .noxion-portfolio-card--featured {
1357
- flex-direction: row;
1358
- }
1359
-
1360
- .noxion-portfolio-card--featured .noxion-portfolio-card__cover {
1361
- width: 50%;
1362
- aspect-ratio: auto;
1363
- min-height: 260px;
1364
- }
1365
-
1366
- .noxion-portfolio-card--featured .noxion-portfolio-card__body {
1367
- flex: 1;
1368
- justify-content: center;
1369
- }
1370
- }
1371
-
1372
- .noxion-portfolio-card__cover {
1373
- position: relative;
1374
- width: 100%;
1375
- aspect-ratio: 16 / 10;
1376
- overflow: hidden;
1377
- background-color: var(--noxion-muted);
1378
- }
1379
-
1380
- .noxion-portfolio-card__cover-image {
1381
- width: 100%;
1382
- height: 100%;
1383
- object-fit: cover;
1384
- object-position: center;
1385
- transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
1386
- }
1387
-
1388
- .noxion-portfolio-card:hover .noxion-portfolio-card__cover-image {
1389
- transform: scale(1.04);
1390
- }
1391
-
1392
- .noxion-portfolio-card__body {
1393
- display: flex;
1394
- flex-direction: column;
1395
- flex: 1;
1396
- padding: 1.25rem;
1397
- gap: 0;
1398
- }
1399
-
1400
- .noxion-portfolio-card__header {
1401
- display: flex;
1402
- align-items: baseline;
1403
- justify-content: space-between;
1404
- gap: 0.75rem;
1405
- margin-bottom: 0.375rem;
1406
- }
1407
-
1408
- .noxion-portfolio-card__title-link {
1409
- text-decoration: none;
1410
- color: inherit;
1411
- }
1412
-
1413
- .noxion-portfolio-card__title {
1414
- margin: 0;
1415
- font-size: 1.0625rem;
1416
- font-weight: 600;
1417
- color: var(--noxion-cardForeground);
1418
- line-height: 1.4;
1419
- letter-spacing: -0.02em;
1420
- }
1421
-
1422
- .noxion-portfolio-card__title-link:hover .noxion-portfolio-card__title {
1423
- color: var(--noxion-primary);
1424
- }
1425
-
1426
- .noxion-portfolio-card__year {
1427
- font-size: 0.75rem;
1428
- font-weight: 500;
1429
- color: var(--noxion-mutedForeground);
1430
- white-space: nowrap;
1431
- letter-spacing: -0.01em;
1432
- }
1433
-
1434
- .noxion-portfolio-card__description {
1435
- margin: 0.375rem 0 0;
1436
- font-size: 0.8125rem;
1437
- color: var(--noxion-mutedForeground);
1438
- line-height: 1.6;
1439
- display: -webkit-box;
1440
- -webkit-line-clamp: 3;
1441
- -webkit-box-orient: vertical;
1442
- overflow: hidden;
1443
- }
1444
-
1445
- .noxion-portfolio-card__tech {
1446
- display: flex;
1447
- flex-wrap: wrap;
1448
- gap: 0.375rem;
1449
- margin-top: 0.75rem;
1450
- }
1451
-
1452
- .noxion-portfolio-card__tech-tag {
1453
- font-size: 0.6875rem;
1454
- font-weight: 500;
1455
- padding: 0.1875rem 0.5rem;
1456
- border-radius: 9999px;
1457
- background-color: var(--noxion-muted);
1458
- color: var(--noxion-mutedForeground);
1459
- letter-spacing: 0;
1460
- transition:
1461
- color var(--noxion-transition-fast),
1462
- background-color var(--noxion-transition-fast);
1463
- }
1464
-
1465
- .noxion-portfolio-card:hover .noxion-portfolio-card__tech-tag {
1466
- color: var(--noxion-foreground);
1467
- background-color: color-mix(in srgb, var(--noxion-muted) 80%, var(--noxion-foreground) 20%);
1468
- }
1469
-
1470
- .noxion-portfolio-card__actions {
1471
- display: flex;
1472
- align-items: center;
1473
- gap: 0.75rem;
1474
- margin-top: auto;
1475
- padding-top: 1rem;
1476
- }
1477
-
1478
- .noxion-portfolio-card__link {
1479
- font-size: 0.8125rem;
1480
- font-weight: 500;
1481
- color: var(--noxion-foreground);
1482
- text-decoration: none;
1483
- padding: 0.375rem 0.875rem;
1484
- border-radius: 0.375rem;
1485
- border: 1px solid var(--noxion-border);
1486
- background-color: transparent;
1487
- transition:
1488
- color var(--noxion-transition-fast),
1489
- border-color var(--noxion-transition-fast),
1490
- background-color var(--noxion-transition-fast);
1491
- }
1492
-
1493
- .noxion-portfolio-card__link:hover {
1494
- background-color: var(--noxion-accent);
1495
- border-color: color-mix(in srgb, var(--noxion-foreground) 30%, transparent);
1496
- }
1497
-
1498
- .noxion-portfolio-card__link--external {
1499
- background-color: var(--noxion-foreground);
1500
- color: var(--noxion-background);
1501
- border-color: var(--noxion-foreground);
1502
- }
1503
-
1504
- .noxion-portfolio-card__link--external:hover {
1505
- opacity: 0.82;
1506
- background-color: var(--noxion-foreground);
1507
- color: var(--noxion-background);
1508
- border-color: var(--noxion-foreground);
1509
- }
1510
-
1511
- /* ============================================
1512
- PortfolioFilter
1513
- ============================================ */
1514
-
1515
- .noxion-portfolio-filter {
1516
- display: flex;
1517
- flex-wrap: wrap;
1518
- gap: 0.375rem;
1519
- }
1520
-
1521
- .noxion-portfolio-filter__tag {
1522
- padding: 0.3125rem 0.75rem;
1523
- border-radius: 9999px;
1524
- border: 1px solid var(--noxion-border);
1525
- background-color: transparent;
1526
- color: var(--noxion-mutedForeground);
1527
- font-size: 0.8125rem;
1528
- font-weight: 450;
1529
- font-family: inherit;
1530
- cursor: pointer;
1531
- letter-spacing: -0.01em;
1532
- transition:
1533
- color var(--noxion-transition-fast),
1534
- border-color var(--noxion-transition-fast),
1535
- background-color var(--noxion-transition-fast);
1536
- outline: none;
1537
- }
1538
-
1539
- .noxion-portfolio-filter__tag:hover {
1540
- color: var(--noxion-foreground);
1541
- border-color: color-mix(in srgb, var(--noxion-foreground) 35%, transparent);
1542
- background-color: var(--noxion-accent);
1543
- }
1544
-
1545
- .noxion-portfolio-filter__tag:focus-visible {
1546
- box-shadow: 0 0 0 2px var(--noxion-primary);
1547
- }
1548
-
1549
- .noxion-portfolio-filter__tag--selected {
1550
- background-color: var(--noxion-foreground);
1551
- color: var(--noxion-background);
1552
- border-color: var(--noxion-foreground);
1553
- }
1554
-
1555
- .noxion-portfolio-filter__tag--selected:hover {
1556
- opacity: 0.82;
1557
- color: var(--noxion-background);
1558
- border-color: var(--noxion-foreground);
1559
- background-color: var(--noxion-foreground);
1560
- }
1561
-
1562
- .noxion-portfolio-filter__tag--more {
1563
- color: var(--noxion-mutedForeground);
1564
- border-style: dashed;
1565
- letter-spacing: 0;
1566
- }
1567
-
1568
- .noxion-portfolio-filter__tag--more:hover {
1569
- background-color: var(--noxion-accent);
1570
- border-style: dashed;
1571
- border-color: color-mix(in srgb, var(--noxion-foreground) 35%, transparent);
1572
- color: var(--noxion-foreground);
1573
- }
1574
-
1575
- /* ============================================
1576
- PortfolioProject (detail page)
1577
- ============================================ */
1578
-
1579
- .noxion-template-portfolio-project {
1580
- width: 100%;
1581
- }
1582
-
1583
- .noxion-portfolio-project__header {
1584
- display: flex;
1585
- align-items: center;
1586
- justify-content: space-between;
1587
- gap: 1rem;
1588
- margin-bottom: 1.5rem;
1589
- padding-bottom: 1rem;
1590
- border-bottom: 1px solid var(--noxion-border);
1591
- }
1592
-
1593
- @media (max-width: 640px) {
1594
- .noxion-portfolio-project__header {
1595
- flex-direction: column;
1596
- align-items: flex-start;
1597
- gap: 0.75rem;
1598
- }
1599
- }
1600
-
1601
- .noxion-portfolio-project__tech {
1602
- display: flex;
1603
- flex-wrap: wrap;
1604
- gap: 0.375rem;
1605
- }
1606
-
1607
- .noxion-portfolio-project__tech-tag {
1608
- font-size: 0.6875rem;
1609
- font-weight: 500;
1610
- padding: 0.1875rem 0.5rem;
1611
- border-radius: 9999px;
1612
- background-color: var(--noxion-muted);
1613
- color: var(--noxion-mutedForeground);
1614
- }
1615
-
1616
- .noxion-portfolio-project__link {
1617
- font-size: 0.8125rem;
1618
- font-weight: 500;
1619
- color: var(--noxion-background);
1620
- background-color: var(--noxion-foreground);
1621
- text-decoration: none;
1622
- padding: 0.4375rem 1rem;
1623
- border-radius: 0.375rem;
1624
- white-space: nowrap;
1625
- transition: opacity var(--noxion-transition-fast);
1626
- }
1627
-
1628
- .noxion-portfolio-project__link:hover {
1629
- opacity: 0.82;
1630
- }
1631
-
1632
- /* ============================================
1633
- DocsSidebar
1634
- ============================================ */
1635
-
1636
- .noxion-docs-sidebar {
1637
- font-size: 0.8125rem;
1638
- }
1639
-
1640
- .noxion-docs-sidebar__list {
1641
- list-style: none;
1642
- padding: 0;
1643
- margin: 0;
1644
- }
1645
-
1646
- .noxion-docs-sidebar__item {
1647
- margin: 0;
1648
- }
1649
-
1650
- .noxion-docs-sidebar__link {
1651
- display: block;
1652
- padding: 0.375rem 0.5rem;
1653
- border-radius: 0.375rem;
1654
- color: var(--noxion-mutedForeground);
1655
- text-decoration: none;
1656
- line-height: 1.45;
1657
- letter-spacing: -0.01em;
1658
- transition:
1659
- color var(--noxion-transition-fast),
1660
- background-color var(--noxion-transition-fast);
1661
- }
1662
-
1663
- .noxion-docs-sidebar__link:hover {
1664
- color: var(--noxion-foreground);
1665
- background-color: var(--noxion-accent);
1666
- }
1667
-
1668
- .noxion-docs-sidebar__link--active {
1669
- color: var(--noxion-foreground);
1670
- font-weight: 500;
1671
- background-color: var(--noxion-muted);
1672
- }
1673
-
1674
- .noxion-docs-sidebar__link--active:hover {
1675
- background-color: var(--noxion-muted);
1676
- }
1677
-
1678
- /* ============================================
1679
- DocsNav (prev / next)
1680
- ============================================ */
1681
-
1682
- .noxion-docs-nav {
1683
- display: grid;
1684
- grid-template-columns: 1fr 1fr;
1685
- gap: 1rem;
1686
- margin-top: 3rem;
1687
- padding-top: 1.5rem;
1688
- border-top: 1px solid var(--noxion-border);
1689
- }
1690
-
1691
- @media (max-width: 640px) {
1692
- .noxion-docs-nav {
1693
- grid-template-columns: 1fr;
1694
- gap: 0.75rem;
1695
- margin-top: 2rem;
1696
- }
1697
- }
1698
-
1699
- .noxion-docs-nav__prev {
1700
- display: flex;
1701
- }
1702
-
1703
- .noxion-docs-nav__next {
1704
- display: flex;
1705
- justify-content: flex-end;
1706
- }
1707
-
1708
- @media (max-width: 640px) {
1709
- .noxion-docs-nav__next {
1710
- justify-content: flex-start;
1711
- }
1712
- }
1713
-
1714
- .noxion-docs-nav__link {
1715
- display: flex;
1716
- flex-direction: column;
1717
- gap: 0.25rem;
1718
- padding: 0.75rem 1rem;
1719
- border-radius: var(--noxion-border-radius);
1720
- border: 1px solid var(--noxion-border);
1721
- text-decoration: none;
1722
- color: inherit;
1723
- transition:
1724
- border-color var(--noxion-transition-fast),
1725
- background-color var(--noxion-transition-fast);
1726
- min-width: 0;
1727
- }
1728
-
1729
- .noxion-docs-nav__link:hover {
1730
- border-color: color-mix(in srgb, var(--noxion-foreground) 30%, transparent);
1731
- background-color: var(--noxion-accent);
1732
- }
1733
-
1734
- .noxion-docs-nav__label {
1735
- font-size: 0.6875rem;
1736
- font-weight: 600;
1737
- text-transform: uppercase;
1738
- letter-spacing: 0.04em;
1739
- color: var(--noxion-mutedForeground);
1740
- }
1741
-
1742
- .noxion-docs-nav__title {
1743
- font-size: 0.875rem;
1744
- font-weight: 500;
1745
- color: var(--noxion-foreground);
1746
- letter-spacing: -0.01em;
1747
- overflow: hidden;
1748
- text-overflow: ellipsis;
1749
- white-space: nowrap;
1750
- }
1751
-
1752
- .noxion-docs-nav__next .noxion-docs-nav__link {
1753
- text-align: right;
1754
- align-items: flex-end;
1755
- }
1756
-
1757
- @media (max-width: 640px) {
1758
- .noxion-docs-nav__next .noxion-docs-nav__link {
1759
- text-align: left;
1760
- align-items: flex-start;
1761
- }
1762
- }
1763
-
1764
- /* ============================================
1765
- DocsBreadcrumb
1766
- ============================================ */
1767
-
1768
- .noxion-docs-breadcrumb {
1769
- font-size: 0.8125rem;
1770
- margin-bottom: 1.5rem;
1771
- }
1772
-
1773
- .noxion-docs-breadcrumb__list {
1774
- list-style: none;
1775
- padding: 0;
1776
- margin: 0;
1777
- display: flex;
1778
- align-items: center;
1779
- flex-wrap: wrap;
1780
- gap: 0;
1781
- }
1782
-
1783
- .noxion-docs-breadcrumb__item {
1784
- display: inline-flex;
1785
- align-items: center;
1786
- }
1787
-
1788
- .noxion-docs-breadcrumb__link {
1789
- color: var(--noxion-mutedForeground);
1790
- text-decoration: none;
1791
- transition: color var(--noxion-transition-fast);
1792
- }
1793
-
1794
- .noxion-docs-breadcrumb__link:hover {
1795
- color: var(--noxion-foreground);
1796
- }
1797
-
1798
- .noxion-docs-breadcrumb__current {
1799
- color: var(--noxion-foreground);
1800
- font-weight: 500;
1801
- }
1802
-
1803
- .noxion-docs-breadcrumb__separator {
1804
- margin: 0 0.375rem;
1805
- color: var(--noxion-border);
1806
- font-size: 0.75rem;
1807
- }
1808
-
1809
- /* ============================================
1810
- DocsPage template
1811
- ============================================ */
1812
-
1813
- .noxion-template-docs {
1814
- width: 100%;
1815
- }