devfolio-page 0.1.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 (115) hide show
  1. package/README.md +219 -0
  2. package/dist/cli/commands/init.js +282 -0
  3. package/dist/cli/commands/render.js +105 -0
  4. package/dist/cli/commands/themes.js +40 -0
  5. package/dist/cli/commands/validate.js +86 -0
  6. package/dist/cli/helpers/validate.js +99 -0
  7. package/dist/cli/index.js +51 -0
  8. package/dist/cli/postinstall.js +20 -0
  9. package/dist/cli/schemas/portfolio.schema.js +299 -0
  10. package/dist/generator/builder.js +551 -0
  11. package/dist/generator/markdown.js +57 -0
  12. package/dist/generator/themes/dark-academia/partials/education.html +15 -0
  13. package/dist/generator/themes/dark-academia/partials/experience.html +23 -0
  14. package/dist/generator/themes/dark-academia/partials/hero.html +15 -0
  15. package/dist/generator/themes/dark-academia/partials/projects.html +17 -0
  16. package/dist/generator/themes/dark-academia/partials/skills.html +11 -0
  17. package/dist/generator/themes/dark-academia/partials/writing.html +15 -0
  18. package/dist/generator/themes/dark-academia/script.js +91 -0
  19. package/dist/generator/themes/dark-academia/styles.css +913 -0
  20. package/dist/generator/themes/dark-academia/template.html +46 -0
  21. package/dist/generator/themes/dark-academia/templates/experiments-index.html +80 -0
  22. package/dist/generator/themes/dark-academia/templates/homepage.html +125 -0
  23. package/dist/generator/themes/dark-academia/templates/project.html +101 -0
  24. package/dist/generator/themes/dark-academia/templates/projects-index.html +80 -0
  25. package/dist/generator/themes/dark-academia/templates/writing-index.html +75 -0
  26. package/dist/generator/themes/modern/partials/education.html +14 -0
  27. package/dist/generator/themes/modern/partials/experience.html +21 -0
  28. package/dist/generator/themes/modern/partials/hero.html +15 -0
  29. package/dist/generator/themes/modern/partials/projects.html +17 -0
  30. package/dist/generator/themes/modern/partials/skills.html +11 -0
  31. package/dist/generator/themes/modern/partials/writing.html +14 -0
  32. package/dist/generator/themes/modern/script.js +136 -0
  33. package/dist/generator/themes/modern/styles.css +835 -0
  34. package/dist/generator/themes/modern/template.html +59 -0
  35. package/dist/generator/themes/modern/templates/experiments-index.html +78 -0
  36. package/dist/generator/themes/modern/templates/homepage.html +125 -0
  37. package/dist/generator/themes/modern/templates/project.html +98 -0
  38. package/dist/generator/themes/modern/templates/projects-index.html +79 -0
  39. package/dist/generator/themes/modern/templates/writing-index.html +73 -0
  40. package/dist/generator/themes/srcl/partials/education.html +27 -0
  41. package/dist/generator/themes/srcl/partials/experience.html +25 -0
  42. package/dist/generator/themes/srcl/partials/hero.html +22 -0
  43. package/dist/generator/themes/srcl/partials/projects.html +24 -0
  44. package/dist/generator/themes/srcl/partials/sections/code.html +8 -0
  45. package/dist/generator/themes/srcl/partials/sections/demo.html +8 -0
  46. package/dist/generator/themes/srcl/partials/sections/gallery.html +12 -0
  47. package/dist/generator/themes/srcl/partials/sections/image.html +6 -0
  48. package/dist/generator/themes/srcl/partials/sections/interactive.html +8 -0
  49. package/dist/generator/themes/srcl/partials/sections/metrics.html +10 -0
  50. package/dist/generator/themes/srcl/partials/sections/outcomes.html +5 -0
  51. package/dist/generator/themes/srcl/partials/sections/overview.html +5 -0
  52. package/dist/generator/themes/srcl/partials/sections/process.html +5 -0
  53. package/dist/generator/themes/srcl/partials/skills.html +21 -0
  54. package/dist/generator/themes/srcl/partials/writing.html +14 -0
  55. package/dist/generator/themes/srcl/script.js +354 -0
  56. package/dist/generator/themes/srcl/styles.css +1260 -0
  57. package/dist/generator/themes/srcl/template.html +46 -0
  58. package/dist/generator/themes/srcl/templates/experiments-index.html +66 -0
  59. package/dist/generator/themes/srcl/templates/homepage.html +136 -0
  60. package/dist/generator/themes/srcl/templates/project.html +96 -0
  61. package/dist/generator/themes/srcl/templates/projects-index.html +70 -0
  62. package/dist/generator/themes/srcl/templates/writing-index.html +61 -0
  63. package/dist/types/portfolio.js +4 -0
  64. package/package.json +58 -0
  65. package/src/generator/themes/dark-academia/partials/education.html +15 -0
  66. package/src/generator/themes/dark-academia/partials/experience.html +23 -0
  67. package/src/generator/themes/dark-academia/partials/hero.html +15 -0
  68. package/src/generator/themes/dark-academia/partials/projects.html +17 -0
  69. package/src/generator/themes/dark-academia/partials/skills.html +11 -0
  70. package/src/generator/themes/dark-academia/partials/writing.html +15 -0
  71. package/src/generator/themes/dark-academia/script.js +91 -0
  72. package/src/generator/themes/dark-academia/styles.css +913 -0
  73. package/src/generator/themes/dark-academia/template.html +46 -0
  74. package/src/generator/themes/dark-academia/templates/experiments-index.html +80 -0
  75. package/src/generator/themes/dark-academia/templates/homepage.html +125 -0
  76. package/src/generator/themes/dark-academia/templates/project.html +101 -0
  77. package/src/generator/themes/dark-academia/templates/projects-index.html +80 -0
  78. package/src/generator/themes/dark-academia/templates/writing-index.html +75 -0
  79. package/src/generator/themes/modern/partials/education.html +14 -0
  80. package/src/generator/themes/modern/partials/experience.html +21 -0
  81. package/src/generator/themes/modern/partials/hero.html +15 -0
  82. package/src/generator/themes/modern/partials/projects.html +17 -0
  83. package/src/generator/themes/modern/partials/skills.html +11 -0
  84. package/src/generator/themes/modern/partials/writing.html +14 -0
  85. package/src/generator/themes/modern/script.js +136 -0
  86. package/src/generator/themes/modern/styles.css +835 -0
  87. package/src/generator/themes/modern/template.html +59 -0
  88. package/src/generator/themes/modern/templates/experiments-index.html +78 -0
  89. package/src/generator/themes/modern/templates/homepage.html +125 -0
  90. package/src/generator/themes/modern/templates/project.html +98 -0
  91. package/src/generator/themes/modern/templates/projects-index.html +79 -0
  92. package/src/generator/themes/modern/templates/writing-index.html +73 -0
  93. package/src/generator/themes/srcl/partials/education.html +27 -0
  94. package/src/generator/themes/srcl/partials/experience.html +25 -0
  95. package/src/generator/themes/srcl/partials/hero.html +22 -0
  96. package/src/generator/themes/srcl/partials/projects.html +24 -0
  97. package/src/generator/themes/srcl/partials/sections/code.html +8 -0
  98. package/src/generator/themes/srcl/partials/sections/demo.html +8 -0
  99. package/src/generator/themes/srcl/partials/sections/gallery.html +12 -0
  100. package/src/generator/themes/srcl/partials/sections/image.html +6 -0
  101. package/src/generator/themes/srcl/partials/sections/interactive.html +8 -0
  102. package/src/generator/themes/srcl/partials/sections/metrics.html +10 -0
  103. package/src/generator/themes/srcl/partials/sections/outcomes.html +5 -0
  104. package/src/generator/themes/srcl/partials/sections/overview.html +5 -0
  105. package/src/generator/themes/srcl/partials/sections/process.html +5 -0
  106. package/src/generator/themes/srcl/partials/skills.html +21 -0
  107. package/src/generator/themes/srcl/partials/writing.html +14 -0
  108. package/src/generator/themes/srcl/script.js +354 -0
  109. package/src/generator/themes/srcl/styles.css +1260 -0
  110. package/src/generator/themes/srcl/template.html +46 -0
  111. package/src/generator/themes/srcl/templates/experiments-index.html +66 -0
  112. package/src/generator/themes/srcl/templates/homepage.html +136 -0
  113. package/src/generator/themes/srcl/templates/project.html +96 -0
  114. package/src/generator/themes/srcl/templates/projects-index.html +70 -0
  115. package/src/generator/themes/srcl/templates/writing-index.html +61 -0
@@ -0,0 +1,1260 @@
1
+ /* ============================================
2
+ SRCL Theme for dev.page
3
+ Adapted from sacred.computer components
4
+ ============================================ */
5
+
6
+ /* --------------------------------------------
7
+ CSS Custom Properties
8
+ -------------------------------------------- */
9
+ :root {
10
+ /* Base colors */
11
+ --color-black: rgba(0, 0, 0, 1);
12
+ --color-white: rgba(255, 255, 255, 1);
13
+ --color-gray-10: rgba(244, 244, 244, 1);
14
+ --color-gray-20: rgba(224, 224, 224, 1);
15
+ --color-gray-30: rgba(198, 198, 198, 1);
16
+ --color-gray-40: rgba(168, 168, 168, 1);
17
+ --color-gray-50: rgba(141, 141, 141, 1);
18
+ --color-gray-60: rgba(111, 111, 111, 1);
19
+ --color-gray-70: rgba(82, 82, 82, 1);
20
+ --color-gray-80: rgba(57, 57, 57, 1);
21
+ --color-gray-90: rgba(38, 38, 38, 1);
22
+
23
+ /* Accent colors */
24
+ --color-neon-green: rgba(92, 255, 59, 1);
25
+ --color-neon-green-subdued: rgba(92, 255, 59, 0.5);
26
+ --color-daybreak: rgba(239, 99, 0, 1);
27
+ --color-daybreak-subdued: rgba(239, 99, 0, 0.5);
28
+
29
+ /* Typography */
30
+ --font-family-mono: 'SF Mono', 'Consolas', 'Monaco', 'Menlo', monospace;
31
+ --font-size: 16px;
32
+ --line-height: 1.5;
33
+ --line-height-computed: calc(var(--line-height) * 1rem);
34
+
35
+ /* Spacing */
36
+ --spacing-unit: 1rem;
37
+ --content-width: 88ch;
38
+
39
+ /* Z-index scale */
40
+ --z-index-grid: 0;
41
+ --z-index-content: 1;
42
+ --z-index-action-bar: 10;
43
+ }
44
+
45
+ /* Dark theme (default) */
46
+ [data-theme="dark"] {
47
+ --theme-background: var(--color-black);
48
+ --theme-background-card: rgba(10, 10, 10, 1);
49
+ --theme-text: var(--color-white);
50
+ --theme-text-muted: var(--color-gray-50);
51
+ --theme-border: var(--color-gray-80);
52
+ --theme-border-subdued: rgba(82, 82, 82, 0.3);
53
+ --theme-button: var(--color-white);
54
+ --theme-button-text: var(--color-black);
55
+ --theme-button-foreground: var(--color-gray-90);
56
+ --theme-button-background: var(--color-gray-80);
57
+ --theme-focused: var(--color-daybreak);
58
+ --theme-focused-subdued: var(--color-daybreak-subdued);
59
+ }
60
+
61
+ /* Light theme */
62
+ [data-theme="light"] {
63
+ --theme-background: var(--color-white);
64
+ --theme-background-card: var(--color-gray-10);
65
+ --theme-text: var(--color-black);
66
+ --theme-text-muted: var(--color-gray-60);
67
+ --theme-border: var(--color-gray-20);
68
+ --theme-border-subdued: rgba(168, 168, 168, 0.2);
69
+ --theme-button: var(--color-black);
70
+ --theme-button-text: var(--color-white);
71
+ --theme-button-foreground: var(--color-gray-30);
72
+ --theme-button-background: var(--color-gray-20);
73
+ --theme-focused: var(--color-neon-green);
74
+ --theme-focused-subdued: var(--color-neon-green-subdued);
75
+ }
76
+
77
+ /* --------------------------------------------
78
+ Reset & Base Styles
79
+ -------------------------------------------- */
80
+ *,
81
+ *::before,
82
+ *::after {
83
+ box-sizing: border-box;
84
+ margin: 0;
85
+ padding: 0;
86
+ }
87
+
88
+ html {
89
+ font-size: var(--font-size);
90
+ scroll-behavior: smooth;
91
+ }
92
+
93
+ body {
94
+ background: var(--theme-background);
95
+ color: var(--theme-text);
96
+ font-family: var(--font-family-mono);
97
+ font-size: 1rem;
98
+ line-height: var(--line-height);
99
+ font-weight: 400;
100
+ font-variant-numeric: tabular-nums lining-nums;
101
+ text-rendering: geometricPrecision;
102
+ -webkit-font-smoothing: antialiased;
103
+ -moz-osx-font-smoothing: grayscale;
104
+ min-height: 100vh;
105
+ }
106
+
107
+ /* Custom scrollbar */
108
+ ::-webkit-scrollbar {
109
+ width: 1ch;
110
+ height: var(--line-height-computed);
111
+ }
112
+
113
+ ::-webkit-scrollbar-track {
114
+ background: var(--theme-background);
115
+ }
116
+
117
+ ::-webkit-scrollbar-thumb {
118
+ background: var(--theme-border);
119
+ }
120
+
121
+ ::-webkit-scrollbar-thumb:hover {
122
+ background: var(--theme-text-muted);
123
+ }
124
+
125
+ /* --------------------------------------------
126
+ Typography
127
+ -------------------------------------------- */
128
+ h1, h2, h3, h4, h5, h6 {
129
+ font-weight: 400;
130
+ font-family: var(--font-family-mono);
131
+ text-transform: uppercase;
132
+ letter-spacing: 0.05em;
133
+ }
134
+
135
+ h1 { font-size: 1.5rem; }
136
+ h2 { font-size: 1rem; }
137
+ h3 { font-size: 1rem; }
138
+
139
+ p {
140
+ margin-bottom: calc(var(--line-height-computed) * 0.5);
141
+ }
142
+
143
+ a {
144
+ color: var(--theme-text);
145
+ text-decoration: none;
146
+ background: var(--theme-border-subdued);
147
+ transition: background 200ms ease;
148
+ }
149
+
150
+ a:hover,
151
+ a:focus {
152
+ background: var(--theme-focused);
153
+ outline: none;
154
+ }
155
+
156
+ /* --------------------------------------------
157
+ Grid Overlay
158
+ -------------------------------------------- */
159
+ .grid-overlay {
160
+ position: fixed;
161
+ top: 0;
162
+ left: 0;
163
+ right: 0;
164
+ bottom: 0;
165
+ pointer-events: none;
166
+ z-index: var(--z-index-grid);
167
+ background-image:
168
+ linear-gradient(to right, var(--theme-border-subdued) 1px, transparent 1px),
169
+ linear-gradient(to bottom, var(--theme-border-subdued) 1px, transparent 1px);
170
+ background-size: 1ch var(--line-height-computed);
171
+ opacity: 0.5;
172
+ }
173
+
174
+ /* --------------------------------------------
175
+ Action Bar
176
+ -------------------------------------------- */
177
+ .srcl-action-bar {
178
+ position: fixed;
179
+ top: 0;
180
+ left: 0;
181
+ right: 0;
182
+ z-index: var(--z-index-action-bar);
183
+ display: flex;
184
+ align-items: center;
185
+ justify-content: space-between;
186
+ background: var(--theme-background);
187
+ border-bottom: 2px solid var(--theme-text);
188
+ padding: 0 2ch;
189
+ height: calc(var(--line-height-computed) * 2);
190
+ }
191
+
192
+ .srcl-action-bar .primary {
193
+ display: flex;
194
+ gap: 0;
195
+ }
196
+
197
+ .srcl-action-bar .primary a {
198
+ background: transparent;
199
+ text-transform: uppercase;
200
+ font-size: 0.875rem;
201
+ letter-spacing: 0.05em;
202
+ padding: calc(var(--line-height-computed) * 0.25) 2ch;
203
+ border: 1px solid var(--theme-border);
204
+ border-right: none;
205
+ }
206
+
207
+ .srcl-action-bar .primary a:last-child {
208
+ border-right: 1px solid var(--theme-border);
209
+ }
210
+
211
+ .srcl-action-bar .primary a:hover,
212
+ .srcl-action-bar .primary a.active {
213
+ background: var(--theme-focused);
214
+ border-color: var(--theme-focused);
215
+ }
216
+
217
+ .srcl-action-bar .secondary {
218
+ display: flex;
219
+ gap: 1ch;
220
+ }
221
+
222
+ .srcl-action-bar .hotkey {
223
+ display: inline-flex;
224
+ align-items: center;
225
+ justify-content: center;
226
+ background: transparent;
227
+ color: var(--theme-text);
228
+ border: 1px solid var(--theme-border);
229
+ font-family: var(--font-family-mono);
230
+ font-size: 0.875rem;
231
+ padding: calc(var(--line-height-computed) * 0.25) 1.5ch;
232
+ cursor: pointer;
233
+ user-select: none;
234
+ min-width: 4ch;
235
+ }
236
+
237
+ .srcl-action-bar .hotkey:hover {
238
+ background: var(--theme-focused);
239
+ border-color: var(--theme-focused);
240
+ }
241
+
242
+ .srcl-action-bar .hotkey .key {
243
+ font-size: 0.75rem;
244
+ }
245
+
246
+ /* --------------------------------------------
247
+ Main Content
248
+ -------------------------------------------- */
249
+ .content {
250
+ max-width: var(--content-width);
251
+ margin: 0 auto;
252
+ padding: calc(var(--line-height-computed) * 4) 2ch calc(var(--line-height-computed) * 2);
253
+ }
254
+
255
+ .section {
256
+ margin-bottom: calc(var(--line-height-computed) * 2);
257
+ }
258
+
259
+ .section-title {
260
+ margin-bottom: var(--line-height-computed);
261
+ padding-bottom: calc(var(--line-height-computed) * 0.25);
262
+ border-bottom: 2px solid var(--theme-text);
263
+ }
264
+
265
+ /* --------------------------------------------
266
+ SRCL Card
267
+ -------------------------------------------- */
268
+ .srcl-card {
269
+ position: relative;
270
+ background: var(--theme-background);
271
+ margin-bottom: var(--line-height-computed);
272
+ }
273
+
274
+ .srcl-card .card-content {
275
+ box-shadow:
276
+ inset 2px 0 0 0 var(--theme-text),
277
+ inset -2px 0 0 0 var(--theme-text),
278
+ inset 0 -2px 0 0 var(--theme-text),
279
+ inset 0 2px 0 0 var(--theme-text);
280
+ padding: calc(var(--line-height-computed) * 0.5) 2ch var(--line-height-computed);
281
+ }
282
+
283
+ /* Card corners - MS-DOS style decorative borders */
284
+ .srcl-card .card-corner {
285
+ position: absolute;
286
+ width: 2ch;
287
+ height: calc(var(--line-height-computed) * 0.5);
288
+ }
289
+
290
+ .srcl-card .card-corner.top-left {
291
+ top: 0;
292
+ left: 0;
293
+ box-shadow:
294
+ inset 2px 0 0 0 var(--theme-text),
295
+ inset 0 2px 0 0 var(--theme-text);
296
+ }
297
+
298
+ .srcl-card .card-corner.top-right {
299
+ top: 0;
300
+ right: 0;
301
+ box-shadow:
302
+ inset -2px 0 0 0 var(--theme-text),
303
+ inset 0 2px 0 0 var(--theme-text);
304
+ }
305
+
306
+ .srcl-card .card-corner.bottom-left {
307
+ bottom: 0;
308
+ left: 0;
309
+ box-shadow:
310
+ inset 2px 0 0 0 var(--theme-text),
311
+ inset 0 -2px 0 0 var(--theme-text);
312
+ }
313
+
314
+ .srcl-card .card-corner.bottom-right {
315
+ bottom: 0;
316
+ right: 0;
317
+ box-shadow:
318
+ inset -2px 0 0 0 var(--theme-text),
319
+ inset 0 -2px 0 0 var(--theme-text);
320
+ }
321
+
322
+ /* --------------------------------------------
323
+ Hero Section
324
+ -------------------------------------------- */
325
+ .hero-card {
326
+ margin-bottom: calc(var(--line-height-computed) * 2);
327
+ }
328
+
329
+ .hero-card .name {
330
+ font-size: 1.5rem;
331
+ margin-bottom: calc(var(--line-height-computed) * 0.25);
332
+ }
333
+
334
+ .hero-card .title {
335
+ color: var(--theme-text-muted);
336
+ margin-bottom: calc(var(--line-height-computed) * 0.25);
337
+ }
338
+
339
+ .hero-card .location {
340
+ color: var(--theme-text-muted);
341
+ font-size: 0.875rem;
342
+ margin-bottom: var(--line-height-computed);
343
+ }
344
+
345
+ .hero-card .contact-links {
346
+ display: flex;
347
+ flex-wrap: wrap;
348
+ gap: 2ch;
349
+ margin-bottom: var(--line-height-computed);
350
+ }
351
+
352
+ .hero-card .contact-link {
353
+ font-size: 0.875rem;
354
+ text-transform: uppercase;
355
+ letter-spacing: 0.05em;
356
+ }
357
+
358
+ .hero-card .bio {
359
+ white-space: pre-wrap;
360
+ line-height: var(--line-height);
361
+ }
362
+
363
+ /* --------------------------------------------
364
+ Accordion
365
+ -------------------------------------------- */
366
+ .srcl-accordion {
367
+ border: 2px solid var(--theme-text);
368
+ }
369
+
370
+ .accordion-item {
371
+ border-bottom: 1px solid var(--theme-border);
372
+ }
373
+
374
+ .accordion-item:last-child {
375
+ border-bottom: none;
376
+ }
377
+
378
+ .accordion-header {
379
+ display: flex;
380
+ align-items: center;
381
+ justify-content: space-between;
382
+ width: 100%;
383
+ padding: calc(var(--line-height-computed) * 0.5) 2ch;
384
+ background: transparent;
385
+ border: none;
386
+ color: var(--theme-text);
387
+ font-family: var(--font-family-mono);
388
+ font-size: 1rem;
389
+ text-align: left;
390
+ cursor: pointer;
391
+ transition: background 200ms ease;
392
+ }
393
+
394
+ .accordion-header:hover {
395
+ background: var(--theme-focused);
396
+ }
397
+
398
+ .accordion-header .company,
399
+ .accordion-header .institution {
400
+ font-weight: 400;
401
+ text-transform: uppercase;
402
+ }
403
+
404
+ .accordion-header .meta {
405
+ display: flex;
406
+ gap: 2ch;
407
+ color: var(--theme-text-muted);
408
+ font-size: 0.875rem;
409
+ }
410
+
411
+ .accordion-header .accordion-icon {
412
+ flex-shrink: 0;
413
+ width: 2ch;
414
+ text-align: center;
415
+ user-select: none;
416
+ }
417
+
418
+ .accordion-content {
419
+ display: none;
420
+ padding: 0 2ch var(--line-height-computed) 4ch;
421
+ }
422
+
423
+ .accordion-item[data-expanded="true"] .accordion-content {
424
+ display: block;
425
+ }
426
+
427
+ .accordion-item[data-expanded="true"] .accordion-icon {
428
+ transform: rotate(45deg);
429
+ }
430
+
431
+ .accordion-content .location {
432
+ color: var(--theme-text-muted);
433
+ font-size: 0.875rem;
434
+ margin-bottom: calc(var(--line-height-computed) * 0.5);
435
+ }
436
+
437
+ /* --------------------------------------------
438
+ SRCL List
439
+ -------------------------------------------- */
440
+ .srcl-list {
441
+ list-style: none;
442
+ padding-left: 2ch;
443
+ }
444
+
445
+ .srcl-list li {
446
+ position: relative;
447
+ padding-left: 2ch;
448
+ margin-bottom: calc(var(--line-height-computed) * 0.25);
449
+ }
450
+
451
+ .srcl-list li::before {
452
+ content: '▪';
453
+ position: absolute;
454
+ left: 0;
455
+ color: var(--theme-text);
456
+ }
457
+
458
+ /* --------------------------------------------
459
+ Project Grid
460
+ -------------------------------------------- */
461
+ .project-grid {
462
+ display: grid;
463
+ grid-template-columns: repeat(auto-fit, minmax(28ch, 1fr));
464
+ gap: var(--line-height-computed);
465
+ }
466
+
467
+ .project-card {
468
+ height: 100%;
469
+ }
470
+
471
+ .project-card.featured {
472
+ grid-column: span 1;
473
+ }
474
+
475
+ .project-card.featured .card-content {
476
+ background: var(--theme-background-card);
477
+ }
478
+
479
+ .project-header {
480
+ display: flex;
481
+ justify-content: space-between;
482
+ align-items: baseline;
483
+ margin-bottom: calc(var(--line-height-computed) * 0.5);
484
+ }
485
+
486
+ .project-name {
487
+ text-transform: uppercase;
488
+ }
489
+
490
+ .project-link {
491
+ font-size: 0.875rem;
492
+ text-transform: uppercase;
493
+ }
494
+
495
+ .project-description {
496
+ color: var(--theme-text-muted);
497
+ font-size: 0.875rem;
498
+ margin-bottom: calc(var(--line-height-computed) * 0.5);
499
+ }
500
+
501
+ .tags {
502
+ display: flex;
503
+ flex-wrap: wrap;
504
+ gap: 1ch;
505
+ }
506
+
507
+ .tag {
508
+ font-size: 0.75rem;
509
+ padding: 0 1ch;
510
+ background: var(--theme-border-subdued);
511
+ text-transform: uppercase;
512
+ }
513
+
514
+ /* --------------------------------------------
515
+ Data Table
516
+ -------------------------------------------- */
517
+ .srcl-data-table {
518
+ width: 100%;
519
+ overflow-x: auto;
520
+ }
521
+
522
+ .srcl-data-table table {
523
+ width: 100%;
524
+ max-width: var(--content-width);
525
+ border-collapse: collapse;
526
+ border-spacing: 0;
527
+ }
528
+
529
+ .srcl-data-table thead tr {
530
+ border-bottom: 2px solid var(--theme-text);
531
+ }
532
+
533
+ .srcl-data-table th {
534
+ text-align: left;
535
+ font-weight: 400;
536
+ padding: calc(var(--line-height-computed) * 0.25) 2ch calc(var(--line-height-computed) * 0.25) 0;
537
+ text-transform: uppercase;
538
+ font-size: 0.875rem;
539
+ letter-spacing: 0.05em;
540
+ }
541
+
542
+ .srcl-data-table td {
543
+ padding: calc(var(--line-height-computed) * 0.25) 2ch calc(var(--line-height-computed) * 0.25) 0;
544
+ vertical-align: top;
545
+ }
546
+
547
+ .srcl-data-table tbody tr {
548
+ border-bottom: 1px solid var(--theme-border);
549
+ }
550
+
551
+ .srcl-data-table tbody tr:last-child {
552
+ border-bottom: none;
553
+ }
554
+
555
+ .srcl-data-table tbody tr:hover {
556
+ background: var(--theme-focused-subdued);
557
+ }
558
+
559
+ .srcl-data-table .category {
560
+ text-transform: uppercase;
561
+ font-size: 0.875rem;
562
+ white-space: nowrap;
563
+ }
564
+
565
+ .srcl-data-table .skills {
566
+ color: var(--theme-text-muted);
567
+ }
568
+
569
+ /* --------------------------------------------
570
+ Writing List
571
+ -------------------------------------------- */
572
+ .writing-list {
573
+ padding-left: 0;
574
+ }
575
+
576
+ .writing-item {
577
+ padding-left: 0;
578
+ margin-bottom: var(--line-height-computed);
579
+ border-bottom: 1px solid var(--theme-border);
580
+ padding-bottom: var(--line-height-computed);
581
+ }
582
+
583
+ .writing-item:last-child {
584
+ border-bottom: none;
585
+ margin-bottom: 0;
586
+ }
587
+
588
+ .writing-item::before {
589
+ display: none;
590
+ }
591
+
592
+ .writing-header {
593
+ display: flex;
594
+ justify-content: space-between;
595
+ align-items: baseline;
596
+ flex-wrap: wrap;
597
+ gap: 1ch;
598
+ }
599
+
600
+ .writing-title {
601
+ font-weight: 400;
602
+ }
603
+
604
+ .writing-date {
605
+ color: var(--theme-text-muted);
606
+ font-size: 0.875rem;
607
+ }
608
+
609
+ .writing-description {
610
+ color: var(--theme-text-muted);
611
+ font-size: 0.875rem;
612
+ margin-top: calc(var(--line-height-computed) * 0.25);
613
+ margin-bottom: 0;
614
+ }
615
+
616
+ /* --------------------------------------------
617
+ Footer
618
+ -------------------------------------------- */
619
+ .srcl-footer {
620
+ max-width: var(--content-width);
621
+ margin: 0 auto;
622
+ padding: var(--line-height-computed) 2ch calc(var(--line-height-computed) * 2);
623
+ border-top: 1px solid var(--theme-border);
624
+ text-align: center;
625
+ color: var(--theme-text-muted);
626
+ font-size: 0.875rem;
627
+ }
628
+
629
+ .srcl-footer a {
630
+ color: var(--theme-text-muted);
631
+ }
632
+
633
+ /* --------------------------------------------
634
+ Animations
635
+ -------------------------------------------- */
636
+ @keyframes cursor-blink {
637
+ 0%, 50% { opacity: 1; }
638
+ 51%, 100% { opacity: 0; }
639
+ }
640
+
641
+ @keyframes flash {
642
+ 0% { background-color: var(--theme-focused-subdued); }
643
+ 100% { background-color: transparent; }
644
+ }
645
+
646
+ @keyframes scanline {
647
+ 0% { transform: translateY(-100%); }
648
+ 100% { transform: translateY(100vh); }
649
+ }
650
+
651
+ /* Subtle scanline effect (optional) */
652
+ .srcl-theme::after {
653
+ content: '';
654
+ position: fixed;
655
+ top: 0;
656
+ left: 0;
657
+ right: 0;
658
+ height: 4px;
659
+ background: linear-gradient(
660
+ to bottom,
661
+ transparent,
662
+ var(--theme-focused-subdued),
663
+ transparent
664
+ );
665
+ opacity: 0.1;
666
+ pointer-events: none;
667
+ animation: scanline 8s linear infinite;
668
+ z-index: 9999;
669
+ }
670
+
671
+ /* Disable scanline animation if user prefers reduced motion */
672
+ @media (prefers-reduced-motion: reduce) {
673
+ .srcl-theme::after {
674
+ animation: none;
675
+ display: none;
676
+ }
677
+ }
678
+
679
+ /* --------------------------------------------
680
+ Responsive
681
+ -------------------------------------------- */
682
+ @media (max-width: 640px) {
683
+ :root {
684
+ --font-size: 14px;
685
+ }
686
+
687
+ .srcl-action-bar {
688
+ flex-wrap: wrap;
689
+ height: auto;
690
+ padding: calc(var(--line-height-computed) * 0.5) 1ch;
691
+ gap: calc(var(--line-height-computed) * 0.25);
692
+ }
693
+
694
+ .srcl-action-bar .primary {
695
+ flex-wrap: wrap;
696
+ }
697
+
698
+ .srcl-action-bar .primary a {
699
+ padding: calc(var(--line-height-computed) * 0.15) 1ch;
700
+ font-size: 0.75rem;
701
+ }
702
+
703
+ .srcl-action-bar .secondary {
704
+ display: none;
705
+ }
706
+
707
+ .content {
708
+ padding: calc(var(--line-height-computed) * 3) 1ch calc(var(--line-height-computed) * 2);
709
+ }
710
+
711
+ .accordion-header {
712
+ flex-direction: column;
713
+ align-items: flex-start;
714
+ gap: calc(var(--line-height-computed) * 0.25);
715
+ }
716
+
717
+ .accordion-header .meta {
718
+ flex-direction: column;
719
+ gap: 0;
720
+ }
721
+
722
+ .project-grid {
723
+ grid-template-columns: 1fr;
724
+ }
725
+
726
+ .hero-card .contact-links {
727
+ flex-direction: column;
728
+ gap: calc(var(--line-height-computed) * 0.25);
729
+ }
730
+
731
+ .writing-header {
732
+ flex-direction: column;
733
+ gap: 0;
734
+ }
735
+ }
736
+
737
+ /* --------------------------------------------
738
+ SRCL Hero (Standalone)
739
+ -------------------------------------------- */
740
+ .srcl-hero {
741
+ margin-bottom: calc(var(--line-height-computed) * 3);
742
+ }
743
+
744
+ .srcl-hero .name {
745
+ font-size: 1.5rem;
746
+ text-transform: uppercase;
747
+ margin-bottom: calc(var(--line-height-computed) * 0.25);
748
+ }
749
+
750
+ .srcl-hero .title {
751
+ color: var(--theme-text-muted);
752
+ margin-bottom: calc(var(--line-height-computed) * 0.25);
753
+ }
754
+
755
+ .srcl-hero .location {
756
+ color: var(--theme-text-muted);
757
+ font-size: 0.875rem;
758
+ margin-bottom: var(--line-height-computed);
759
+ }
760
+
761
+ .srcl-hero .timezone {
762
+ opacity: 0.7;
763
+ }
764
+
765
+ .srcl-hero .bio {
766
+ margin-bottom: var(--line-height-computed);
767
+ }
768
+
769
+ .srcl-hero .bio p {
770
+ margin-bottom: calc(var(--line-height-computed) * 0.5);
771
+ }
772
+
773
+ .srcl-hero .contact-links {
774
+ display: flex;
775
+ flex-wrap: wrap;
776
+ gap: 2ch;
777
+ }
778
+
779
+ .srcl-hero .contact-link {
780
+ font-size: 0.875rem;
781
+ text-transform: uppercase;
782
+ letter-spacing: 0.05em;
783
+ }
784
+
785
+ /* --------------------------------------------
786
+ SRCL Section (Generic)
787
+ -------------------------------------------- */
788
+ .srcl-section {
789
+ margin-bottom: calc(var(--line-height-computed) * 3);
790
+ }
791
+
792
+ .srcl-section .section-title {
793
+ font-size: 1rem;
794
+ text-transform: uppercase;
795
+ letter-spacing: 0.05em;
796
+ margin-bottom: var(--line-height-computed);
797
+ padding-bottom: calc(var(--line-height-computed) * 0.25);
798
+ border-bottom: 2px solid var(--theme-text);
799
+ }
800
+
801
+ .view-all {
802
+ display: inline-block;
803
+ margin-top: var(--line-height-computed);
804
+ font-size: 0.875rem;
805
+ text-transform: uppercase;
806
+ letter-spacing: 0.05em;
807
+ }
808
+
809
+ /* --------------------------------------------
810
+ Projects Grid (Multi-page)
811
+ -------------------------------------------- */
812
+ .projects-grid {
813
+ display: grid;
814
+ grid-template-columns: repeat(auto-fit, minmax(30ch, 1fr));
815
+ gap: calc(var(--line-height-computed) * 1.5);
816
+ }
817
+
818
+ .projects-grid.full-width {
819
+ grid-template-columns: repeat(auto-fit, minmax(35ch, 1fr));
820
+ }
821
+
822
+ .projects-grid .project-card {
823
+ display: block;
824
+ background: transparent;
825
+ border: 2px solid var(--theme-border);
826
+ transition: border-color 200ms ease, background 200ms ease;
827
+ }
828
+
829
+ .projects-grid .project-card:hover {
830
+ border-color: var(--theme-focused);
831
+ background: var(--theme-focused-subdued);
832
+ }
833
+
834
+ .projects-grid .project-card.featured {
835
+ border-color: var(--theme-text);
836
+ }
837
+
838
+ .projects-grid .project-thumbnail {
839
+ width: 100%;
840
+ aspect-ratio: 16 / 9;
841
+ overflow: hidden;
842
+ border-bottom: 1px solid var(--theme-border);
843
+ background: var(--theme-background-card);
844
+ }
845
+
846
+ .projects-grid .project-thumbnail img {
847
+ width: 100%;
848
+ height: 100%;
849
+ object-fit: cover;
850
+ opacity: 0.9;
851
+ transition: opacity 200ms ease;
852
+ }
853
+
854
+ .projects-grid .project-card:hover .project-thumbnail img {
855
+ opacity: 1;
856
+ }
857
+
858
+ .projects-grid .project-info {
859
+ padding: calc(var(--line-height-computed) * 0.75) 2ch;
860
+ }
861
+
862
+ .projects-grid .project-info h3 {
863
+ text-transform: uppercase;
864
+ font-size: 1rem;
865
+ margin-bottom: calc(var(--line-height-computed) * 0.25);
866
+ }
867
+
868
+ .projects-grid .project-info .subtitle {
869
+ color: var(--theme-text-muted);
870
+ font-size: 0.875rem;
871
+ margin-bottom: calc(var(--line-height-computed) * 0.5);
872
+ }
873
+
874
+ .projects-grid .project-meta {
875
+ display: flex;
876
+ gap: 2ch;
877
+ color: var(--theme-text-muted);
878
+ font-size: 0.75rem;
879
+ margin-bottom: calc(var(--line-height-computed) * 0.5);
880
+ }
881
+
882
+ .tech-tags {
883
+ display: flex;
884
+ flex-wrap: wrap;
885
+ gap: 0.5ch;
886
+ }
887
+
888
+ .projects-grid .tech-tags {
889
+ gap: 0.5ch;
890
+ }
891
+
892
+ .tech-tags .tag {
893
+ font-size: 0.625rem;
894
+ padding: 0 0.75ch;
895
+ background: var(--theme-border-subdued);
896
+ text-transform: uppercase;
897
+ letter-spacing: 0.02em;
898
+ }
899
+
900
+ /* --------------------------------------------
901
+ Experiments Grid
902
+ -------------------------------------------- */
903
+ .experiments-grid {
904
+ display: grid;
905
+ grid-template-columns: repeat(auto-fit, minmax(28ch, 1fr));
906
+ gap: var(--line-height-computed);
907
+ }
908
+
909
+ .experiment-card {
910
+ border: 1px solid var(--theme-border);
911
+ padding: calc(var(--line-height-computed) * 0.75) 2ch;
912
+ }
913
+
914
+ .experiment-card h3 {
915
+ text-transform: uppercase;
916
+ font-size: 0.875rem;
917
+ margin-bottom: calc(var(--line-height-computed) * 0.25);
918
+ }
919
+
920
+ .experiment-card p {
921
+ color: var(--theme-text-muted);
922
+ font-size: 0.875rem;
923
+ margin-bottom: calc(var(--line-height-computed) * 0.5);
924
+ }
925
+
926
+ .experiment-card .experiment-links {
927
+ display: flex;
928
+ gap: 2ch;
929
+ font-size: 0.75rem;
930
+ text-transform: uppercase;
931
+ margin-bottom: calc(var(--line-height-computed) * 0.5);
932
+ }
933
+
934
+ /* --------------------------------------------
935
+ Page Header
936
+ -------------------------------------------- */
937
+ .page-header {
938
+ margin-bottom: calc(var(--line-height-computed) * 2);
939
+ }
940
+
941
+ .page-header h1 {
942
+ text-transform: uppercase;
943
+ font-size: 1.5rem;
944
+ margin-bottom: calc(var(--line-height-computed) * 0.5);
945
+ }
946
+
947
+ .page-header .page-description {
948
+ color: var(--theme-text-muted);
949
+ font-size: 0.875rem;
950
+ }
951
+
952
+ /* --------------------------------------------
953
+ Project Page
954
+ -------------------------------------------- */
955
+ .project-page .project-header {
956
+ display: block;
957
+ margin-bottom: calc(var(--line-height-computed) * 2);
958
+ }
959
+
960
+ .project-page .project-hero {
961
+ margin-bottom: var(--line-height-computed);
962
+ border: 2px solid var(--theme-border);
963
+ }
964
+
965
+ .project-page .project-hero img {
966
+ width: 100%;
967
+ display: block;
968
+ }
969
+
970
+ .project-page .project-intro h1 {
971
+ font-size: 1.5rem;
972
+ text-transform: uppercase;
973
+ margin-bottom: calc(var(--line-height-computed) * 0.25);
974
+ }
975
+
976
+ .project-page .project-intro .subtitle {
977
+ color: var(--theme-text-muted);
978
+ font-size: 1rem;
979
+ margin-bottom: var(--line-height-computed);
980
+ }
981
+
982
+ .project-page .project-meta-grid {
983
+ display: grid;
984
+ grid-template-columns: repeat(auto-fit, minmax(12ch, 1fr));
985
+ gap: var(--line-height-computed);
986
+ margin-bottom: var(--line-height-computed);
987
+ padding: var(--line-height-computed) 0;
988
+ border-top: 1px solid var(--theme-border);
989
+ border-bottom: 1px solid var(--theme-border);
990
+ }
991
+
992
+ .project-page .meta-item {
993
+ display: flex;
994
+ flex-direction: column;
995
+ gap: calc(var(--line-height-computed) * 0.25);
996
+ }
997
+
998
+ .project-page .meta-label {
999
+ font-size: 0.75rem;
1000
+ text-transform: uppercase;
1001
+ letter-spacing: 0.05em;
1002
+ color: var(--theme-text-muted);
1003
+ }
1004
+
1005
+ .project-page .meta-value {
1006
+ font-size: 0.875rem;
1007
+ }
1008
+
1009
+ .project-page .tech-stack {
1010
+ margin-bottom: var(--line-height-computed);
1011
+ }
1012
+
1013
+ .project-page .tech-stack .tech-tags {
1014
+ margin-top: calc(var(--line-height-computed) * 0.25);
1015
+ }
1016
+
1017
+ .project-page .project-links {
1018
+ display: flex;
1019
+ flex-wrap: wrap;
1020
+ gap: 2ch;
1021
+ }
1022
+
1023
+ .project-page .project-link {
1024
+ font-size: 0.875rem;
1025
+ text-transform: uppercase;
1026
+ letter-spacing: 0.05em;
1027
+ padding: calc(var(--line-height-computed) * 0.25) 1.5ch;
1028
+ border: 1px solid var(--theme-border);
1029
+ }
1030
+
1031
+ .project-page .project-link:hover {
1032
+ border-color: var(--theme-focused);
1033
+ }
1034
+
1035
+ /* Project Content */
1036
+ .project-content {
1037
+ margin-bottom: calc(var(--line-height-computed) * 2);
1038
+ }
1039
+
1040
+ /* Project Navigation */
1041
+ .project-nav {
1042
+ padding-top: var(--line-height-computed);
1043
+ border-top: 1px solid var(--theme-border);
1044
+ }
1045
+
1046
+ .project-nav .back-link {
1047
+ font-size: 0.875rem;
1048
+ text-transform: uppercase;
1049
+ letter-spacing: 0.05em;
1050
+ }
1051
+
1052
+ /* --------------------------------------------
1053
+ Content Sections
1054
+ -------------------------------------------- */
1055
+ .content-section {
1056
+ margin-bottom: calc(var(--line-height-computed) * 2);
1057
+ }
1058
+
1059
+ .content-section .section-subtitle {
1060
+ font-size: 0.875rem;
1061
+ text-transform: uppercase;
1062
+ letter-spacing: 0.05em;
1063
+ margin-bottom: var(--line-height-computed);
1064
+ color: var(--theme-text-muted);
1065
+ }
1066
+
1067
+ /* Prose (markdown content) */
1068
+ .prose {
1069
+ line-height: var(--line-height);
1070
+ }
1071
+
1072
+ .prose h2 {
1073
+ font-size: 1rem;
1074
+ text-transform: uppercase;
1075
+ margin-top: calc(var(--line-height-computed) * 1.5);
1076
+ margin-bottom: calc(var(--line-height-computed) * 0.5);
1077
+ }
1078
+
1079
+ .prose h3 {
1080
+ font-size: 0.875rem;
1081
+ text-transform: uppercase;
1082
+ margin-top: var(--line-height-computed);
1083
+ margin-bottom: calc(var(--line-height-computed) * 0.25);
1084
+ }
1085
+
1086
+ .prose p {
1087
+ margin-bottom: var(--line-height-computed);
1088
+ }
1089
+
1090
+ .prose ul,
1091
+ .prose ol {
1092
+ margin-bottom: var(--line-height-computed);
1093
+ padding-left: 3ch;
1094
+ }
1095
+
1096
+ .prose li {
1097
+ margin-bottom: calc(var(--line-height-computed) * 0.25);
1098
+ }
1099
+
1100
+ .prose strong {
1101
+ font-weight: 600;
1102
+ }
1103
+
1104
+ .prose code {
1105
+ font-family: var(--font-family-mono);
1106
+ background: var(--theme-border-subdued);
1107
+ padding: 0 0.5ch;
1108
+ }
1109
+
1110
+ /* Metrics Section */
1111
+ .section-metrics .metrics-grid {
1112
+ display: grid;
1113
+ grid-template-columns: repeat(auto-fit, minmax(12ch, 1fr));
1114
+ gap: var(--line-height-computed);
1115
+ padding: var(--line-height-computed);
1116
+ border: 2px solid var(--theme-text);
1117
+ }
1118
+
1119
+ .section-metrics .metric {
1120
+ display: flex;
1121
+ flex-direction: column;
1122
+ text-align: center;
1123
+ }
1124
+
1125
+ .section-metrics .metric-value {
1126
+ font-size: 1.5rem;
1127
+ font-weight: 400;
1128
+ margin-bottom: calc(var(--line-height-computed) * 0.25);
1129
+ }
1130
+
1131
+ .section-metrics .metric-label {
1132
+ font-size: 0.75rem;
1133
+ text-transform: uppercase;
1134
+ letter-spacing: 0.05em;
1135
+ color: var(--theme-text-muted);
1136
+ }
1137
+
1138
+ /* Image Section */
1139
+ .section-image {
1140
+ border: 2px solid var(--theme-border);
1141
+ }
1142
+
1143
+ .section-image img {
1144
+ width: 100%;
1145
+ display: block;
1146
+ }
1147
+
1148
+ .section-image figcaption {
1149
+ padding: calc(var(--line-height-computed) * 0.5) 2ch;
1150
+ font-size: 0.875rem;
1151
+ color: var(--theme-text-muted);
1152
+ border-top: 1px solid var(--theme-border);
1153
+ }
1154
+
1155
+ /* Gallery Section */
1156
+ .section-gallery .gallery-grid {
1157
+ display: grid;
1158
+ grid-template-columns: repeat(auto-fit, minmax(25ch, 1fr));
1159
+ gap: var(--line-height-computed);
1160
+ }
1161
+
1162
+ .section-gallery .gallery-item {
1163
+ border: 1px solid var(--theme-border);
1164
+ }
1165
+
1166
+ .section-gallery .gallery-item img {
1167
+ width: 100%;
1168
+ display: block;
1169
+ }
1170
+
1171
+ .section-gallery .gallery-item figcaption {
1172
+ padding: calc(var(--line-height-computed) * 0.5) 1.5ch;
1173
+ font-size: 0.75rem;
1174
+ color: var(--theme-text-muted);
1175
+ border-top: 1px solid var(--theme-border);
1176
+ }
1177
+
1178
+ /* Code Section */
1179
+ .section-code .code-block {
1180
+ border: 2px solid var(--theme-border);
1181
+ overflow-x: auto;
1182
+ }
1183
+
1184
+ .section-code pre {
1185
+ margin: 0;
1186
+ padding: var(--line-height-computed) 2ch;
1187
+ font-size: 0.875rem;
1188
+ line-height: 1.6;
1189
+ }
1190
+
1191
+ .section-code code {
1192
+ font-family: var(--font-family-mono);
1193
+ background: transparent;
1194
+ }
1195
+
1196
+ /* Demo Section */
1197
+ .section-demo .demo-embed {
1198
+ border: 2px solid var(--theme-border);
1199
+ }
1200
+
1201
+ .section-demo video,
1202
+ .section-demo iframe {
1203
+ width: 100%;
1204
+ display: block;
1205
+ }
1206
+
1207
+ /* Interactive Section */
1208
+ .section-interactive .interactive-embed {
1209
+ border: 2px solid var(--theme-border);
1210
+ aspect-ratio: 16 / 9;
1211
+ }
1212
+
1213
+ .section-interactive iframe {
1214
+ width: 100%;
1215
+ height: 100%;
1216
+ }
1217
+
1218
+ /* --------------------------------------------
1219
+ Responsive (Multi-page additions)
1220
+ -------------------------------------------- */
1221
+ @media (max-width: 640px) {
1222
+ .projects-grid {
1223
+ grid-template-columns: 1fr;
1224
+ }
1225
+
1226
+ .project-page .project-meta-grid {
1227
+ grid-template-columns: repeat(2, 1fr);
1228
+ }
1229
+
1230
+ .section-metrics .metrics-grid {
1231
+ grid-template-columns: repeat(2, 1fr);
1232
+ }
1233
+
1234
+ .section-gallery .gallery-grid {
1235
+ grid-template-columns: 1fr;
1236
+ }
1237
+ }
1238
+
1239
+ /* Print styles */
1240
+ @media print {
1241
+ .srcl-action-bar,
1242
+ .grid-overlay,
1243
+ .srcl-theme::after {
1244
+ display: none !important;
1245
+ }
1246
+
1247
+ body {
1248
+ background: white;
1249
+ color: black;
1250
+ }
1251
+
1252
+ .content {
1253
+ padding-top: 0;
1254
+ }
1255
+
1256
+ a {
1257
+ background: none;
1258
+ text-decoration: underline;
1259
+ }
1260
+ }