diff --git a/_includes/fixed.html b/_includes/fixed.html index f62ebb4..8ad8b52 100644 --- a/_includes/fixed.html +++ b/_includes/fixed.html @@ -1,4 +1,14 @@ - + +
+ + +
\ No newline at end of file diff --git a/_layouts/blog.html b/_layouts/blog.html index 807b7d8..3d0b793 100644 --- a/_layouts/blog.html +++ b/_layouts/blog.html @@ -15,7 +15,6 @@ -

{{ page.title }}

diff --git a/_layouts/guide.html b/_layouts/guide.html index c740968..f727705 100644 --- a/_layouts/guide.html +++ b/_layouts/guide.html @@ -14,7 +14,6 @@ -

{{ page.title }}

diff --git a/assets/css/common.css b/assets/css/common.css index f5b9d7d..f71eff5 100644 --- a/assets/css/common.css +++ b/assets/css/common.css @@ -1,46 +1,24 @@ :root { - --color-pink: #ff55ff; + --color-pink: light-dark(#ff55ff, #f999f9); --color-yellow: #ffff99; - --color-secondary: #6666ff; + --color-secondary: light-dark(#6666ff, #9999ff); --color-fg-highlight: var(--color-yellow); - --color-fg-highlight-tertiary: #1f3f8a; - --color-fg-highlight-secondary: #229944; - --color-bg-highlight: #efefff; - --color-bg-default: #f5f5ff; - --color-fg-contrast: #232563; - --color-fg-low-contrast: #434583; /* TODO: tweak this */ - --color-fg-dim: #5a5a7a; - --color-fg-emphasized: #7070FF; - --color-fg-match-background: #f5f5ff; - --color-fill-secondary: #7070FF; - --color-fill-separator: #dbdbff; - --color-fill-ghost: #EBEBFF; - --color-border-hint: #DBDBFF; - --color-border-focus: #8585FF; - --color-border-default: var(--color-fg-dim); - --color-selection: var(--color-fg-contrast); -} - -:root[data-theme="dark"] { - --color-pink: #f999f9; - --color-yellow: #ffff99; - --color-secondary: #9999ff; - --color-fg-highlight: var(--color-yellow); - --color-fg-highlight-tertiary: #bbeeff; - --color-fg-highlight-secondary: #77dd77; - --color-bg-highlight: #14151a; - --color-bg-default: #0a0d10; - --color-fg-contrast: #f9f9fb; - --color-fg-low-contrast: #d9d9db; /* TODO: tweak this */ - --color-fg-dim: #9b9bb1; + --color-fg-highlight-tertiary: light-dark(#1f3f8a,#bbeeff); + --color-fg-highlight-secondary: light-dark(#229944,#77dd77); + --color-bg-highlight: light-dark(#efefff,#14151a); + --color-bg-default: light-dark(#f5f5ff,#0a0d10); + --color-fg-contrast: light-dark(#232563,#f9f9fb); + --color-fg-low-contrast: light-dark(#434583,#d9d9db); /* TODO: tweak this */ + --color-fg-dim: light-dark(#5a5a7a,#9b9bb1); --color-fg-emphasized: #7070ff; - --color-fg-match-background: #0a0d10; + --color-fg-match-background: light-dark(#f5f5ff,#0a0d10); --color-fill-secondary: #7070ff; - --color-fill-separator: #24252d; - --color-fill-ghost: #24252d; - --color-border-hint: #24252d; + --color-fill-separator: light-dark(#dbdbff,#24252d); + --color-fill-ghost: light-dark(#EBEBFF,#24252d); + --color-border-hint: light-dark(#DBDBFF,#24252d); --color-border-focus: #8585ff; - --color-selection: var(--color-bg-default); + --color-border-default: var(--color-fg-dim); + --color-selection: light-dark(var(--color-fg-contrast),var(--color-bg-default)); } ::selection { @@ -83,9 +61,63 @@ body, html { margin-top: 0.25rem; margin-bottom: 0.25rem; } -:root[data-theme=light] #toggle-theme { - background-image: url(/assets/images/sun.svg); + +@media (prefers-color-scheme: dark) { + :root { + color-scheme: dark; + } + #dark-label { + display: none; + } } -:root[data-theme=dark] #toggle-theme { - background-image: url(/assets/images/moon.svg); + +@media (prefers-color-scheme: light) { + :root { + color-scheme: light; + } + #light-label { + display: none; + } } + +:root:has(#light:checked) { + color-scheme: light; +} + +:root:has(#dark:checked) { + color-scheme: dark; +} + +:root:has(#dark:checked) #light-label, +:root:has(#light:checked) #dark-label { + display: block; + margin-left: auto; +} + +:root:has(#dark:checked) #dark-label, +:root:has(#light:checked) #light-label { + display: none; +} + +#theme { + gap: 0; + margin: 0; + padding: 0; + border: 1px solid var(--color-fg-default); + text-align: right; +} + +#theme label:first-child { + margin-left: auto; +} + +#theme label { + width: auto; + border: 0; + margin: 0; + padding: 0; +} + +#theme input { + display: none; +} \ No newline at end of file diff --git a/assets/css/monokai.css b/assets/css/monokai.css index 3ef6ef5..cb9ef3d 100644 --- a/assets/css/monokai.css +++ b/assets/css/monokai.css @@ -1,156 +1,65 @@ -:root[data-theme="dark"] .highlight .nl { color: var(--color-yellow) } -:root[data-theme="dark"] .highlight .s2 { color: var(--color-fg-highlight-secondary) } - -.highlight .nl { color: var(--color-fg-contrast) } -.highlight .s2 { color: var(--color-fg-highlight-secondary) } - /* .highlight pre { background-color: #272822; } */ .highlight .hll { background-color: #272822; } -.highlight .c { color: #75715e } /* Comment */ -.highlight .err { color: #960050; background-color: #1e0010 } /* Error */ -.highlight .k { color: #66d9ef } /* Keyword */ -.highlight .l { color: #ae81ff } /* Literal */ -.highlight .n { color: #f8f8f2 } /* Name */ -.highlight .o { color: #f92672 } /* Operator */ -.highlight .p { color: #f8f8f2 } /* Punctuation */ -.highlight .cm { color: #75715e } /* Comment.Multiline */ -.highlight .cp { color: #75715e } /* Comment.Preproc */ -.highlight .c1 { color: #75715e } /* Comment.Single */ -.highlight .cs { color: #75715e } /* Comment.Special */ +.highlight .c { color: light-dark(#6a737d, #75715e) } /* Comment */ +.highlight .err { color: light-dark(#cb2431, #960050); background-color: light-dark(#ffeaea, #1e0010) } /* Error */ +.highlight .k { color: light-dark(#d73a49, #66d9ef) } /* Keyword */ +.highlight .l { color: light-dark(#005cc5, #ae81ff) } /* Literal */ +.highlight .n { color: light-dark(#24292e, #f8f8f2) } /* Name */ +.highlight .o { color: light-dark(#d73a49, #f92672) } /* Operator */ +.highlight .p { color: light-dark(#24292e, #f8f8f2) } /* Punctuation */ +.highlight .cm { color: light-dark(#6a737d, #75715e) } /* Comment.Multiline */ +.highlight .cp { color: light-dark(#d73a49, #75715e) } /* Comment.Preproc */ +.highlight .c1 { color: light-dark(#6a737d, #75715e) } /* Comment.Single */ +.highlight .cs { color: light-dark(#6a737d, #75715e); font-weight: light-dark(bold, inherit) } /* Comment.Special */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .kc { color: #66d9ef } /* Keyword.Constant */ -.highlight .kd { color: #66d9ef } /* Keyword.Declaration */ -.highlight .kn { color: #f92672 } /* Keyword.Namespace */ -.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */ -.highlight .kr { color: #66d9ef } /* Keyword.Reserved */ -.highlight .kt { color: #66d9ef } /* Keyword.Type */ -.highlight .ld { color: #e6db74 } /* Literal.Date */ -.highlight .m { color: #ae81ff } /* Literal.Number */ -.highlight .s { color: #e6db74 } /* Literal.String */ -.highlight .na { color: #a6e22e } /* Name.Attribute */ -.highlight .nb { color: #f8f8f2 } /* Name.Builtin */ -.highlight .nc { color: #a6e22e } /* Name.Class */ -.highlight .no { color: #66d9ef } /* Name.Constant */ -.highlight .nd { color: #a6e22e } /* Name.Decorator */ -.highlight .ni { color: #f8f8f2 } /* Name.Entity */ -.highlight .ne { color: #a6e22e } /* Name.Exception */ -.highlight .nf { color: #a6e22e } /* Name.Function */ -.highlight .nl { color: #f8f8f2 } /* Name.Label */ -.highlight .nn { color: #f8f8f2 } /* Name.Namespace */ -.highlight .nx { color: #a6e22e } /* Name.Other */ -.highlight .py { color: #f8f8f2 } /* Name.Property */ -.highlight .nt { color: #f92672 } /* Name.Tag */ -.highlight .nv { color: #f8f8f2 } /* Name.Variable */ -.highlight .ow { color: #f92672 } /* Operator.Word */ -.highlight .w { color: #f8f8f2 } /* Text.Whitespace */ -.highlight .mf { color: #ae81ff } /* Literal.Number.Float */ -.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */ -.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */ -.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */ -.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */ -.highlight .sc { color: #e6db74 } /* Literal.String.Char */ -.highlight .sd { color: #e6db74 } /* Literal.String.Doc */ -.highlight .s2 { color: #e6db74 } /* Literal.String.Double */ -.highlight .se { color: #ae81ff } /* Literal.String.Escape */ -.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */ -.highlight .si { color: #e6db74 } /* Literal.String.Interpol */ -.highlight .sx { color: #e6db74 } /* Literal.String.Other */ -.highlight .sr { color: #e6db74 } /* Literal.String.Regex */ -.highlight .s1 { color: #e6db74 } /* Literal.String.Single */ -.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */ -.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */ -.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */ -.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */ -.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ +.highlight .kc { color: light-dark(#005cc5, #66d9ef) } /* Keyword.Constant */ +.highlight .kd { color: light-dark(#d73a49, #66d9ef) } /* Keyword.Declaration */ +.highlight .kn { color: light-dark(#d73a49, #f92672) } /* Keyword.Namespace */ +.highlight .kp { color: light-dark(#005cc5, #66d9ef) } /* Keyword.Pseudo */ +.highlight .kr { color: light-dark(#d73a49, #66d9ef) } /* Keyword.Reserved */ +.highlight .kt { color: light-dark(#d73a49, #66d9ef) } /* Keyword.Type */ +.highlight .ld { color: light-dark(#032f62, #e6db74) } /* Literal.Date */ +.highlight .m { color: light-dark(#005cc5, #ae81ff) } /* Literal.Number */ +.highlight .s { color: light-dark(#032f62, #e6db74) } /* Literal.String */ +.highlight .na { color: light-dark(#e36209, #a6e22e) } /* Name.Attribute */ +.highlight .nb { color: light-dark(#005cc5, #f8f8f2) } /* Name.Builtin */ +.highlight .nc { color: light-dark(#6f42c1, #a6e22e) } /* Name.Class */ +.highlight .no { color: light-dark(#005cc5, #66d9ef) } /* Name.Constant */ +.highlight .nd { color: light-dark(#6f42c1, #a6e22e) } /* Name.Decorator */ +.highlight .ni { color: light-dark(#24292e, #f8f8f2) } /* Name.Entity */ +.highlight .ne { color: light-dark(#6f42c1, #a6e22e) } /* Name.Exception */ +.highlight .nf { color: light-dark(#6f42c1, #a6e22e) } /* Name.Function */ +.highlight .nl { color: light-dark(#24292e, #f8f8f2) } /* Name.Label */ +.highlight .nn { color: light-dark(#24292e, #f8f8f2) } /* Name.Namespace */ +.highlight .nx { color: light-dark(#6f42c1, #a6e22e) } /* Name.Other */ +.highlight .py { color: light-dark(#24292e, #f8f8f2) } /* Name.Property */ +.highlight .nt { color: light-dark(#22863a, #f92672) } /* Name.Tag */ +.highlight .nv { color: light-dark(#e36209, #f8f8f2) } /* Name.Variable */ +.highlight .ow { color: light-dark(#d73a49, #f92672) } /* Operator.Word */ +.highlight .w { color: light-dark(#24292e, #f8f8f2) } /* Text.Whitespace */ +.highlight .mf { color: light-dark(#005cc5, #ae81ff) } /* Literal.Number.Float */ +.highlight .mh { color: light-dark(#005cc5, #ae81ff) } /* Literal.Number.Hex */ +.highlight .mi { color: light-dark(#005cc5, #ae81ff) } /* Literal.Number.Integer */ +.highlight .mo { color: light-dark(#005cc5, #ae81ff) } /* Literal.Number.Oct */ +.highlight .sb { color: light-dark(#032f62, #e6db74) } /* Literal.String.Backtick */ +.highlight .sc { color: light-dark(#032f62, #e6db74) } /* Literal.String.Char */ +.highlight .sd { color: light-dark(#6a737d, #e6db74) } /* Literal.String.Doc */ +.highlight .s2 { color: light-dark(#032f62, #e6db74) } /* Literal.String.Double */ +.highlight .se { color: light-dark(#e36209, #ae81ff) } /* Literal.String.Escape */ +.highlight .sh { color: light-dark(#032f62, #e6db74) } /* Literal.String.Heredoc */ +.highlight .si { color: light-dark(#e36209, #e6db74) } /* Literal.String.Interpol */ +.highlight .sx { color: light-dark(#032f62, #e6db74) } /* Literal.String.Other */ +.highlight .sr { color: light-dark(#22863a, #e6db74) } /* Literal.String.Regex */ +.highlight .s1 { color: light-dark(#032f62, #e6db74) } /* Literal.String.Single */ +.highlight .ss { color: light-dark(#005cc5, #e6db74) } /* Literal.String.Symbol */ +.highlight .bp { color: light-dark(#005cc5, #f8f8f2) } /* Name.Builtin.Pseudo */ +.highlight .vc { color: light-dark(#e36209, #f8f8f2) } /* Name.Variable.Class */ +.highlight .vg { color: light-dark(#e36209, #f8f8f2) } /* Name.Variable.Global */ +.highlight .vi { color: light-dark(#e36209, #f8f8f2) } /* Name.Variable.Instance */ +.highlight .il { color: light-dark(#005cc5, #ae81ff) } /* Literal.Number.Integer.Long */ -.highlight .gh { } /* Generic Heading & Diff Header */ -.highlight .gu { color: #75715e; } /* Generic.Subheading & Diff Unified/Comment? */ -.highlight .gd { color: #f92672; } /* Generic.Deleted & Diff Deleted */ -.highlight .gi { color: #a6e22e; } /* Generic.Inserted & Diff Inserted */ - -/* Light Mode */ - -/* Light mode syntax highlighting improvements */ -:root:not([data-theme="dark"]) .highlight { - /* Base text and background */ - .c { color: #6a737d; } /* Comment - GitHub style gray */ - .err { color: #cb2431; background-color: #ffeaea; } /* Error */ - .k { color: #d73a49; } /* Keyword - GitHub red */ - .l { color: #005cc5; } /* Literal - GitHub blue */ - .n { color: #24292e; } /* Name - dark gray */ - .o { color: #d73a49; } /* Operator - GitHub red */ - .p { color: #24292e; } /* Punctuation - dark gray */ - - /* Comments */ - .cm { color: #6a737d; } /* Comment.Multiline */ - .cp { color: #d73a49; } /* Comment.Preproc - red for preprocessor */ - .c1 { color: #6a737d; } /* Comment.Single */ - .cs { color: #6a737d; font-weight: bold; } /* Comment.Special */ - - /* Keywords */ - .kc { color: #005cc5; } /* Keyword.Constant - blue */ - .kd { color: #d73a49; } /* Keyword.Declaration - red */ - .kn { color: #d73a49; } /* Keyword.Namespace - red */ - .kp { color: #005cc5; } /* Keyword.Pseudo - blue */ - .kr { color: #d73a49; } /* Keyword.Reserved - red */ - .kt { color: #d73a49; } /* Keyword.Type - red */ - - /* Literals */ - .ld { color: #032f62; } /* Literal.Date - dark blue */ - .m { color: #005cc5; } /* Literal.Number - blue */ - .s { color: #032f62; } /* Literal.String - dark blue */ - - /* Names */ - .na { color: #e36209; } /* Name.Attribute - orange */ - .nb { color: #005cc5; } /* Name.Builtin - blue */ - .nc { color: #6f42c1; } /* Name.Class - purple */ - .no { color: #005cc5; } /* Name.Constant - blue */ - .nd { color: #6f42c1; } /* Name.Decorator - purple */ - .ni { color: #24292e; } /* Name.Entity - dark gray */ - .ne { color: #6f42c1; } /* Name.Exception - purple */ - .nf { color: #6f42c1; } /* Name.Function - purple */ - .nl { color: #24292e; } /* Name.Label - dark gray */ - .nn { color: #24292e; } /* Name.Namespace - dark gray */ - .nx { color: #6f42c1; } /* Name.Other - purple */ - .py { color: #24292e; } /* Name.Property - dark gray */ - .nt { color: #22863a; } /* Name.Tag - green */ - .nv { color: #e36209; } /* Name.Variable - orange */ - - /* Operators */ - .ow { color: #d73a49; } /* Operator.Word - red */ - .w { color: #24292e; } /* Text.Whitespace - dark gray */ - - /* Numbers */ - .mf { color: #005cc5; } /* Literal.Number.Float - blue */ - .mh { color: #005cc5; } /* Literal.Number.Hex - blue */ - .mi { color: #005cc5; } /* Literal.Number.Integer - blue */ - .mo { color: #005cc5; } /* Literal.Number.Oct - blue */ - - /* Strings */ - .sb { color: #032f62; } /* Literal.String.Backtick - dark blue */ - .sc { color: #032f62; } /* Literal.String.Char - dark blue */ - .sd { color: #6a737d; } /* Literal.String.Doc - gray */ - .s2 { color: #032f62; } /* Literal.String.Double - dark blue */ - .se { color: #e36209; } /* Literal.String.Escape - orange */ - .sh { color: #032f62; } /* Literal.String.Heredoc - dark blue */ - .si { color: #e36209; } /* Literal.String.Interpol - orange */ - .sx { color: #032f62; } /* Literal.String.Other - dark blue */ - .sr { color: #22863a; } /* Literal.String.Regex - green */ - .s1 { color: #032f62; } /* Literal.String.Single - dark blue */ - .ss { color: #005cc5; } /* Literal.String.Symbol - blue */ - - /* Variables */ - .bp { color: #005cc5; } /* Name.Builtin.Pseudo - blue */ - .vc { color: #e36209; } /* Name.Variable.Class - orange */ - .vg { color: #e36209; } /* Name.Variable.Global - orange */ - .vi { color: #e36209; } /* Name.Variable.Instance - orange */ - .il { color: #005cc5; } /* Literal.Number.Integer.Long - blue */ - - /* Diff colors */ - .gh { color: #24292e; font-weight: bold; } /* Generic Heading */ - .gu { color: #6a737d; } /* Generic.Subheading */ - .gd { color: #cb2431; background-color: #ffeaea; } /* Generic.Deleted */ - .gi { color: #22863a; background-color: #f0fff4; } /* Generic.Inserted */ -} +.highlight .gh { color: light-dark(#24292e, inherit) } /* Generic Heading & Diff Header */ +.highlight .gu { color: light-dark(#6a737d, #75715e); } /* Generic.Subheading & Diff Unified/Comment? */ +.highlight .gd { color: light-dark(#cb2431, #f92672); background-color: light-dark(#ffeaea, transparent) } /* Generic.Deleted & Diff Deleted */ +.highlight .gi { color: light-dark(#22863a, #a6e22e); background-color: light-dark(#f0fff4, transparent) } /* Generic.Inserted & Diff Inserted */ diff --git a/assets/css/page.css b/assets/css/page.css index 4fea895..5ed0cfc 100644 --- a/assets/css/page.css +++ b/assets/css/page.css @@ -182,29 +182,29 @@ a:hover { } .button { display: inline-block; - color: var(--color-pink); + color: light-dark(var(--color-bg-default), var(--color-pink)); background: none; + background-color: light-dark(var(--color-pink), transparent); border: 1px dashed var(--color-pink); margin: 0.5rem 0; padding: 0.5rem 0.75rem; cursor: pointer; } -.button:hover, .button.filled, -:root[data-theme="light"] .button { +.button:hover { border-color: var(--color-pink); - background-color: var(--color-pink); + background-color: light-dark(var(--color-fg-low-contrast), var(--color-pink)); color: var(--color-bg-default); } .button.secondary { - color: var(--color-secondary); + color: light-dark(var(--color-bg-default), var(--color-secondary)); border: 1px dashed var(--color-secondary); + background-color: light-dark(var(--color-secondary), transparent); } -.button.secondary:hover, .button.secondary.filled, -:root[data-theme="light"] .button.secondary { +.button.secondary:hover { border-color: var(--color-secondary); - background-color: var(--color-secondary); + background-color: light-dark(var(--color-fg-low-contrast), var(--color-secondary)); color: var(--color-bg-default); } @@ -213,10 +213,19 @@ a:hover { margin: 0; } -.button.filled, :root[data-theme="light"] .button { +.button.filled { border-style: none; + border-color: var(--color-pink); + background-color: var(--color-pink); + color: var(--color-bg-default); } -.button.filled:hover, :root[data-theme="light"] .button:hover { + +.button.secondary.filled { + border-color: var(--color-secondary); + background-color: var(--color-secondary); +} + +.button.filled:hover { background-color: var(--color-fg-low-contrast) !important; color: var(--color-bg-default) !important; } @@ -278,8 +287,6 @@ body > footer { white-space: nowrap; width: 100%; height: 2rem; - min-height: 1.5rem; - line-height: 1.5rem; } footer { @@ -292,8 +299,12 @@ body > footer > * { flex: 1; display: flex; justify-content: center; +} + +body > footer > span { align-items: center; } + body > footer :first-child > * { margin-right: auto; } diff --git a/assets/js/toggle-theme.js b/assets/js/toggle-theme.js index 572a132..4eeb299 100644 --- a/assets/js/toggle-theme.js +++ b/assets/js/toggle-theme.js @@ -1,24 +1,12 @@ -const rootElement = document.documentElement; -const themeToggleBtn = document.getElementById("toggle-theme"); -const storedTheme = localStorage.getItem("theme"); -const defaultTheme = window.matchMedia - && window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; - -setTheme(storedTheme || defaultTheme); - -if (themeToggleBtn) { - themeToggleBtn.addEventListener("click", () => { - const currentTheme = rootElement.dataset.theme; - - if (currentTheme === "dark") { - setTheme("light"); - } else { - setTheme("dark"); - } - }); +function loadTheme() { + const theme = localStorage.getItem("theme") || (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"); + document.documentElement.style.colorScheme = theme; + document.getElementById(theme).checked = true; } -function setTheme(theme) { - rootElement.dataset.theme = theme; +loadTheme(); + +function toggleTheme(theme) { + document.documentElement.style.colorScheme = theme; localStorage.setItem("theme", theme); -} +} \ No newline at end of file