devfolio-page 0.2.5 → 0.2.7
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.
- package/dist/generator/builder.js +3 -3
- package/dist/generator/markdown.js +12 -0
- package/dist/generator/themes/dark-academia/styles.css +194 -0
- package/dist/generator/themes/dark-academia/templates/experiments-index.html +0 -1
- package/dist/generator/themes/dark-academia/templates/homepage.html +3 -3
- package/dist/generator/themes/dark-academia/templates/project.html +0 -1
- package/dist/generator/themes/dark-academia/templates/projects-index.html +0 -1
- package/dist/generator/themes/dark-academia/templates/writing-index.html +0 -1
- package/dist/generator/themes/modern/templates/experiments-index.html +0 -1
- package/dist/generator/themes/modern/templates/homepage.html +3 -3
- package/dist/generator/themes/modern/templates/project.html +0 -1
- package/dist/generator/themes/modern/templates/projects-index.html +0 -1
- package/dist/generator/themes/modern/templates/writing-index.html +0 -1
- package/dist/generator/themes/srcl/templates/homepage.html +3 -3
- package/package.json +3 -3
- package/src/generator/themes/dark-academia/styles.css +194 -0
- package/src/generator/themes/dark-academia/templates/experiments-index.html +0 -1
- package/src/generator/themes/dark-academia/templates/homepage.html +3 -3
- package/src/generator/themes/dark-academia/templates/project.html +0 -1
- package/src/generator/themes/dark-academia/templates/projects-index.html +0 -1
- package/src/generator/themes/dark-academia/templates/writing-index.html +0 -1
- package/src/generator/themes/modern/templates/experiments-index.html +0 -1
- package/src/generator/themes/modern/templates/homepage.html +3 -3
- package/src/generator/themes/modern/templates/project.html +0 -1
- package/src/generator/themes/modern/templates/projects-index.html +0 -1
- package/src/generator/themes/modern/templates/writing-index.html +0 -1
- package/src/generator/themes/srcl/templates/homepage.html +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseMarkdown, highlightCode, parseBio } from './markdown.js';
|
|
1
|
+
import { parseMarkdown, parseMarkdownProse, highlightCode, parseBio } from './markdown.js';
|
|
2
2
|
import fs from 'fs/promises';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import Mustache from 'mustache';
|
|
@@ -262,7 +262,7 @@ async function generateAboutPage(portfolio, themePath, outputDir, theme) {
|
|
|
262
262
|
site_name: portfolio.meta.name,
|
|
263
263
|
tagline: portfolio.meta.tagline,
|
|
264
264
|
avatar: portfolio.meta.avatar,
|
|
265
|
-
about_content:
|
|
265
|
+
about_content: parseMarkdownProse(portfolio.about?.long || portfolio.about?.short || ''),
|
|
266
266
|
contact: portfolio.contact,
|
|
267
267
|
hasContact: !!(portfolio.contact?.email || portfolio.contact?.github || portfolio.contact?.linkedin || portfolio.contact?.twitter || portfolio.contact?.website),
|
|
268
268
|
skills: skillsArray,
|
|
@@ -848,7 +848,7 @@ async function generateAboutPageInMemory(portfolio, themePath, theme, files) {
|
|
|
848
848
|
site_name: portfolio.meta.name,
|
|
849
849
|
tagline: portfolio.meta.tagline,
|
|
850
850
|
avatar: portfolio.meta.avatar,
|
|
851
|
-
about_content:
|
|
851
|
+
about_content: parseMarkdownProse(portfolio.about?.long || portfolio.about?.short || ''),
|
|
852
852
|
contact: portfolio.contact,
|
|
853
853
|
hasContact: !!(portfolio.contact?.email || portfolio.contact?.github || portfolio.contact?.linkedin || portfolio.contact?.twitter || portfolio.contact?.website),
|
|
854
854
|
skills: skillsArray,
|
|
@@ -10,6 +10,18 @@ marked.setOptions({
|
|
|
10
10
|
export function parseMarkdown(content) {
|
|
11
11
|
return marked.parse(content);
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Parse markdown content to HTML without converting single newlines to <br>
|
|
15
|
+
* Use this for prose content like about pages where normal paragraph flow is expected
|
|
16
|
+
*/
|
|
17
|
+
export function parseMarkdownProse(content) {
|
|
18
|
+
// Temporarily disable breaks for this parse
|
|
19
|
+
const originalBreaks = marked.defaults.breaks;
|
|
20
|
+
marked.setOptions({ breaks: false });
|
|
21
|
+
const result = marked.parse(content);
|
|
22
|
+
marked.setOptions({ breaks: originalBreaks });
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
13
25
|
/**
|
|
14
26
|
* Parse inline markdown (no block elements like <p>)
|
|
15
27
|
*/
|
|
@@ -896,6 +896,200 @@ a:hover {
|
|
|
896
896
|
gap: var(--spacing-xs);
|
|
897
897
|
}
|
|
898
898
|
|
|
899
|
+
/* --------------------------------------------
|
|
900
|
+
About Page
|
|
901
|
+
-------------------------------------------- */
|
|
902
|
+
.about-content {
|
|
903
|
+
max-width: 640px;
|
|
904
|
+
margin: 0 auto;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
.about-avatar {
|
|
908
|
+
text-align: center;
|
|
909
|
+
margin-bottom: var(--spacing-2xl);
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
.about-avatar img {
|
|
913
|
+
width: 160px;
|
|
914
|
+
height: 160px;
|
|
915
|
+
border-radius: 50%;
|
|
916
|
+
object-fit: cover;
|
|
917
|
+
border: 3px solid var(--border-color);
|
|
918
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
.about-bio {
|
|
922
|
+
margin-bottom: var(--spacing-3xl);
|
|
923
|
+
line-height: 1.85;
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
.about-bio h2,
|
|
927
|
+
.about-bio h3 {
|
|
928
|
+
font-family: var(--font-sans);
|
|
929
|
+
font-size: 0.75rem;
|
|
930
|
+
font-weight: 600;
|
|
931
|
+
text-transform: uppercase;
|
|
932
|
+
letter-spacing: 0.15em;
|
|
933
|
+
color: var(--text-tertiary);
|
|
934
|
+
margin-top: var(--spacing-2xl);
|
|
935
|
+
margin-bottom: var(--spacing-md);
|
|
936
|
+
padding-bottom: var(--spacing-xs);
|
|
937
|
+
border-bottom: 1px solid var(--border-color);
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
.about-bio h2:first-child,
|
|
941
|
+
.about-bio h3:first-child {
|
|
942
|
+
margin-top: 0;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
.about-bio p {
|
|
946
|
+
color: var(--text-secondary);
|
|
947
|
+
margin-bottom: var(--spacing-md);
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
.about-bio p:last-child {
|
|
951
|
+
margin-bottom: 0;
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
.about-bio ul,
|
|
955
|
+
.about-bio ol {
|
|
956
|
+
color: var(--text-secondary);
|
|
957
|
+
margin-bottom: var(--spacing-md);
|
|
958
|
+
padding-left: var(--spacing-lg);
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
.about-bio li {
|
|
962
|
+
margin-bottom: var(--spacing-xs);
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
/* About Skills Section */
|
|
966
|
+
.about-skills {
|
|
967
|
+
margin-bottom: var(--spacing-3xl);
|
|
968
|
+
padding-top: var(--spacing-xl);
|
|
969
|
+
border-top: 1px solid var(--border-color);
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
.about-skills h2 {
|
|
973
|
+
font-family: var(--font-sans);
|
|
974
|
+
font-size: 0.75rem;
|
|
975
|
+
font-weight: 600;
|
|
976
|
+
text-transform: uppercase;
|
|
977
|
+
letter-spacing: 0.15em;
|
|
978
|
+
color: var(--text-tertiary);
|
|
979
|
+
margin-bottom: var(--spacing-xl);
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
.skill-category {
|
|
983
|
+
margin-bottom: var(--spacing-lg);
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
.skill-category:last-child {
|
|
987
|
+
margin-bottom: 0;
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
.skill-category h3 {
|
|
991
|
+
font-family: var(--font-sans);
|
|
992
|
+
font-size: 0.8rem;
|
|
993
|
+
font-weight: 600;
|
|
994
|
+
color: var(--text-primary);
|
|
995
|
+
margin-bottom: var(--spacing-sm);
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
.skill-category .project-tags {
|
|
999
|
+
display: flex;
|
|
1000
|
+
flex-wrap: wrap;
|
|
1001
|
+
gap: var(--spacing-xs);
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
/* About Education Section */
|
|
1005
|
+
.about-education {
|
|
1006
|
+
margin-bottom: var(--spacing-3xl);
|
|
1007
|
+
padding-top: var(--spacing-xl);
|
|
1008
|
+
border-top: 1px solid var(--border-color);
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
.about-education h2 {
|
|
1012
|
+
font-family: var(--font-sans);
|
|
1013
|
+
font-size: 0.75rem;
|
|
1014
|
+
font-weight: 600;
|
|
1015
|
+
text-transform: uppercase;
|
|
1016
|
+
letter-spacing: 0.15em;
|
|
1017
|
+
color: var(--text-tertiary);
|
|
1018
|
+
margin-bottom: var(--spacing-xl);
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
.about-education .education-item {
|
|
1022
|
+
display: block;
|
|
1023
|
+
margin-bottom: var(--spacing-lg);
|
|
1024
|
+
padding-bottom: var(--spacing-lg);
|
|
1025
|
+
border-bottom: 1px solid var(--border-color);
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
.about-education .education-item:last-child {
|
|
1029
|
+
margin-bottom: 0;
|
|
1030
|
+
padding-bottom: 0;
|
|
1031
|
+
border-bottom: none;
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
.about-education .education-item h3 {
|
|
1035
|
+
font-size: 1rem;
|
|
1036
|
+
font-weight: 700;
|
|
1037
|
+
color: var(--text-primary);
|
|
1038
|
+
margin-bottom: var(--spacing-xs);
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
.about-education .education-item .degree {
|
|
1042
|
+
font-style: italic;
|
|
1043
|
+
color: var(--text-secondary);
|
|
1044
|
+
margin-bottom: var(--spacing-xs);
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
.about-education .education-item .date {
|
|
1048
|
+
font-family: var(--font-sans);
|
|
1049
|
+
font-size: 0.8rem;
|
|
1050
|
+
color: var(--text-tertiary);
|
|
1051
|
+
margin-bottom: var(--spacing-xs);
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
.about-education .education-item .description {
|
|
1055
|
+
font-size: 0.9rem;
|
|
1056
|
+
color: var(--text-tertiary);
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
/* About Contact Section */
|
|
1060
|
+
.about-contact {
|
|
1061
|
+
padding-top: var(--spacing-xl);
|
|
1062
|
+
border-top: 1px solid var(--border-color);
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
.about-contact h2 {
|
|
1066
|
+
font-family: var(--font-sans);
|
|
1067
|
+
font-size: 0.75rem;
|
|
1068
|
+
font-weight: 600;
|
|
1069
|
+
text-transform: uppercase;
|
|
1070
|
+
letter-spacing: 0.15em;
|
|
1071
|
+
color: var(--text-tertiary);
|
|
1072
|
+
margin-bottom: var(--spacing-lg);
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
.contact-links {
|
|
1076
|
+
display: flex;
|
|
1077
|
+
flex-wrap: wrap;
|
|
1078
|
+
gap: var(--spacing-sm) var(--spacing-lg);
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
.contact-links a {
|
|
1082
|
+
font-family: var(--font-sans);
|
|
1083
|
+
font-size: 0.85rem;
|
|
1084
|
+
color: var(--text-secondary);
|
|
1085
|
+
text-decoration: underline;
|
|
1086
|
+
text-underline-offset: 3px;
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
.contact-links a:hover {
|
|
1090
|
+
color: var(--accent-color);
|
|
1091
|
+
}
|
|
1092
|
+
|
|
899
1093
|
/* Print styles */
|
|
900
1094
|
@media print {
|
|
901
1095
|
.site-nav {
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
<div class="nav-content">
|
|
22
22
|
<a href="./" class="nav-logo">{{name}}</a>
|
|
23
23
|
<div class="nav-links">
|
|
24
|
-
{{#
|
|
25
|
-
{{#
|
|
26
|
-
{{
|
|
24
|
+
{{#nav_links}}
|
|
25
|
+
<a href="{{href}}"{{#active}} class="active"{{/active}}>{{label}}</a>
|
|
26
|
+
{{/nav_links}}
|
|
27
27
|
</div>
|
|
28
28
|
<button class="theme-btn" title="Toggle theme" aria-label="Toggle theme">
|
|
29
29
|
<svg class="icon-sun" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
<div class="header-content">
|
|
22
22
|
<a href="./" class="logo">{{name}}</a>
|
|
23
23
|
<nav class="nav">
|
|
24
|
-
{{#
|
|
25
|
-
{{#
|
|
26
|
-
{{
|
|
24
|
+
{{#nav_links}}
|
|
25
|
+
<a href="{{href}}"{{#active}} class="active"{{/active}}>{{label}}</a>
|
|
26
|
+
{{/nav_links}}
|
|
27
27
|
</nav>
|
|
28
28
|
<button class="theme-toggle" title="Toggle theme" aria-label="Toggle theme">
|
|
29
29
|
<svg class="icon-sun" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
<div class="srcl-action-bar">
|
|
24
24
|
<nav class="primary">
|
|
25
25
|
<a href="./" class="nav-home">{{name}}</a>
|
|
26
|
-
{{#
|
|
27
|
-
{{#
|
|
28
|
-
{{
|
|
26
|
+
{{#nav_links}}
|
|
27
|
+
<a href="{{href}}"{{#active}} class="active"{{/active}}>{{label}}</a>
|
|
28
|
+
{{/nav_links}}
|
|
29
29
|
</nav>
|
|
30
30
|
<div class="secondary">
|
|
31
31
|
<button class="hotkey" data-hotkey="ctrl+t" title="Toggle theme (Ctrl+T)">
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devfolio-page",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"description": "Your portfolio as code. Version control it like software.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
"homepage": "https://devfolio.page",
|
|
32
32
|
"repository": {
|
|
33
33
|
"type": "git",
|
|
34
|
-
"url": "git+https://github.com/
|
|
34
|
+
"url": "git+https://github.com/louannemur/devfolio.git"
|
|
35
35
|
},
|
|
36
36
|
"bugs": {
|
|
37
|
-
"url": "https://github.com/
|
|
37
|
+
"url": "https://github.com/louannemur/devfolio/issues"
|
|
38
38
|
},
|
|
39
39
|
"engines": {
|
|
40
40
|
"node": ">=18"
|
|
@@ -896,6 +896,200 @@ a:hover {
|
|
|
896
896
|
gap: var(--spacing-xs);
|
|
897
897
|
}
|
|
898
898
|
|
|
899
|
+
/* --------------------------------------------
|
|
900
|
+
About Page
|
|
901
|
+
-------------------------------------------- */
|
|
902
|
+
.about-content {
|
|
903
|
+
max-width: 640px;
|
|
904
|
+
margin: 0 auto;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
.about-avatar {
|
|
908
|
+
text-align: center;
|
|
909
|
+
margin-bottom: var(--spacing-2xl);
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
.about-avatar img {
|
|
913
|
+
width: 160px;
|
|
914
|
+
height: 160px;
|
|
915
|
+
border-radius: 50%;
|
|
916
|
+
object-fit: cover;
|
|
917
|
+
border: 3px solid var(--border-color);
|
|
918
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
.about-bio {
|
|
922
|
+
margin-bottom: var(--spacing-3xl);
|
|
923
|
+
line-height: 1.85;
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
.about-bio h2,
|
|
927
|
+
.about-bio h3 {
|
|
928
|
+
font-family: var(--font-sans);
|
|
929
|
+
font-size: 0.75rem;
|
|
930
|
+
font-weight: 600;
|
|
931
|
+
text-transform: uppercase;
|
|
932
|
+
letter-spacing: 0.15em;
|
|
933
|
+
color: var(--text-tertiary);
|
|
934
|
+
margin-top: var(--spacing-2xl);
|
|
935
|
+
margin-bottom: var(--spacing-md);
|
|
936
|
+
padding-bottom: var(--spacing-xs);
|
|
937
|
+
border-bottom: 1px solid var(--border-color);
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
.about-bio h2:first-child,
|
|
941
|
+
.about-bio h3:first-child {
|
|
942
|
+
margin-top: 0;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
.about-bio p {
|
|
946
|
+
color: var(--text-secondary);
|
|
947
|
+
margin-bottom: var(--spacing-md);
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
.about-bio p:last-child {
|
|
951
|
+
margin-bottom: 0;
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
.about-bio ul,
|
|
955
|
+
.about-bio ol {
|
|
956
|
+
color: var(--text-secondary);
|
|
957
|
+
margin-bottom: var(--spacing-md);
|
|
958
|
+
padding-left: var(--spacing-lg);
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
.about-bio li {
|
|
962
|
+
margin-bottom: var(--spacing-xs);
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
/* About Skills Section */
|
|
966
|
+
.about-skills {
|
|
967
|
+
margin-bottom: var(--spacing-3xl);
|
|
968
|
+
padding-top: var(--spacing-xl);
|
|
969
|
+
border-top: 1px solid var(--border-color);
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
.about-skills h2 {
|
|
973
|
+
font-family: var(--font-sans);
|
|
974
|
+
font-size: 0.75rem;
|
|
975
|
+
font-weight: 600;
|
|
976
|
+
text-transform: uppercase;
|
|
977
|
+
letter-spacing: 0.15em;
|
|
978
|
+
color: var(--text-tertiary);
|
|
979
|
+
margin-bottom: var(--spacing-xl);
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
.skill-category {
|
|
983
|
+
margin-bottom: var(--spacing-lg);
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
.skill-category:last-child {
|
|
987
|
+
margin-bottom: 0;
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
.skill-category h3 {
|
|
991
|
+
font-family: var(--font-sans);
|
|
992
|
+
font-size: 0.8rem;
|
|
993
|
+
font-weight: 600;
|
|
994
|
+
color: var(--text-primary);
|
|
995
|
+
margin-bottom: var(--spacing-sm);
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
.skill-category .project-tags {
|
|
999
|
+
display: flex;
|
|
1000
|
+
flex-wrap: wrap;
|
|
1001
|
+
gap: var(--spacing-xs);
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
/* About Education Section */
|
|
1005
|
+
.about-education {
|
|
1006
|
+
margin-bottom: var(--spacing-3xl);
|
|
1007
|
+
padding-top: var(--spacing-xl);
|
|
1008
|
+
border-top: 1px solid var(--border-color);
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
.about-education h2 {
|
|
1012
|
+
font-family: var(--font-sans);
|
|
1013
|
+
font-size: 0.75rem;
|
|
1014
|
+
font-weight: 600;
|
|
1015
|
+
text-transform: uppercase;
|
|
1016
|
+
letter-spacing: 0.15em;
|
|
1017
|
+
color: var(--text-tertiary);
|
|
1018
|
+
margin-bottom: var(--spacing-xl);
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
.about-education .education-item {
|
|
1022
|
+
display: block;
|
|
1023
|
+
margin-bottom: var(--spacing-lg);
|
|
1024
|
+
padding-bottom: var(--spacing-lg);
|
|
1025
|
+
border-bottom: 1px solid var(--border-color);
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
.about-education .education-item:last-child {
|
|
1029
|
+
margin-bottom: 0;
|
|
1030
|
+
padding-bottom: 0;
|
|
1031
|
+
border-bottom: none;
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
.about-education .education-item h3 {
|
|
1035
|
+
font-size: 1rem;
|
|
1036
|
+
font-weight: 700;
|
|
1037
|
+
color: var(--text-primary);
|
|
1038
|
+
margin-bottom: var(--spacing-xs);
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
.about-education .education-item .degree {
|
|
1042
|
+
font-style: italic;
|
|
1043
|
+
color: var(--text-secondary);
|
|
1044
|
+
margin-bottom: var(--spacing-xs);
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
.about-education .education-item .date {
|
|
1048
|
+
font-family: var(--font-sans);
|
|
1049
|
+
font-size: 0.8rem;
|
|
1050
|
+
color: var(--text-tertiary);
|
|
1051
|
+
margin-bottom: var(--spacing-xs);
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
.about-education .education-item .description {
|
|
1055
|
+
font-size: 0.9rem;
|
|
1056
|
+
color: var(--text-tertiary);
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
/* About Contact Section */
|
|
1060
|
+
.about-contact {
|
|
1061
|
+
padding-top: var(--spacing-xl);
|
|
1062
|
+
border-top: 1px solid var(--border-color);
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
.about-contact h2 {
|
|
1066
|
+
font-family: var(--font-sans);
|
|
1067
|
+
font-size: 0.75rem;
|
|
1068
|
+
font-weight: 600;
|
|
1069
|
+
text-transform: uppercase;
|
|
1070
|
+
letter-spacing: 0.15em;
|
|
1071
|
+
color: var(--text-tertiary);
|
|
1072
|
+
margin-bottom: var(--spacing-lg);
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
.contact-links {
|
|
1076
|
+
display: flex;
|
|
1077
|
+
flex-wrap: wrap;
|
|
1078
|
+
gap: var(--spacing-sm) var(--spacing-lg);
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
.contact-links a {
|
|
1082
|
+
font-family: var(--font-sans);
|
|
1083
|
+
font-size: 0.85rem;
|
|
1084
|
+
color: var(--text-secondary);
|
|
1085
|
+
text-decoration: underline;
|
|
1086
|
+
text-underline-offset: 3px;
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
.contact-links a:hover {
|
|
1090
|
+
color: var(--accent-color);
|
|
1091
|
+
}
|
|
1092
|
+
|
|
899
1093
|
/* Print styles */
|
|
900
1094
|
@media print {
|
|
901
1095
|
.site-nav {
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
<div class="nav-content">
|
|
22
22
|
<a href="./" class="nav-logo">{{name}}</a>
|
|
23
23
|
<div class="nav-links">
|
|
24
|
-
{{#
|
|
25
|
-
{{#
|
|
26
|
-
{{
|
|
24
|
+
{{#nav_links}}
|
|
25
|
+
<a href="{{href}}"{{#active}} class="active"{{/active}}>{{label}}</a>
|
|
26
|
+
{{/nav_links}}
|
|
27
27
|
</div>
|
|
28
28
|
<button class="theme-btn" title="Toggle theme" aria-label="Toggle theme">
|
|
29
29
|
<svg class="icon-sun" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
<div class="header-content">
|
|
22
22
|
<a href="./" class="logo">{{name}}</a>
|
|
23
23
|
<nav class="nav">
|
|
24
|
-
{{#
|
|
25
|
-
{{#
|
|
26
|
-
{{
|
|
24
|
+
{{#nav_links}}
|
|
25
|
+
<a href="{{href}}"{{#active}} class="active"{{/active}}>{{label}}</a>
|
|
26
|
+
{{/nav_links}}
|
|
27
27
|
</nav>
|
|
28
28
|
<button class="theme-toggle" title="Toggle theme" aria-label="Toggle theme">
|
|
29
29
|
<svg class="icon-sun" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
<div class="srcl-action-bar">
|
|
24
24
|
<nav class="primary">
|
|
25
25
|
<a href="./" class="nav-home">{{name}}</a>
|
|
26
|
-
{{#
|
|
27
|
-
{{#
|
|
28
|
-
{{
|
|
26
|
+
{{#nav_links}}
|
|
27
|
+
<a href="{{href}}"{{#active}} class="active"{{/active}}>{{label}}</a>
|
|
28
|
+
{{/nav_links}}
|
|
29
29
|
</nav>
|
|
30
30
|
<div class="secondary">
|
|
31
31
|
<button class="hotkey" data-hotkey="ctrl+t" title="Toggle theme (Ctrl+T)">
|