64 Commits

Author SHA1 Message Date
sefaria 1db03ad4b3 center text inside .mobile-menu vertically 2026-06-30 00:28:31 +02:00
sefaria 59182e2715 reduze button scale on hover 2026-06-30 00:23:34 +02:00
sefaria af5075afec change mobile-menu list item height 2026-06-30 00:21:42 +02:00
sefaria 564df534bf change menu-toggle height to logo height 2026-06-30 00:15:57 +02:00
sefaria e189c16149 center desktop-nav-secondary at viewport width 579px 2026-06-29 23:54:24 +02:00
sefaria 66126653ee clean up media queries 2026-06-29 23:36:49 +02:00
sefaria 80d57f5f41 change mobile-menu button styling 2026-06-29 23:27:23 +02:00
sefaria 792e08ad03 prevent scroll on menu toggle 2026-06-29 23:01:41 +02:00
sefaria cb1c21a305 add menu-button class to mobile-menu items 2026-06-29 22:59:56 +02:00
sefaria 62c9e4b801 change overlay blur variable 2026-06-29 22:52:49 +02:00
sefaria 7576e8b9ee add close label to menu toggle 2026-06-29 22:50:40 +02:00
sefaria 4aae167054 change mobile menu styling to figma layout 2026-06-29 22:46:01 +02:00
sefaria a3fc18ddef set mobile menu width and height 2026-06-29 22:19:41 +02:00
sefaria c588ee102c make overlay blur to adhere to light-dark 2026-06-29 17:22:58 +02:00
sefaria 94b0f34f46 change mobile menu close behaviour to menu toggle 2026-06-29 17:17:36 +02:00
sefaria bb0220c166 change mobile menu styling 2026-06-29 17:16:58 +02:00
sefaria 3583df44ac revert recent changes 2026-06-29 17:10:57 +02:00
sefaria 72d8e7587a Merge branch 'origin/feature/add-menu-bar' 2026-06-29 16:56:35 +02:00
sefaria bfb8fa3b66 change .menu-overlay inset 2026-06-29 16:53:12 +02:00
sefaria f945b360d1 adding --header-offset variable 2026-06-29 16:52:33 +02:00
sefaria 3b1d8ad199 adding --header-offset variable 2026-06-29 16:50:59 +02:00
sefaria b45480d073 removing .mobile-menu__header 2026-06-29 16:49:42 +02:00
sefaria 42e08bdb7e changing mobile menu background blur 2026-06-29 16:42:17 +02:00
sefaria 1ee89a9b1e add latest main css changes 2026-06-15 23:10:53 +02:00
sefaria 09772ff1a5 comment out a:visited style 2026-06-12 12:51:27 +02:00
sefaria 4323fd87c6 change visited style for all buttons 2026-06-12 12:46:19 +02:00
sefaria be51d9da8c More scroll margin for new menu bar 2026-06-12 12:40:14 +02:00
sefaria 455f9c355f improved button hover size 2026-05-30 17:37:40 +02:00
sefaria a4a9b28cb1 larger button scale on hover 2026-05-30 17:36:34 +02:00
sefaria 60fa21881f add site header to all subpages 2026-05-30 17:32:51 +02:00
sefaria e133278724 fixed button visited appereance 2026-05-28 23:54:42 +02:00
sefaria a1d9d3b9d8 fixed typo 2026-05-28 23:35:26 +02:00
sefaria 88f3140357 background gradient for site-header 2026-05-28 22:41:00 +02:00
sefaria 0d7beb1dac less top padding for screen width 440px 2026-05-27 19:31:25 +02:00
sefaria 28735f1163 first draft site-header gradient 2026-05-27 19:18:55 +02:00
sefaria 938b15b741 html, body css fix 2026-05-27 19:14:43 +02:00
sefaria 740198a939 correct meta theme-color value for dark theme 2026-05-27 15:37:06 +02:00
sefaria 579487db22 add viewport-fit=cover to all pages 2026-05-27 15:24:13 +02:00
sefaria 21f21aee0c add fade to site-header background blur 2026-05-27 14:10:53 +02:00
sefaria a1faad0b7a fixed menu bar padding in media queries 2026-05-27 13:41:01 +02:00
sefaria 703670c932 removing old unused layout styles 2026-05-27 13:34:37 +02:00
sefaria 48f6410a76 new menu-bar styling, merge buttons and toggle right 2026-05-27 13:31:33 +02:00
sefaria f4718451a8 set mobile menu toggle to button design 2026-05-27 13:16:40 +02:00
sefaria ce85432804 implementing css round() for all font-sizes 2026-05-27 11:24:20 +02:00
sefaria 0f34535ba4 fix header background blur in light theme 2026-05-27 09:58:09 +02:00
sefaria c22c747e4f a11y: underline on hover/active links and buttons 2026-05-27 09:45:58 +02:00
sefaria 6bd94c8e19 a11y: more paragraph spacing 2026-05-27 09:39:45 +02:00
sefaria b7b2861ed1 deleting double styles for visually-hidden 2026-05-27 09:33:01 +02:00
sefaria 069e5346f1 adding blur to site-header, fixing mobile padding 2026-05-27 09:27:39 +02:00
sefaria 710702b4ed add menu to all pages 2026-05-27 09:15:00 +02:00
sefaria de4698e6fd a11y styles, background gradient for header 2026-05-27 09:04:45 +02:00
sefaria 13632637a9 functional a11y toggle and css 2026-05-26 23:46:05 +02:00
sefaria 430602caa3 js code for a11y toggle 2026-05-26 23:37:28 +02:00
sefaria 48de33f495 commenting out js in body 2026-05-26 23:33:19 +02:00
sefaria 96a3470419 adding js toggle for light-dark theme 2026-05-26 23:32:24 +02:00
sefaria 96ec270ed4 transform scale for buttons on hover 2026-05-26 23:00:57 +02:00
sefaria 0521d33193 consistend secondary button and menu styling 2026-05-26 22:45:51 +02:00
sefaria 93a5a13e3e new button-secondary, coherent styling (variables) 2026-05-26 18:39:31 +02:00
sefaria db5fe419ce new primary menu styles, cleaned up variables 2026-05-26 17:38:54 +02:00
sefaria 4dcd811381 styling secondary; underline hover primary menu 2026-05-25 21:05:08 +02:00
sefaria 9365d7c6f9 adding icon secondary nav with buttons 2026-05-25 20:22:02 +02:00
sefaria be60619353 changing nav shadow from button to box 2026-05-25 00:30:02 +02:00
sefaria 3b5d826ce0 creating about page for menu testing 2026-05-25 00:27:40 +02:00
sefaria 992233f4cb Fixing desktop menu appereance 2026-05-25 00:23:45 +02:00
8 changed files with 919 additions and 278 deletions
+76 -2
View File
@@ -3,9 +3,10 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Page Not Found</title> <title>Page Not Found</title>
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="/css/a11y.css" id="a11y-css" disabled>
<meta name="description" content="Creator of visual identities and digital interfaces"> <meta name="description" content="Creator of visual identities and digital interfaces">
<meta property="og:title" content="Lars Winter"> <meta property="og:title" content="Lars Winter">
@@ -20,7 +21,7 @@
<link rel="apple-touch-icon" href="img/lw.png"> <link rel="apple-touch-icon" href="img/lw.png">
<meta name="theme-color" content="#F7F7F7" media="(prefers-color-scheme: light)"> <meta name="theme-color" content="#F7F7F7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="0f0f0f" media="(prefers-color-scheme: dark)"> <meta name="theme-color" content="#0f0f0f" media="(prefers-color-scheme: dark)">
<style> <style>
main { main {
@@ -40,6 +41,8 @@
} }
</style> </style>
<script src="js/app.js" defer></script>
</head> </head>
<body> <body>
@@ -48,6 +51,75 @@
<a href="#siteContent">Skip to content</a> <a href="#siteContent">Skip to content</a>
</div> </div>
<header class="site-header">
<div class="menu-bar">
<div class="menu-left">
<a class="logo" href="/">
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" aria-hidden="true" focusable="false" viewBox="0 0 1080 1080"><path d="M1000.022 50H499.59c-20.565 0-34.827 20.502-27.676 39.783l146.561 395.171c8.419 22.699 40.635 22.382 48.605-.478l61.821-177.315c6.903-19.8 34.906-19.8 41.809 0l61.821 177.315c7.97 22.861 40.187 23.178 48.605.478l146.561-395.171c7.151-19.281-7.112-39.783-27.676-39.783Z"/><path d="M360 538V106c0-30.928-25.072-56-56-56H106c-30.928 0-56 25.072-56 56v868c0 30.928 25.072 56 56 56h868c30.928 0 56-25.072 56-56V650c0-30.928-25.072-56-56-56H416c-30.928 0-56-25.072-56-56"/></svg>
<span class="visually-hidden">Home page</span>
</a>
<nav class="desktop-nav" aria-label="Primary navigation">
<ul>
<li><a href="/" class="menu-button">Work</a></li>
<li><a href="/about.html" class="menu-button">About</a></li>
<li><a href="/privacy.html" class="menu-button">Blog</a></li>
</ul>
</nav>
</div>
<div class="menu-right">
<nav class="desktop-nav-secondary" aria-label="Secondary navigation">
<ul>
<li><button type="button" id="a11y-toggle" aria-pressed="false" class="button-secondary">
<svg aria-hidden="true" focusable="false" viewBox="0 0 24 24">
<path fill="currentColor" d="M21 10h-6v12h-2v-6h-2v6H9V10H3V8h18zm-9-8a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5"/>
</svg><span class="visually-hidden">Make the website more visually accessible</span></button></li>
<li><button type="button" id="theme-toggle" class="button-secondary"><svg aria-hidden="true" focusable="false" viewBox="0 0 24 24">
<path fill="currentColor" fill-rule="evenodd" d="M5.302 4.574a9.96 9.96 0 0 1 6.697-2.57L12 2l.134.002a10.1 10.1 0 0 1 3.015.507l.223.076q.12.043.24.091.102.038.203.08.117.047.232.1.107.045.213.095.105.05.21.104.116.056.23.117l.153.084q.135.074.27.154.105.064.21.132.091.056.183.115.131.088.261.182l.154.109.21.162q.092.071.185.146l.123.105q.32.268.622.568l.355.373q.51.565.917 1.182l.06.095q.104.16.202.323l.082.145q.076.134.15.27l.085.166q.067.13.13.264.042.09.081.182.063.138.122.279l.049.127q.063.16.12.32.027.075.05.15.051.145.096.292l.058.206a10 10 0 0 1 .173.716l.037.201.044.254a10 10 0 0 1 .081.695 10.3 10.3 0 0 1-.084 2.374 10 10 0 0 1-.13.678 10 10 0 0 1-.184.694 10 10 0 0 1-.148.448q-.046.13-.098.26l-.075.192-.1.233q-.046.106-.095.213l-.104.21-.117.229-.095.171q-.07.127-.143.252-.065.106-.132.21-.058.096-.12.19-.087.128-.178.255l-.108.154q-.08.105-.163.209-.071.094-.145.186l-.105.123a10 10 0 0 1-.94.976q-.375.337-.773.63l-.098.07q-.147.105-.295.205l-.148.095q-.128.083-.258.162l-.163.093q-.127.075-.257.143-.087.046-.175.09-.12.062-.242.12-.102.048-.205.094-.117.052-.236.102l-.175.072a10 10 0 0 1-1.147.372q-.108.03-.218.056a10 10 0 0 1-.293.064l-.146.03a10 10 0 0 1-.294.05l-.187.029q-.135.018-.27.032l-.189.022q-.157.013-.316.022l-.15.01a9.97 9.97 0 0 1-7.162-2.563l-.373-.355c-3.905-3.905-3.905-10.237 0-14.142zm1.041 1.77A8 8 0 0 0 12 20V4a7.98 7.98 0 0 0-5.657 2.343"/>
</svg><span class="visually-hidden">Change light/dark mode</span></button></li>
</ul>
</nav>
<button
class="menu-toggle"
id="menuToggle"
type="button"
aria-expanded="false"
aria-controls="mobileMenu"
aria-haspopup="true"
aria-label="Open menu"
>
Menu
</button>
</div>
</div>
</header>
<div class="menu-overlay" id="menuOverlay" hidden></div>
<aside
class="mobile-menu"
id="mobileMenu"
aria-label="Mobile navigation"
aria-hidden="true"
>
<div class="mobile-menu__header">
<strong>Menu</strong>
<button class="menu-close" id="menuClose" type="button" aria-label="Close menu">
Close
</button>
</div>
<nav aria-label="Mobile navigation">
<ul>
<li><a href="/" class="button-primary" aria-current="page">Work</a></li>
<li><a href="/legal-notice.html" class="button-primary">About</a></li>
<li><a href="/privacy.html" class="button-primary">Blog</a></li>
</ul>
</nav>
</aside>
<main> <main>
<section> <section>
<h1>4💀4</h1> <h1>4💀4</h1>
@@ -55,6 +127,8 @@
<p>Sorry, but the page you were trying to view does not exist.</p> <p>Sorry, but the page you were trying to view does not exist.</p>
</section> </section>
</main> </main>
<!-- <script src="js/app.js" defer></script> -->
</body> </body>
+155
View File
@@ -0,0 +1,155 @@
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>About Lars Winter</title>
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/a11y.css" id="a11y-css" disabled>
<meta name="description" content="Creator of visual identities and digital interfaces">
<meta property="og:title" content="Lars Winter">
<meta property="og:description" content="Portfolio of Lars Winter">
<meta property="og:url" content="https://larswinter.me">
<meta property="og:image" content="https://larswinter.me/img/lw-og_image.png">
<meta property="og:image:alt" content="">
<meta name="fediverse:creator" content="@larswinter@mastodon.social">
<link rel="icon" href="img/favicon.ico" sizes="any">
<!-- <link rel="icon" href="img/icon.svg" type="image/svg+xml"> -->
<link rel="apple-touch-icon" href="img/lw.png">
<meta name="theme-color" content="#F7F7F7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#0f0f0f" media="(prefers-color-scheme: dark)">
<script src="js/app.js" defer></script>
</head>
<body>
<div id="skipLink">
<a href="#siteContent">Skip to content</a>
</div>
<header class="site-header">
<div class="menu-bar">
<div class="menu-left">
<a class="logo" href="/">
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" aria-hidden="true" focusable="false" viewBox="0 0 1080 1080"><path d="M1000.022 50H499.59c-20.565 0-34.827 20.502-27.676 39.783l146.561 395.171c8.419 22.699 40.635 22.382 48.605-.478l61.821-177.315c6.903-19.8 34.906-19.8 41.809 0l61.821 177.315c7.97 22.861 40.187 23.178 48.605.478l146.561-395.171c7.151-19.281-7.112-39.783-27.676-39.783Z"/><path d="M360 538V106c0-30.928-25.072-56-56-56H106c-30.928 0-56 25.072-56 56v868c0 30.928 25.072 56 56 56h868c30.928 0 56-25.072 56-56V650c0-30.928-25.072-56-56-56H416c-30.928 0-56-25.072-56-56"/></svg>
<span class="visually-hidden">Home page</span>
</a>
<nav class="desktop-nav" aria-label="Primary navigation">
<ul>
<li><a href="/" class="menu-button">Work</a></li>
<li><a href="/about.html" class="menu-button" aria-current="page">About</a></li>
<li><a href="/privacy.html" class="menu-button">Blog</a></li>
</ul>
</nav>
</div>
<div class="menu-right">
<nav class="desktop-nav-secondary" aria-label="Secondary navigation">
<ul>
<li><button type="button" id="a11y-toggle" aria-pressed="false" class="button-secondary">
<svg aria-hidden="true" focusable="false" viewBox="0 0 24 24">
<path fill="currentColor" d="M21 10h-6v12h-2v-6h-2v6H9V10H3V8h18zm-9-8a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5"/>
</svg><span class="visually-hidden">Make the website more visually accessible</span></button></li>
<li><button type="button" id="theme-toggle" class="button-secondary"><svg aria-hidden="true" focusable="false" viewBox="0 0 24 24">
<path fill="currentColor" fill-rule="evenodd" d="M5.302 4.574a9.96 9.96 0 0 1 6.697-2.57L12 2l.134.002a10.1 10.1 0 0 1 3.015.507l.223.076q.12.043.24.091.102.038.203.08.117.047.232.1.107.045.213.095.105.05.21.104.116.056.23.117l.153.084q.135.074.27.154.105.064.21.132.091.056.183.115.131.088.261.182l.154.109.21.162q.092.071.185.146l.123.105q.32.268.622.568l.355.373q.51.565.917 1.182l.06.095q.104.16.202.323l.082.145q.076.134.15.27l.085.166q.067.13.13.264.042.09.081.182.063.138.122.279l.049.127q.063.16.12.32.027.075.05.15.051.145.096.292l.058.206a10 10 0 0 1 .173.716l.037.201.044.254a10 10 0 0 1 .081.695 10.3 10.3 0 0 1-.084 2.374 10 10 0 0 1-.13.678 10 10 0 0 1-.184.694 10 10 0 0 1-.148.448q-.046.13-.098.26l-.075.192-.1.233q-.046.106-.095.213l-.104.21-.117.229-.095.171q-.07.127-.143.252-.065.106-.132.21-.058.096-.12.19-.087.128-.178.255l-.108.154q-.08.105-.163.209-.071.094-.145.186l-.105.123a10 10 0 0 1-.94.976q-.375.337-.773.63l-.098.07q-.147.105-.295.205l-.148.095q-.128.083-.258.162l-.163.093q-.127.075-.257.143-.087.046-.175.09-.12.062-.242.12-.102.048-.205.094-.117.052-.236.102l-.175.072a10 10 0 0 1-1.147.372q-.108.03-.218.056a10 10 0 0 1-.293.064l-.146.03a10 10 0 0 1-.294.05l-.187.029q-.135.018-.27.032l-.189.022q-.157.013-.316.022l-.15.01a9.97 9.97 0 0 1-7.162-2.563l-.373-.355c-3.905-3.905-3.905-10.237 0-14.142zm1.041 1.77A8 8 0 0 0 12 20V4a7.98 7.98 0 0 0-5.657 2.343"/>
</svg><span class="visually-hidden">Change light/dark mode</span></button></li>
</ul>
</nav>
<button
class="menu-toggle"
id="menuToggle"
type="button"
aria-expanded="false"
aria-controls="mobileMenu"
aria-haspopup="true"
aria-label="Open menu"
>
Menu
</button>
</div>
</div>
</header>
<div class="menu-overlay" id="menuOverlay" hidden></div>
<aside
class="mobile-menu"
id="mobileMenu"
aria-label="Mobile navigation"
aria-hidden="true"
>
<div class="mobile-menu__header">
<strong>Menu</strong>
<button class="menu-close" id="menuClose" type="button" aria-label="Close menu">
Close
</button>
</div>
<nav aria-label="Mobile navigation">
<ul>
<li><a href="/" class="button-primary" aria-current="page">Work</a></li>
<li><a href="/legal-notice.html" class="button-primary">About</a></li>
<li><a href="/privacy.html" class="button-primary">Blog</a></li>
</ul>
</nav>
</aside>
<main id="siteContent" class="page-content">
<!-- target="_blank" rel="noopener noreferrer" -->
<header class="content-box content-intro">
<h1 class="headline size-h2">
About text
</h1>
</header>
<section class="content-box content-text">
<p class="text">
As usual, my portfolio is a work in progress and currently only available on request. Please feel free to contact me <a href="mailto:contact@larswinter.me">via email</a> for work collaborations and other requests. You can also find me on one of those fancy social networks, like <a rel="me" href="https://mastodon.social/@larswinter">Mastodon</a>, <a href="https://www.linkedin.com/in/larswinter">LinkedIn</a> (if really necessary), <del>Instagram</del>, and <del>Twitter</del>.
</p>
</section>
<div class="content-box placeholder">
</div>
<!-- <div class="footer-fade"></div> -->
</main>
<footer>
<div class="footer-content">
<span>© 2018<span id="year"></span> Lars Winter</span>
<div class="footer-links">
<div>
<a href="/legal-notice.html">Legal notice</a>
</div>
<div>
<a href="/privacy.html">Privacy</a>
</div>
<div>
<a href="/archive">Archived Portfolio</a>
</div>
</div>
<script>
document.getElementById('year').textContent = new Date().getFullYear();
</script>
</div>
</footer>
<!-- Add your site or application content here -->
<!-- <script src="js/app.js" defer></script> -->
</body>
</html>
+69
View File
@@ -0,0 +1,69 @@
*, a, span, li {
line-height: var(--line-loose);
letter-spacing: 0.12em;
word-spacing: 0.16em;
}
a {
line-height: var(--line-loose);
letter-spacing: 0.12em;
word-spacing: 0.16em;
}
p, ul, ol, li {
margin: 1.6em 0 3.2em 0;
}
button, .button-primary, .button-secondary, .menu-button, .logo {
line-height: var(--line-loose);
letter-spacing: 0.12em;
word-spacing: 0.16em;
text-decoration: underline;
text-underline-offset: 0.175rem;
text-decoration-thickness: 0.075rem;
transition: 0.2s;
}
button:hover, .button-primary:hover, .button-secondary:hover, .logo:hover {
text-decoration: underline;
text-underline-offset: 0.175rem;
text-decoration-thickness: 0.075rem;
transition: 0.2s;
}
button:active, .button-primary:active, .button-secondary:active, .logo:active {
text-decoration: underline;
text-underline-offset: 0.175rem;
text-decoration-thickness: 0.075rem;
transition: 0.2s;
}
.menu-button:hover,
.desktop-nav a[aria-current="page"]:hover,
.mobile-menu a[aria-current="page"]:hover {
text-decoration: underline;
text-underline-offset: 0.175rem;
text-decoration-thickness: 0.075rem;
transition: 0.2s;
}
.menu-button:active,
.desktop-nav a[aria-current="page"]:active,
.mobile-menu a[aria-current="page"]:active,
.desktop-nav a[aria-current="page"],
.mobile-menu a[aria-current="page"] {
text-decoration: underline;
text-underline-offset: 0.175rem;
text-decoration-thickness: 0.075rem;
transition: 0.2s;
}
.menu-button:active,
.desktop-nav a[aria-current="page"]:active,
.mobile-menu a[aria-current="page"]:active {
text-decoration: underline;
text-underline-offset: 0.175rem;
text-decoration-thickness: 0.075rem;
transition: 0.2s;
}
+326 -238
View File
@@ -55,6 +55,7 @@
:root { :root {
color-scheme: light dark; color-scheme: light dark;
background-color: light-dark(#F7F7F7, #121212);
/* Primitive tokens: raw design values */ /* Primitive tokens: raw design values */
--color-neutral-100: #F7F7F7; --color-neutral-100: #F7F7F7;
@@ -87,6 +88,21 @@
--color-orange-800: #933D00; --color-orange-800: #933D00;
--color-orange-900: #7A2C00; --color-orange-900: #7A2C00;
--shadow-light: 0px 2px 8px rgba(0, 0, 0, 0.3), 0px 1px 4px rgba(0, 0, 0, 0.2);
--shadow-dark: 0px 2px 8px rgba(0, 0, 0, 0.5), 0px 1px 4px rgba(0, 0, 0, 0.2);
--gradient-stop-1-light: #f7f7f7;
--gradient-stop-1-dark: #121212;
--gradient-stop-2-light: #f7f7f7;
--gradient-stop-2-dark: #121212;
--gradient-stop-3-light: #f7f7f780;
--gradient-stop-3-dark: #12121280;
--gradient-stop-4-light: #f7f7f700;
--gradient-stop-4-dark: #12121200;
--text-h1: clamp(2.25rem, 1.9rem + 1.1vw, 3rem); --text-h1: clamp(2.25rem, 1.9rem + 1.1vw, 3rem);
--text-h2: clamp(1.875rem, 1.6rem + 0.9vw, 2.5rem); --text-h2: clamp(1.875rem, 1.6rem + 0.9vw, 2.5rem);
--text-h3: clamp(1.625rem, 1.4rem + 0.7vw, 2rem); --text-h3: clamp(1.625rem, 1.4rem + 0.7vw, 2rem);
@@ -94,6 +110,8 @@
--text-h5: clamp(1.25rem, 1.15rem + 0.25vw, 1.5rem); --text-h5: clamp(1.25rem, 1.15rem + 0.25vw, 1.5rem);
--text-h6: clamp(1.125rem, 1.05rem + 0.25vw, 1.25rem); --text-h6: clamp(1.125rem, 1.05rem + 0.25vw, 1.25rem);
--round-interval: 2px;
--text-body: clamp(1.125rem, 1.05rem + 0.25vw, 1.25rem); --text-body: clamp(1.125rem, 1.05rem + 0.25vw, 1.25rem);
--text-small: 0.875rem; --text-small: 0.875rem;
--text-button: clamp(1.25rem, 1.15rem + 0.25vw, 1.5rem); --text-button: clamp(1.25rem, 1.15rem + 0.25vw, 1.5rem);
@@ -126,8 +144,6 @@
--radius-xl: 2rem; --radius-xl: 2rem;
--radius-xxl: 2.5rem; --radius-xxl: 2.5rem;
--shadow-light: 0px 2px 8px rgba(0, 0, 0, 0.3), 0px 1px 4px rgba(0, 0, 0, 0.2);
--shadow-dark: 0px 2px 8px rgba(0, 0, 0, 0.5), 0px 1px 4px rgba(0, 0, 0, 0.2);
/* Semantic tokens: contextual usage */ /* Semantic tokens: contextual usage */
--color-background: light-dark(var(--color-neutral-100), var(--color-neutral-900)); --color-background: light-dark(var(--color-neutral-100), var(--color-neutral-900));
@@ -149,29 +165,30 @@
--color-text-primary: light-dark(var(--color-neutral-900), var(--color-neutral-100)); --color-text-primary: light-dark(var(--color-neutral-900), var(--color-neutral-100));
--color-text-secondary: light-dark(var(--color-neutral-700), var(--color-neutral-400)); --color-text-secondary: light-dark(var(--color-neutral-700), var(--color-neutral-400));
--color-text-primary-inverted: light-dark(var(--color-neutral-100), var(--color-neutral-900));
--color-text-secondary-inverted: light-dark(var(--color-neutral-400), var(--color-neutral-700));
--color-primary-button: var(--color-orange-red-500); --color-button-primary: var(--color-orange-red-500);
--color-primary-button-hover: var(--color-orange-500); --color-button-primary-hover: var(--color-orange-500);
--color-primary-button-active: var(--color-orange-red-600); --color-button-primary-active: var(--color-orange-red-600);
--color-menu-button: none; --color-button-secondary: light-dark(var(--color-neutral-200), var(--color-neutral-700));
--color-menu-button-hover: light-dark(var(--color-neutral-400), var(--color-neutral-600)); --color-button-secondary-hover: light-dark(var(--color-neutral-100), var(--color-neutral-600));
--color-button-secondary-active: light-dark(var(--color-neutral-300), var(--color-neutral-800));
--color-text-button: var(--color-neutral-900); --color-text-button-primary: var(--color-neutral-900);
--color-text-button-hover: var(--color-neutral-100); --color-text-button-primary-hover: var(--color-neutral-100);
--color-text-button-primary-active: var(--color-neutral-900);
--color-menu-text-button: light-dark(var(--color-neutral-800), var(--color-neutral-200)); --color-text-button-secondary: light-dark(var(--color-neutral-800), var(--color-neutral-200));
--color-menu-text-button-hover: light-dark(var(--color-neutral-900), var(--color-neutral-100)); --color-text-button-seconary-hover: light-dark(var(--color-neutral-900), var(--color-neutral-100));
--color-text-button-seconary-active: light-dark(var(--color-neutral-900), var(--color-neutral-100));
--shadow-box: var(--shadow-light); --shadow-box: var(--shadow-light);
--shadow-button: inset 0px 1px 2px rgba(0, 0, 0, 0.16), inset 0px -1px 4px rgba(0, 0, 0, 0.28), var(--shadow-box); --shadow-button: inset 0px 1px 2px rgba(0, 0, 0, 0.16), inset 0px -1px 4px rgba(0, 0, 0, 0.28), var(--shadow-box);
--shadow-button-active: inset 0px -1px 2px rgba(0, 0, 0, 0.16), inset 0px 1px 4px rgba(0, 0, 0, 0.28), var(--shadow-box); --shadow-button-active: inset 0px -1px 2px rgba(0, 0, 0, 0.16), inset 0px 1px 4px rgba(0, 0, 0, 0.28), var(--shadow-box);
--border: #d8d8d8;
--overlay: rgb(12 12 12 / 0.24);
--panel: rgb(255 255 255 / 0.76);
} }
*, *,
@@ -183,14 +200,19 @@
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
} }
html,
body {
margin: 0;
background: var(--color-background);
scroll-padding-top: 8rem; /* https://tetralogical.com/blog/2023/06/08/focus-in-view/ */
}
html { html {
scroll-behavior: smooth; scroll-behavior: smooth;
} }
body { body {
margin: 0; color: var(--color-text-primary);
background: var(--color-background);
color: var(--color-text);
font-family: "MD UI", Helvetica, sans; font-family: "MD UI", Helvetica, sans;
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
@@ -209,9 +231,7 @@ h3,
h4, h4,
h5, h5,
h6, h6,
p, p {
li {
scroll-margin-top: 80px;
width: clamp(min(100%, 40ch), 50ch, min(100%, 60ch)); width: clamp(min(100%, 40ch), 50ch, min(100%, 60ch));
} }
@@ -300,27 +320,27 @@ h1, h2, h3, h4, h5, h6 {
} }
h1, .size-h1 { h1, .size-h1 {
font-size: var(--text-h1); font-size: round(down, var(--text-h1), var(--round-interval));
} }
h2, .size-h2 { h2, .size-h2 {
font-size: var(--text-h2); font-size: round(down, var(--text-h2), var(--round-interval));
} }
h3, .size-h3 { h3, .size-h3 {
font-size: var(--text-h3); font-size: round(down, var(--text-h3), var(--round-interval));
} }
h4, .size-h4 { h4, .size-h4 {
font-size: var(--text-h4); font-size: round(down, var(--text-h4), var(--round-interval));
} }
h5, .size-h5 { h5, .size-h5 {
font-size: var(--text-h5); font-size: round(down, var(--text-h5), var(--round-interval));
} }
h6, .size-h6 { h6, .size-h6 {
font-size: var(--text-h6); font-size: round(down, var(--text-h6), var(--round-interval));
} }
p, ul, ol, li { p, ul, ol, li {
@@ -328,7 +348,7 @@ p, ul, ol, li {
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
font-feature-settings: "ss01" 1, "ss02" 1; font-feature-settings: "ss01" 1, "ss02" 1;
font-size: var(--text-body); font-size: round(down, var(--text-body), var(--round-interval));
line-height: var(--line-relaxed); line-height: var(--line-relaxed);
margin: var(--spacing-3) 0 var(--spacing-6) 0; margin: var(--spacing-3) 0 var(--spacing-6) 0;
text-align: left; text-align: left;
@@ -347,12 +367,12 @@ a:hover {
text-decoration-thickness: 0.175rem; text-decoration-thickness: 0.175rem;
} }
a:visited { /* a:visited {
color: var(--color-primary); color: var(--color-primary);
text-decoration-thickness: 0.175rem; text-decoration-thickness: 0.175rem;
} } */
button, .link-button, .menu-button, .logo { button, .button-primary, .button-secondary, .menu-button, .logo {
appearance: none; appearance: none;
-webkit-appearance: none; -webkit-appearance: none;
display: inline-flex; display: inline-flex;
@@ -365,32 +385,34 @@ button, .link-button, .menu-button, .logo {
line-height: var(--line-normal); line-height: var(--line-normal);
letter-spacing: 0.025rem; letter-spacing: 0.025rem;
padding: 0.875rem 1rem; padding: 0.875rem 1rem;
font-size: var(--text-button); font-size: round(down, var(--text-button), var(--round-interval));
border: none; border: none;
border-radius: var(--radius-xxl); border-radius: var(--radius-xxl);
text-decoration: none; text-decoration: none;
transition: transform 0.2s ease;
cursor: pointer;
} }
button, .link-button, .logo, .desktop-nav a[aria-current="page"], button, .button-primary, .logo {
.mobile-menu a[aria-current="page"] { background: var(--color-button-primary);
background: var(--color-primary-button); color: var(--color-text-button-primary);
color: var(--color-text-button);
box-shadow: var(--shadow-button); box-shadow: var(--shadow-button);
} }
.menu-button { .button-secondary {
background: var(--color-menu-button); background: var(--color-button-secondary);
color: var(--color-menu-text-button); color: var(--color-text-button-secondary);
box-shadow: var(--shadow-button);
} }
.logo { .logo, .button-secondary {
padding: 1rem; padding: 1rem;
aspect-ratio: 1/1; aspect-ratio: 1/1;
} }
.logo svg { .logo svg {
height: 1.75em; height: 2em;
width: 1.75em; width: 2em;
flex: none; flex: none;
display: block; display: block;
} }
@@ -399,28 +421,52 @@ button, .link-button, .logo, .desktop-nav a[aria-current="page"],
fill: currentColor; fill: currentColor;
} }
button:hover, .link-button:hover, .logo:hover, .desktop-nav a[aria-current="page"]:hover, .mobile-menu a[aria-current="page"]:hover { @media (hover: hover) {
background: var(--color-primary-button-hover); button:hover, .button-primary:hover, .button-secondary:hover, .logo:hover {
color: var(--color-text-button); text-decoration: none;
transform: scale(1.04);
} }
.menu-button:hover { button:hover, .button-primary:hover, .logo:hover {
background: var(--color-menu-button-hover); background: var(--color-button-primary-hover);
color: var(--color-menu-text-button-hover); color: var(--color-text-button-primary);
} }
button:active, .link-button:active, .logo:active, .desktop-nav a[aria-current="page"]:active, .mobile-menu a[aria-current="page"]:active { .button-secondary:hover {
background: var(--color-primary-button-active); background: var(--color-button-secondary-hover);
color: var(--color-text-button-secondary-hover);
}
}
button:active, .button-primary:active, .button-secondary:active, .logo:active {
box-shadow: var(--shadow-button-active); box-shadow: var(--shadow-button-active);
color: var(--color-text-button-active); text-decoration: none;
transform: scale(1.00);
} }
button:visited, .link-button:visited, .logo:visited, .desktop-nav a[aria-current="page"]:hover, .mobile-menu a[aria-current="page"]:hover { button:active, .button-primary:active, .logo:active {
color: var(--color-text-button); background: var(--color-button-primary-active);
color: var(--color-text-button-primary-active);
}
.button-secondary:active {
background: var(--color-button-secondary-active);
color: var(--color-text-button-secondary-active);
}
/* button:visited, .button-primary:visited, .logo:visited {
background: var(--color-button-primary);
color: var(--color-text-button-primary);
text-decoration: none; text-decoration: none;
} }
.link-button span { .button-secondary:visited {
background: var(--color-button-secondary);
color: var(--color-text-button-secondary);
text-decoration: none;
} */
.button-primary span {
margin-right: 0.3em; margin-right: 0.3em;
} }
@@ -428,19 +474,7 @@ button:visited, .link-button:visited, .logo:visited, .desktop-nav a[aria-current
Layout styles Layout styles
======================= */ ======================= */
#skipLink a { /* Site header */
display: block;
position: absolute;
left: -999px;
top: -999px;
}
#skipLink a:focus {
left: 0;
top: 0;
padding: var(--spacing-2);
background: var(--color-background-content-box);
}
.site-header { .site-header {
display: flex; display: flex;
@@ -448,126 +482,144 @@ button:visited, .link-button:visited, .logo:visited, .desktop-nav a[aria-current
justify-content: center; justify-content: center;
position: sticky; position: sticky;
top: 0; top: 0;
z-index: 100; padding-top: max(1px, env(safe-area-inset-top));
} z-index: 400;
background-image: linear-gradient(
.site-header .menu-bar { 180deg,
width: 900px; light-dark(var(--gradient-stop-1-light), var(--gradient-stop-1-dark)) 0%,
padding: var(--spacing-5) var(--spacing-6) 0 var(--spacing-5); 6%,
display: flex; light-dark(var(--gradient-stop-2-light), var(--gradient-stop-2-dark)) 12%,
align-items: center; 44%,
justify-content: space-between; light-dark(var(--gradient-stop-3-light), var(--gradient-stop-3-dark)) 60%,
gap: 1rem; 76%,
/* background: rgb(255 255 255 / 0.88); light-dark(var(--gradient-stop-4-light), var(--gradient-stop-4-dark)) 100%
backdrop-filter: blur(10px); );
/* background: rgb(255 255 255 / 0.88); */
/* backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px); */ -webkit-backdrop-filter: blur(10px); */
} }
.menu-bar .menu-left { .menu-bar {
width: 900px;
padding: var(--spacing-5) var(--spacing-6) var(--spacing-4) var(--spacing-6);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: space-between;
gap: 1rem; gap: var(--spacing-4);
min-height: 44px;
} }
/* .desktop-nav { .menu-left, .menu-right {
height: 100%; display: flex;
align-self: stretch; align-items: stretch;
} */ gap: var(--spacing-4);
}
.desktop-nav { .desktop-nav {
flex: 1; flex: 1 1 auto;
background: light-dark(var(--color-neutral-200), var(--color-neutral-800)); display: flex;
align-self: stretch;
background: var(--color-button-secondary);
border-radius: var(--radius-xxl); border-radius: var(--radius-xxl);
box-shadow: var(--shadow-button); box-shadow: var(--shadow-button);
padding: var(--spacing-2);
height: 100%;
}
.desktop-nav ul,
.mobile-menu ul {
list-style: none;
margin: 0;
padding: 0;
} }
.desktop-nav ul { .desktop-nav ul {
display: flex; display: flex;
align-items: stretch;
width: 100%;
margin: 0;
padding: var(--spacing-2);
list-style: none;
gap: var(--spacing-2); gap: var(--spacing-2);
} }
/* .desktop-nav ul li { .desktop-nav li {
flex: 1 1 0;
display: flex;
align-items: stretch;
margin: 0; margin: 0;
} */ padding: 0;
list-style: none;
.desktop-nav a[aria-current="page"],
.mobile-menu a[aria-current="page"] {
} }
.menu-toggle, .desktop-nav .menu-button {
.menu-close { flex: 1 1 auto;
width: 44px; display: flex;
height: 44px; align-items: center;
border: 1px solid var(--border); justify-content: center;
border-radius: 0.75rem; width: 100%;
background: #fff; white-space: nowrap;
color: inherit; }
cursor: pointer;
.menu-button {
background: none;
color: var(--color-text-button-secondary);
transition: transform 0.2s ease;
}
.menu-button:hover,
.desktop-nav a[aria-current="page"]:hover,
.mobile-menu a[aria-current="page"]:hover {
background: var(--color-button-secondary-hover);
color: var(--color-text-button-seconary-hover);
text-decoration: none;
transform: scale(1.03);
}
.menu-button:active,
.desktop-nav a[aria-current="page"]:active,
.mobile-menu a[aria-current="page"]:active,
.desktop-nav a[aria-current="page"],
.mobile-menu a[aria-current="page"] {
background: light-dark(var(--color-neutral-400), var(--color-neutral-800));
color: var(--color-text-button-seconary-active);
}
.menu-button:active,
.desktop-nav a[aria-current="page"]:active,
.mobile-menu a[aria-current="page"]:active {
text-decoration: none;
}
.desktop-nav-secondary ul {
display: flex;
align-items: stretch;
gap: var(--spacing-4);
margin: 0;
padding: 0;
list-style: none;
}
.desktop-nav-secondary li {
display: flex;
margin: 0;
padding: 0;
}
.desktop-nav-secondary svg {
color: currentcolor;
height: 1em;
width: 1em;
flex: none;
display: block;
} }
.menu-toggle { .menu-toggle {
display: none;
position: relative; position: relative;
} display: none;
align-items: center;
.menu-toggle span { justify-content: center;
position: absolute; justify-self: end;
left: 50%; align-self: stretch;
width: 20px;
height: 2px;
background: currentColor;
border-radius: 999px;
transform-origin: center;
transition: transform 0.25s ease, opacity 0.25s ease; transition: transform 0.25s ease, opacity 0.25s ease;
} }
.menu-toggle span:nth-child(1) {
top: 14px;
transform: translateX(-50%);
}
.menu-toggle span:nth-child(2) {
top: 21px;
transform: translateX(-50%);
}
.menu-toggle span:nth-child(3) {
top: 28px;
transform: translateX(-50%);
}
.menu-toggle.is-open span:nth-child(1) {
top: 21px;
transform: translateX(-50%) rotate(45deg);
}
.menu-toggle.is-open span:nth-child(2) {
opacity: 0;
}
.menu-toggle.is-open span:nth-child(3) {
top: 21px;
transform: translateX(-50%) rotate(-45deg);
}
.menu-overlay { .menu-overlay {
position: fixed; position: fixed;
inset: 0; inset: 0;
background: var(--overlay); background: light-dark(rgb(247 247 247 / 0.4), rgb(18 18 18 / 0.4));
backdrop-filter: blur(10px); backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(8px);
opacity: 0; opacity: 0;
pointer-events: none; pointer-events: none;
transition: opacity 0.25s ease; transition: opacity 0.25s ease;
@@ -576,17 +628,18 @@ button:visited, .link-button:visited, .logo:visited, .desktop-nav a[aria-current
.mobile-menu { .mobile-menu {
position: fixed; position: fixed;
inset: auto 1rem 1rem 1rem; top: 7rem;
right: var(--spacing-5);
left: var(--spacing-5);
width: auto; width: auto;
max-width: 24rem; max-width: none;
margin-inline: auto; max-height: calc(100dvh - 7.5rem);
background: var(--panel); overflow-y: auto;
backdrop-filter: blur(16px); margin-inline: 0;
-webkit-backdrop-filter: blur(16px); background: var(--color-button-secondary);
border: 1px solid rgb(255 255 255 / 0.45); border-radius: calc(36px + var(--spacing-2));
border-radius: 1rem; box-shadow: var(--shadow-button);
box-shadow: 0 20px 50px rgb(0 0 0 / 0.16); padding: 0;
padding: 1rem;
opacity: 0; opacity: 0;
transform: translateY(1rem) scale(0.98); transform: translateY(1rem) scale(0.98);
pointer-events: none; pointer-events: none;
@@ -594,23 +647,28 @@ button:visited, .link-button:visited, .logo:visited, .desktop-nav a[aria-current
z-index: 300; z-index: 300;
} }
.mobile-menu__header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 1rem;
}
.mobile-menu ul { .mobile-menu ul {
display: grid; display: grid;
gap: 0.5rem; width: 100%;
margin: 0;
padding: var(--spacing-2);
list-style: none;
gap: var(--spacing-2);
}
.mobile-menu li {
margin: 0;
padding: 0;
list-style: none;
} }
.mobile-menu a { .mobile-menu a {
display: block; display: flex;
padding: 0.95rem 1rem; align-items: center;
border-radius: 0.75rem; justify-content: center;
background: rgb(255 255 255 / 0.56); text-align: center;
min-height: 72px;
border-radius: 36px;
} }
/* .page-content { /* .page-content {
@@ -628,32 +686,15 @@ button:visited, .link-button:visited, .logo:visited, .desktop-nav a[aria-current
pointer-events: auto; pointer-events: auto;
} }
@media (max-width: 579px) {
.desktop-nav {
display: none;
}
.menu-toggle {
display: inline-block;
}
}
@media (min-width: 580px) {
.menu-overlay,
.mobile-menu {
display: none;
}
}
/* Maint content */
main, footer { main, footer {
max-width: 900px; max-width: 900px;
border: none; border: none;
margin-left:auto; margin-left:auto;
margin-right:auto; margin-right:auto;
padding: var(--spacing-4) var(--spacing-6); padding: 0 var(--spacing-6) var(--spacing-4) var(--spacing-6);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
@@ -676,7 +717,7 @@ footer {
font-family: "MD IO", monospace; font-family: "MD IO", monospace;
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
font-size: var(--text-small); font-size: round(down, var(--text-small), var(--round-interval));
line-height: var(--line-relaxed); line-height: var(--line-relaxed);
color: var(--color-text-secondary); color: var(--color-text-secondary);
} }
@@ -793,6 +834,8 @@ footer a:visited {
color: var(--color-neutral-900); color: var(--color-neutral-900);
} }
/* Footer */
.footer-content { .footer-content {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@@ -805,40 +848,28 @@ footer a:visited {
column-gap: var(--spacing-4); column-gap: var(--spacing-4);
} }
/* .footer-fade {
position: fixed;
left: 0;
right: 0;
bottom: 0;
height: 320px;
background: linear-gradient(
to bottom,
hsla(0, 0%, 6%, 0) 0%,
hsla(0, 0%, 6%, 0.1) 13.6%,
hsla(0, 0%, 6%, 0.199) 24.8%,
hsla(0, 0%, 6%, 0.296) 33.8%,
hsla(0, 0%, 6%, 0.391) 41%,
hsla(0, 0%, 6%, 0.481) 46.8%,
hsla(0, 0%, 6%, 0.568) 51.5%,
hsla(0, 0%, 6%, 0.649) 55.4%,
hsla(0, 0%, 6%, 0.724) 58.8%,
hsla(0, 0%, 6%, 0.792) 62.2%,
hsla(0, 0%, 6%, 0.852) 65.9%,
hsla(0, 0%, 6%, 0.903) 70.1%,
hsla(0, 0%, 6%, 0.944) 75.3%,
hsla(0, 0%, 6%, 0.975) 81.8%,
hsla(0, 0%, 6%, 0.993) 89.9%,
hsl(0, 0%, 6%) 100%
);
pointer-events: none;
z-index: 10;
} */
/* ======================= /* =======================
Helper classes Helper classes
======================= */ ======================= */
/*
* Adding skipLink styling for screen readers
*/
#skipLink a {
display: block;
position: absolute;
left: -999px;
top: -999px;
}
#skipLink a:focus {
left: 0;
top: 0;
padding: var(--spacing-2);
background: var(--color-background-content-box);
}
/* /*
* Hide visually and from screen readers * Hide visually and from screen readers
*/ */
@@ -923,8 +954,12 @@ footer a:visited {
} }
@media screen and (max-width:768px) { @media screen and (max-width:768px) {
.menu-bar {
padding: var(--spacing-5) var(--spacing-5) var(--spacing-4) var(--spacing-5);
}
main { main {
padding: var(--spacing-4) var(--spacing-5); padding: 0 var(--spacing-5) var(--spacing-4) var(--spacing-5);
} }
.footer-content { .footer-content {
flex-direction: column; flex-direction: column;
@@ -935,14 +970,51 @@ footer a:visited {
} }
} }
@media (max-width: 579px) {
.desktop-nav {
display: none;
}
.menu-toggle {
display: inline-flex;
justify-self: end;
min-height: 52px;
}
.menu-bar {
display: grid;
grid-template-columns: 1fr auto 1fr;
align-items: center;
}
.menu-left {
justify-self: start;
}
.menu-right {
display: contents;
}
.desktop-nav-secondary {
justify-self: center;
}
.desktop-nav-secondary ul {
justify-content: center;
}
}
@media (min-width: 580px) {
.menu-overlay,
.mobile-menu {
display: none;
}
}
@media screen and (max-width:440px) { @media screen and (max-width:440px) {
/* .footer-fixed { .menu-bar {
position: unset; padding: var(--spacing-4) var(--spacing-5) var(--spacing-4) var(--spacing-5);
left: unset; }
right: unset;
bottom: unset;
z-index: unset;
} */
.footer-links { .footer-links {
flex-direction: column; flex-direction: column;
row-gap: var(--spacing-4); row-gap: var(--spacing-4);
@@ -954,7 +1026,23 @@ footer a:visited {
@media screen and (max-width:375px) { @media screen and (max-width:375px) {
main { main {
padding: var(--spacing-4); padding: 0 var(--spacing-4) var(--spacing-4) var(--spacing-4);
}
.menu-bar {
padding: var(--spacing-4);
}
.menu-left, .menu-right {
gap: var(--spacing-3);
}
.desktop-nav-secondary ul {
gap: var(--spacing-3);
}
.menu-bar {
gap: var(--spacing-3);
}
.mobile-menu {
right: var(--spacing-4);
left: var(--spacing-4);
} }
} }
+28 -17
View File
@@ -3,9 +3,10 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Lars Winter</title> <title>Lars Winter</title>
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/a11y.css" id="a11y-css" disabled>
<meta name="description" content="Creator of visual identities and digital interfaces"> <meta name="description" content="Creator of visual identities and digital interfaces">
<meta property="og:title" content="Lars Winter"> <meta property="og:title" content="Lars Winter">
@@ -20,7 +21,10 @@
<link rel="apple-touch-icon" href="img/lw.png"> <link rel="apple-touch-icon" href="img/lw.png">
<meta name="theme-color" content="#F7F7F7" media="(prefers-color-scheme: light)"> <meta name="theme-color" content="#F7F7F7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="0f0f0f" media="(prefers-color-scheme: dark)"> <meta name="theme-color" content="#0f0f0f" media="(prefers-color-scheme: dark)">
<script src="js/app.js" defer></script>
</head> </head>
<body> <body>
@@ -33,17 +37,31 @@
<div class="menu-bar"> <div class="menu-bar">
<div class="menu-left"> <div class="menu-left">
<a class="logo" href="/"> <a class="logo" href="/">
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewBox="0 0 1080 1080"><path d="M1000.022 50H499.59c-20.565 0-34.827 20.502-27.676 39.783l146.561 395.171c8.419 22.699 40.635 22.382 48.605-.478l61.821-177.315c6.903-19.8 34.906-19.8 41.809 0l61.821 177.315c7.97 22.861 40.187 23.178 48.605.478l146.561-395.171c7.151-19.281-7.112-39.783-27.676-39.783Z"/><path d="M360 538V106c0-30.928-25.072-56-56-56H106c-30.928 0-56 25.072-56 56v868c0 30.928 25.072 56 56 56h868c30.928 0 56-25.072 56-56V650c0-30.928-25.072-56-56-56H416c-30.928 0-56-25.072-56-56"/></svg> <svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" aria-hidden="true" focusable="false" viewBox="0 0 1080 1080"><path d="M1000.022 50H499.59c-20.565 0-34.827 20.502-27.676 39.783l146.561 395.171c8.419 22.699 40.635 22.382 48.605-.478l61.821-177.315c6.903-19.8 34.906-19.8 41.809 0l61.821 177.315c7.97 22.861 40.187 23.178 48.605.478l146.561-395.171c7.151-19.281-7.112-39.783-27.676-39.783Z"/><path d="M360 538V106c0-30.928-25.072-56-56-56H106c-30.928 0-56 25.072-56 56v868c0 30.928 25.072 56 56 56h868c30.928 0 56-25.072 56-56V650c0-30.928-25.072-56-56-56H416c-30.928 0-56-25.072-56-56"/></svg>
<span class="visually-hidden">Home page</span>
</a> </a>
<nav class="desktop-nav" aria-label="Primary navigation"> <nav class="desktop-nav" aria-label="Primary navigation">
<ul> <ul>
<li><a href="/" class="menu-button" aria-current="page">Work</a></li> <li><a href="/" class="menu-button" aria-current="page">Work</a></li>
<li><a href="/legal-notice.html" class="menu-button">About</a></li> <li><a href="/about.html" class="menu-button">About</a></li>
<li><a href="/privacy.html" class="menu-button">Blog</a></li> <li><a href="/privacy.html" class="menu-button">Blog</a></li>
</ul> </ul>
</nav> </nav>
</div> </div>
<div class="menu-right">
<nav class="desktop-nav-secondary" aria-label="Secondary navigation">
<ul>
<li><button type="button" id="a11y-toggle" aria-pressed="false" class="button-secondary">
<svg aria-hidden="true" focusable="false" viewBox="0 0 24 24">
<path fill="currentColor" d="M21 10h-6v12h-2v-6h-2v6H9V10H3V8h18zm-9-8a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5"/>
</svg><span class="visually-hidden">Make the website more visually accessible</span></button></li>
<li><button type="button" id="theme-toggle" class="button-secondary"><svg aria-hidden="true" focusable="false" viewBox="0 0 24 24">
<path fill="currentColor" fill-rule="evenodd" d="M5.302 4.574a9.96 9.96 0 0 1 6.697-2.57L12 2l.134.002a10.1 10.1 0 0 1 3.015.507l.223.076q.12.043.24.091.102.038.203.08.117.047.232.1.107.045.213.095.105.05.21.104.116.056.23.117l.153.084q.135.074.27.154.105.064.21.132.091.056.183.115.131.088.261.182l.154.109.21.162q.092.071.185.146l.123.105q.32.268.622.568l.355.373q.51.565.917 1.182l.06.095q.104.16.202.323l.082.145q.076.134.15.27l.085.166q.067.13.13.264.042.09.081.182.063.138.122.279l.049.127q.063.16.12.32.027.075.05.15.051.145.096.292l.058.206a10 10 0 0 1 .173.716l.037.201.044.254a10 10 0 0 1 .081.695 10.3 10.3 0 0 1-.084 2.374 10 10 0 0 1-.13.678 10 10 0 0 1-.184.694 10 10 0 0 1-.148.448q-.046.13-.098.26l-.075.192-.1.233q-.046.106-.095.213l-.104.21-.117.229-.095.171q-.07.127-.143.252-.065.106-.132.21-.058.096-.12.19-.087.128-.178.255l-.108.154q-.08.105-.163.209-.071.094-.145.186l-.105.123a10 10 0 0 1-.94.976q-.375.337-.773.63l-.098.07q-.147.105-.295.205l-.148.095q-.128.083-.258.162l-.163.093q-.127.075-.257.143-.087.046-.175.09-.12.062-.242.12-.102.048-.205.094-.117.052-.236.102l-.175.072a10 10 0 0 1-1.147.372q-.108.03-.218.056a10 10 0 0 1-.293.064l-.146.03a10 10 0 0 1-.294.05l-.187.029q-.135.018-.27.032l-.189.022q-.157.013-.316.022l-.15.01a9.97 9.97 0 0 1-7.162-2.563l-.373-.355c-3.905-3.905-3.905-10.237 0-14.142zm1.041 1.77A8 8 0 0 0 12 20V4a7.98 7.98 0 0 0-5.657 2.343"/>
</svg><span class="visually-hidden">Change light/dark mode</span></button></li>
</ul>
</nav>
<button <button
class="menu-toggle" class="menu-toggle"
@@ -54,10 +72,9 @@
aria-haspopup="true" aria-haspopup="true"
aria-label="Open menu" aria-label="Open menu"
> >
<span></span> <span class="menu-toggle__label">Menu</span>
<span></span>
<span></span>
</button> </button>
</div>
</div> </div>
</header> </header>
@@ -69,18 +86,12 @@
aria-label="Mobile navigation" aria-label="Mobile navigation"
aria-hidden="true" aria-hidden="true"
> >
<div class="mobile-menu__header">
<strong>Menu</strong>
<button class="menu-close" id="menuClose" type="button" aria-label="Close menu">
</button>
</div>
<nav aria-label="Mobile navigation"> <nav aria-label="Mobile navigation">
<ul> <ul>
<li><a href="/" class="link-button" aria-current="page">Work</a></li> <li><a href="/" class="menu-button" aria-current="page">Work</a></li>
<li><a href="/legal-notice.html" class="link-button">About</a></li> <li><a href="/legal-notice.html" class="menu-button">About</a></li>
<li><a href="/privacy.html" class="link-button">Blog</a></li> <li><a href="/privacy.html" class="menu-button">Blog</a></li>
</ul> </ul>
</nav> </nav>
</aside> </aside>
@@ -131,7 +142,7 @@
<!-- Add your site or application content here --> <!-- Add your site or application content here -->
<script src="js/app.js"></script> <!-- <script src="js/app.js" defer></script> -->
</body> </body>
+108 -5
View File
@@ -1,6 +1,8 @@
// Menu system
const body = document.body; const body = document.body;
const menuToggle = document.getElementById('menuToggle'); const menuToggle = document.getElementById('menuToggle');
const menuClose = document.getElementById('menuClose'); const menuToggleLabel = menuToggle?.querySelector('.menu-toggle__label');
const menuOverlay = document.getElementById('menuOverlay'); const menuOverlay = document.getElementById('menuOverlay');
const mobileMenu = document.getElementById('mobileMenu'); const mobileMenu = document.getElementById('mobileMenu');
const siteContent = document.getElementById('siteContent'); const siteContent = document.getElementById('siteContent');
@@ -11,9 +13,10 @@
menuToggle.classList.add('is-open'); menuToggle.classList.add('is-open');
menuToggle.setAttribute('aria-expanded', 'true'); menuToggle.setAttribute('aria-expanded', 'true');
menuToggle.setAttribute('aria-label', 'Close menu'); menuToggle.setAttribute('aria-label', 'Close menu');
if (menuToggleLabel) menuToggleLabel.textContent = 'Close';
mobileMenu.setAttribute('aria-hidden', 'false'); mobileMenu.setAttribute('aria-hidden', 'false');
siteContent.setAttribute('inert', ''); siteContent.setAttribute('inert', '');
menuClose.focus(); menuToggle.focus({ preventScroll: true });
} }
function closeMenu() { function closeMenu() {
@@ -21,9 +24,10 @@
menuToggle.classList.remove('is-open'); menuToggle.classList.remove('is-open');
menuToggle.setAttribute('aria-expanded', 'false'); menuToggle.setAttribute('aria-expanded', 'false');
menuToggle.setAttribute('aria-label', 'Open menu'); menuToggle.setAttribute('aria-label', 'Open menu');
if (menuToggleLabel) menuToggleLabel.textContent = 'Menu';
mobileMenu.setAttribute('aria-hidden', 'true'); mobileMenu.setAttribute('aria-hidden', 'true');
siteContent.removeAttribute('inert'); siteContent.removeAttribute('inert');
menuToggle.focus(); menuToggle.focus({ preventScroll: true });
window.setTimeout(() => { window.setTimeout(() => {
if (!body.classList.contains('menu-open')) { if (!body.classList.contains('menu-open')) {
@@ -41,7 +45,6 @@
} }
menuToggle.addEventListener('click', toggleMenu); menuToggle.addEventListener('click', toggleMenu);
menuClose.addEventListener('click', closeMenu);
menuOverlay.addEventListener('click', closeMenu); menuOverlay.addEventListener('click', closeMenu);
document.addEventListener('keydown', (event) => { document.addEventListener('keydown', (event) => {
@@ -54,4 +57,104 @@
if (window.innerWidth >= 768 && body.classList.contains('menu-open')) { if (window.innerWidth >= 768 && body.classList.contains('menu-open')) {
closeMenu(); closeMenu();
} }
}); });
// accessibility toggle
{
const STORAGE_KEY = 'extra-css-enabled';
function applyOverrideState(enabled) {
const link = document.getElementById('a11y-css');
const button = document.getElementById('a11y-toggle');
if (!link) return;
link.disabled = !enabled;
button?.setAttribute('aria-pressed', String(enabled));
}
const enabled = localStorage.getItem(STORAGE_KEY) === 'true';
applyOverrideState(enabled);
document.getElementById('a11y-toggle')?.addEventListener('click', () => {
const nextState = localStorage.getItem(STORAGE_KEY) !== 'true';
localStorage.setItem(STORAGE_KEY, String(nextState));
applyOverrideState(nextState);
});
}
// light-dark toggle
{
const STORAGE_KEY = 'theme-preference';
const root = document.documentElement;
const mq = window.matchMedia('(prefers-color-scheme: dark)');
function getSystemTheme() {
return mq.matches ? 'dark' : 'light';
}
function getSavedTheme() {
try {
return localStorage.getItem(STORAGE_KEY) || 'system';
} catch {
return 'system';
}
}
function setSavedTheme(value) {
try {
localStorage.setItem(STORAGE_KEY, value);
} catch {}
}
function applyTheme(theme = getSavedTheme()) {
root.style.colorScheme = theme === 'system' ? 'light dark' : theme;
}
function getNextTheme() {
return getSavedTheme() === 'system'
? (getSystemTheme() === 'dark' ? 'light' : 'dark')
: 'system';
}
function updateButton() {
const btn = document.getElementById('theme-toggle');
if (!btn) return;
const theme = getSavedTheme();
// btn.textContent =
// theme === 'system'
// ? `Use ${getSystemTheme() === 'dark' ? 'light' : 'dark'} theme`
// : 'Use browser/OS theme';
}
function toggleTheme() {
setSavedTheme(getNextTheme());
applyTheme();
updateButton();
}
function initThemeToggle() {
applyTheme();
updateButton();
const btn = document.getElementById('theme-toggle');
if (btn) btn.addEventListener('click', toggleTheme);
mq.addEventListener('change', () => {
if (getSavedTheme() === 'system') {
applyTheme('system');
updateButton();
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initThemeToggle);
} else {
initThemeToggle();
}
}
+79 -9
View File
@@ -3,9 +3,10 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Lars Winter</title> <title>Legal notice Lars Winter</title>
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/a11y.css" id="a11y-css" disabled>
<meta name="description" content="Creator of visual identities and digital interfaces"> <meta name="description" content="Creator of visual identities and digital interfaces">
<meta property="og:title" content="Lars Winter"> <meta property="og:title" content="Lars Winter">
@@ -18,9 +19,12 @@
<link rel="icon" href="img/favicon.ico" sizes="any"> <link rel="icon" href="img/favicon.ico" sizes="any">
<!-- <link rel="icon" href="img/icon.svg" type="image/svg+xml"> --> <!-- <link rel="icon" href="img/icon.svg" type="image/svg+xml"> -->
<link rel="apple-touch-icon" href="img/lw.png"> <link rel="apple-touch-icon" href="img/lw.png">
<meta name="theme-color" content="#F7F7F7" media="(prefers-color-scheme: light)"> <meta name="theme-color" content="#F7F7F7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="0f0f0f" media="(prefers-color-scheme: dark)"> <meta name="theme-color" content="#0f0f0f" media="(prefers-color-scheme: dark)">
<script src="js/app.js" defer></script>
</head> </head>
<body> <body>
@@ -29,14 +33,80 @@
<a href="#siteContent">Skip to content</a> <a href="#siteContent">Skip to content</a>
</div> </div>
<header class="site-header">
<div class="menu-bar">
<div class="menu-left">
<a class="logo" href="/">
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" aria-hidden="true" focusable="false" viewBox="0 0 1080 1080"><path d="M1000.022 50H499.59c-20.565 0-34.827 20.502-27.676 39.783l146.561 395.171c8.419 22.699 40.635 22.382 48.605-.478l61.821-177.315c6.903-19.8 34.906-19.8 41.809 0l61.821 177.315c7.97 22.861 40.187 23.178 48.605.478l146.561-395.171c7.151-19.281-7.112-39.783-27.676-39.783Z"/><path d="M360 538V106c0-30.928-25.072-56-56-56H106c-30.928 0-56 25.072-56 56v868c0 30.928 25.072 56 56 56h868c30.928 0 56-25.072 56-56V650c0-30.928-25.072-56-56-56H416c-30.928 0-56-25.072-56-56"/></svg>
<span class="visually-hidden">Home page</span>
</a>
<nav class="desktop-nav" aria-label="Primary navigation">
<ul>
<li><a href="/" class="menu-button">Work</a></li>
<li><a href="/about.html" class="menu-button">About</a></li>
<li><a href="/privacy.html" class="menu-button">Blog</a></li>
</ul>
</nav>
</div>
<div class="menu-right">
<nav class="desktop-nav-secondary" aria-label="Secondary navigation">
<ul>
<li><button type="button" id="a11y-toggle" aria-pressed="false" class="button-secondary">
<svg aria-hidden="true" focusable="false" viewBox="0 0 24 24">
<path fill="currentColor" d="M21 10h-6v12h-2v-6h-2v6H9V10H3V8h18zm-9-8a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5"/>
</svg><span class="visually-hidden">Make the website more visually accessible</span></button></li>
<li><button type="button" id="theme-toggle" class="button-secondary"><svg aria-hidden="true" focusable="false" viewBox="0 0 24 24">
<path fill="currentColor" fill-rule="evenodd" d="M5.302 4.574a9.96 9.96 0 0 1 6.697-2.57L12 2l.134.002a10.1 10.1 0 0 1 3.015.507l.223.076q.12.043.24.091.102.038.203.08.117.047.232.1.107.045.213.095.105.05.21.104.116.056.23.117l.153.084q.135.074.27.154.105.064.21.132.091.056.183.115.131.088.261.182l.154.109.21.162q.092.071.185.146l.123.105q.32.268.622.568l.355.373q.51.565.917 1.182l.06.095q.104.16.202.323l.082.145q.076.134.15.27l.085.166q.067.13.13.264.042.09.081.182.063.138.122.279l.049.127q.063.16.12.32.027.075.05.15.051.145.096.292l.058.206a10 10 0 0 1 .173.716l.037.201.044.254a10 10 0 0 1 .081.695 10.3 10.3 0 0 1-.084 2.374 10 10 0 0 1-.13.678 10 10 0 0 1-.184.694 10 10 0 0 1-.148.448q-.046.13-.098.26l-.075.192-.1.233q-.046.106-.095.213l-.104.21-.117.229-.095.171q-.07.127-.143.252-.065.106-.132.21-.058.096-.12.19-.087.128-.178.255l-.108.154q-.08.105-.163.209-.071.094-.145.186l-.105.123a10 10 0 0 1-.94.976q-.375.337-.773.63l-.098.07q-.147.105-.295.205l-.148.095q-.128.083-.258.162l-.163.093q-.127.075-.257.143-.087.046-.175.09-.12.062-.242.12-.102.048-.205.094-.117.052-.236.102l-.175.072a10 10 0 0 1-1.147.372q-.108.03-.218.056a10 10 0 0 1-.293.064l-.146.03a10 10 0 0 1-.294.05l-.187.029q-.135.018-.27.032l-.189.022q-.157.013-.316.022l-.15.01a9.97 9.97 0 0 1-7.162-2.563l-.373-.355c-3.905-3.905-3.905-10.237 0-14.142zm1.041 1.77A8 8 0 0 0 12 20V4a7.98 7.98 0 0 0-5.657 2.343"/>
</svg><span class="visually-hidden">Change light/dark mode</span></button></li>
</ul>
</nav>
<button
class="menu-toggle"
id="menuToggle"
type="button"
aria-expanded="false"
aria-controls="mobileMenu"
aria-haspopup="true"
aria-label="Open menu"
>
Menu
</button>
</div>
</div>
</header>
<div class="menu-overlay" id="menuOverlay" hidden></div>
<aside
class="mobile-menu"
id="mobileMenu"
aria-label="Mobile navigation"
aria-hidden="true"
>
<div class="mobile-menu__header">
<strong>Menu</strong>
<button class="menu-close" id="menuClose" type="button" aria-label="Close menu">
Close
</button>
</div>
<nav aria-label="Mobile navigation">
<ul>
<li><a href="/" class="button-primary" aria-current="page">Work</a></li>
<li><a href="/legal-notice.html" class="button-primary">About</a></li>
<li><a href="/privacy.html" class="button-primary">Blog</a></li>
</ul>
</nav>
</aside>
<main> <main>
<section class="align-left"> <section class="align-left">
<a class="link-button" href="/"><span></span>Home</a> <!-- <div class="spacer-xl" aria-hidden="true"></div> -->
<div class="spacer-xl" aria-hidden="true"></div>
<p> <p>
<a href="#en-text">English</a>&#x2006;<a href="#de-text">Deutsch</a> <a href="#en-text">English</a>&#x2006;<a href="#de-text">Deutsch</a>
@@ -116,7 +186,7 @@
</footer> </footer>
<!-- Add your site or application content here --> <!-- Add your site or application content here -->
<script src="js/app.js"></script> <!-- <script src="js/app.js" defer></script> -->
</body> </body>
+78 -7
View File
@@ -3,9 +3,10 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Lars Winter</title> <title>Privacy Lars Winter</title>
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/a11y.css" id="a11y-css" disabled>
<meta name="description" content="Creator of visual identities and digital interfaces"> <meta name="description" content="Creator of visual identities and digital interfaces">
<meta property="og:title" content="Lars Winter"> <meta property="og:title" content="Lars Winter">
@@ -20,7 +21,10 @@
<link rel="apple-touch-icon" href="img/lw.png"> <link rel="apple-touch-icon" href="img/lw.png">
<meta name="theme-color" content="#F7F7F7" media="(prefers-color-scheme: light)"> <meta name="theme-color" content="#F7F7F7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="0f0f0f" media="(prefers-color-scheme: dark)"> <meta name="theme-color" content="#0f0f0f" media="(prefers-color-scheme: dark)">
<script src="js/app.js" defer></script>
</head> </head>
<body> <body>
@@ -28,14 +32,81 @@
<div id="skipLink"> <div id="skipLink">
<a href="#siteContent">Skip to content</a> <a href="#siteContent">Skip to content</a>
</div> </div>
<header class="site-header">
<div class="menu-bar">
<div class="menu-left">
<a class="logo" href="/">
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" aria-hidden="true" focusable="false" viewBox="0 0 1080 1080"><path d="M1000.022 50H499.59c-20.565 0-34.827 20.502-27.676 39.783l146.561 395.171c8.419 22.699 40.635 22.382 48.605-.478l61.821-177.315c6.903-19.8 34.906-19.8 41.809 0l61.821 177.315c7.97 22.861 40.187 23.178 48.605.478l146.561-395.171c7.151-19.281-7.112-39.783-27.676-39.783Z"/><path d="M360 538V106c0-30.928-25.072-56-56-56H106c-30.928 0-56 25.072-56 56v868c0 30.928 25.072 56 56 56h868c30.928 0 56-25.072 56-56V650c0-30.928-25.072-56-56-56H416c-30.928 0-56-25.072-56-56"/></svg>
<span class="visually-hidden">Home page</span>
</a>
<nav class="desktop-nav" aria-label="Primary navigation">
<ul>
<li><a href="/" class="menu-button">Work</a></li>
<li><a href="/about.html" class="menu-button">About</a></li>
<li><a href="/privacy.html" class="menu-button">Blog</a></li>
</ul>
</nav>
</div>
<div class="menu-right">
<nav class="desktop-nav-secondary" aria-label="Secondary navigation">
<ul>
<li><button type="button" id="a11y-toggle" aria-pressed="false" class="button-secondary">
<svg aria-hidden="true" focusable="false" viewBox="0 0 24 24">
<path fill="currentColor" d="M21 10h-6v12h-2v-6h-2v6H9V10H3V8h18zm-9-8a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5"/>
</svg><span class="visually-hidden">Make the website more visually accessible</span></button></li>
<li><button type="button" id="theme-toggle" class="button-secondary"><svg aria-hidden="true" focusable="false" viewBox="0 0 24 24">
<path fill="currentColor" fill-rule="evenodd" d="M5.302 4.574a9.96 9.96 0 0 1 6.697-2.57L12 2l.134.002a10.1 10.1 0 0 1 3.015.507l.223.076q.12.043.24.091.102.038.203.08.117.047.232.1.107.045.213.095.105.05.21.104.116.056.23.117l.153.084q.135.074.27.154.105.064.21.132.091.056.183.115.131.088.261.182l.154.109.21.162q.092.071.185.146l.123.105q.32.268.622.568l.355.373q.51.565.917 1.182l.06.095q.104.16.202.323l.082.145q.076.134.15.27l.085.166q.067.13.13.264.042.09.081.182.063.138.122.279l.049.127q.063.16.12.32.027.075.05.15.051.145.096.292l.058.206a10 10 0 0 1 .173.716l.037.201.044.254a10 10 0 0 1 .081.695 10.3 10.3 0 0 1-.084 2.374 10 10 0 0 1-.13.678 10 10 0 0 1-.184.694 10 10 0 0 1-.148.448q-.046.13-.098.26l-.075.192-.1.233q-.046.106-.095.213l-.104.21-.117.229-.095.171q-.07.127-.143.252-.065.106-.132.21-.058.096-.12.19-.087.128-.178.255l-.108.154q-.08.105-.163.209-.071.094-.145.186l-.105.123a10 10 0 0 1-.94.976q-.375.337-.773.63l-.098.07q-.147.105-.295.205l-.148.095q-.128.083-.258.162l-.163.093q-.127.075-.257.143-.087.046-.175.09-.12.062-.242.12-.102.048-.205.094-.117.052-.236.102l-.175.072a10 10 0 0 1-1.147.372q-.108.03-.218.056a10 10 0 0 1-.293.064l-.146.03a10 10 0 0 1-.294.05l-.187.029q-.135.018-.27.032l-.189.022q-.157.013-.316.022l-.15.01a9.97 9.97 0 0 1-7.162-2.563l-.373-.355c-3.905-3.905-3.905-10.237 0-14.142zm1.041 1.77A8 8 0 0 0 12 20V4a7.98 7.98 0 0 0-5.657 2.343"/>
</svg><span class="visually-hidden">Change light/dark mode</span></button></li>
</ul>
</nav>
<button
class="menu-toggle"
id="menuToggle"
type="button"
aria-expanded="false"
aria-controls="mobileMenu"
aria-haspopup="true"
aria-label="Open menu"
>
Menu
</button>
</div>
</div>
</header>
<div class="menu-overlay" id="menuOverlay" hidden></div>
<aside
class="mobile-menu"
id="mobileMenu"
aria-label="Mobile navigation"
aria-hidden="true"
>
<div class="mobile-menu__header">
<strong>Menu</strong>
<button class="menu-close" id="menuClose" type="button" aria-label="Close menu">
Close
</button>
</div>
<nav aria-label="Mobile navigation">
<ul>
<li><a href="/" class="button-primary" aria-current="page">Work</a></li>
<li><a href="/legal-notice.html" class="button-primary">About</a></li>
<li><a href="/privacy.html" class="button-primary">Blog</a></li>
</ul>
</nav>
</aside>
<main> <main>
<section class="align-left"> <section class="align-left">
<a class="link-button" href="/"><span></span>Home</a> <!-- <div class="spacer-xl" aria-hidden="true"></div> -->
<div class="spacer-xl" aria-hidden="true"></div>
<p> <p>
<a href="#en-text">English</a>&#x2006;<a href="#de-text">Deutsch</a> <a href="#en-text">English</a>&#x2006;<a href="#de-text">Deutsch</a>
@@ -149,7 +220,7 @@
<!-- Add your site or application content here --> <!-- Add your site or application content here -->
<script src="js/app.js"></script> <!-- <script src="js/app.js" defer></script> -->
</body> </body>