141 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			SCSS
		
	
	
	
	
	
		
		
			
		
	
	
			141 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			SCSS
		
	
	
	
	
	
| 
								 | 
							
								* {
							 | 
						||
| 
								 | 
							
									box-sizing: border-box;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:root {
							 | 
						||
| 
								 | 
							
									scroll-behavior: smooth;
							 | 
						||
| 
								 | 
							
									scrollbar-color: var(--accent-color) transparent;
							 | 
						||
| 
								 | 
							
									accent-color: var(--accent-color);
							 | 
						||
| 
								 | 
							
									font-size: 16px;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								body {
							 | 
						||
| 
								 | 
							
									text-wrap: pretty;
							 | 
						||
| 
								 | 
							
									display: grid; // Put footer at the bottom for short pages, such as the 404
							 | 
						||
| 
								 | 
							
									grid-template-rows: auto minmax(auto, 1fr) auto; // Header, stuff, footer
							 | 
						||
| 
								 | 
							
									grid-template-areas:
							 | 
						||
| 
								 | 
							
										"nav"
							 | 
						||
| 
								 | 
							
										"main"
							 | 
						||
| 
								 | 
							
										"footer";
							 | 
						||
| 
								 | 
							
									margin: 0;
							 | 
						||
| 
								 | 
							
									background-color: var(--bg-color);
							 | 
						||
| 
								 | 
							
									min-height: 100vh;
							 | 
						||
| 
								 | 
							
									color: var(--fg-color);
							 | 
						||
| 
								 | 
							
									line-height: 1.5;
							 | 
						||
| 
								 | 
							
									font-family: var(--font-system-ui), var(--font-emoji);
							 | 
						||
| 
								 | 
							
									overflow-wrap: break-word;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									&:has(#sidebar) {
							 | 
						||
| 
								 | 
							
										grid-template-columns: 1fr min(var(--container-width), 90%) 1fr;
							 | 
						||
| 
								 | 
							
										grid-template-areas:
							 | 
						||
| 
								 | 
							
											"nav nav nav"
							 | 
						||
| 
								 | 
							
											"sidebar main ."
							 | 
						||
| 
								 | 
							
											"footer footer footer";
							 | 
						||
| 
								 | 
							
										@media only screen and (max-width: 1200px) {
							 | 
						||
| 
								 | 
							
											grid-template-areas:
							 | 
						||
| 
								 | 
							
											"nav nav nav"
							 | 
						||
| 
								 | 
							
											". sidebar ."
							 | 
						||
| 
								 | 
							
											". main ."
							 | 
						||
| 
								 | 
							
											"footer footer footer";
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Style text selection to use accent color
							 | 
						||
| 
								 | 
							
								::selection {
							 | 
						||
| 
								 | 
							
									background-color: var(--accent-color);
							 | 
						||
| 
								 | 
							
									color: var(--contrast-color);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Make focused anchor not get covered by nav,
							 | 
						||
| 
								 | 
							
								// and flash it with accent color when jumping to it
							 | 
						||
| 
								 | 
							
								:target:not(#main-content) {
							 | 
						||
| 
								 | 
							
									transition:
							 | 
						||
| 
								 | 
							
										all var(--transition),
							 | 
						||
| 
								 | 
							
										scroll-margin-block-start 0s;
							 | 
						||
| 
								 | 
							
									scroll-margin-block-start: 15vh;
							 | 
						||
| 
								 | 
							
									color: var(--accent-color);
							 | 
						||
| 
								 | 
							
									text-shadow: var(--text-shadow-glow);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Custom focus indicator
							 | 
						||
| 
								 | 
							
								:focus-visible {
							 | 
						||
| 
								 | 
							
									animation: focus-in var(--transition);
							 | 
						||
| 
								 | 
							
									outline: 0.125rem solid var(--accent-color);
							 | 
						||
| 
								 | 
							
									outline-offset: 0.125rem;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Fallback for older browsers
							 | 
						||
| 
								 | 
							
								@supports not selector(:focus-visible) {
							 | 
						||
| 
								 | 
							
									:focus {
							 | 
						||
| 
								 | 
							
										animation: focus-in var(--transition);
							 | 
						||
| 
								 | 
							
										outline: 0.125rem solid var(--accent-color);
							 | 
						||
| 
								 | 
							
										outline-offset: 0.125rem;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@keyframes focus-in {
							 | 
						||
| 
								 | 
							
									from {
							 | 
						||
| 
								 | 
							
										outline: 0.5rem solid transparent;
							 | 
						||
| 
								 | 
							
										outline-offset: 0.25rem;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								main {
							 | 
						||
| 
								 | 
							
									margin: 4.25rem auto 4rem;
							 | 
						||
| 
								 | 
							
									width: min(var(--container-width), 90%);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#sidebar {
							 | 
						||
| 
								 | 
							
									display: flex;
							 | 
						||
| 
								 | 
							
									position: sticky;
							 | 
						||
| 
								 | 
							
									top: 0;
							 | 
						||
| 
								 | 
							
									grid-area: sidebar;
							 | 
						||
| 
								 | 
							
									opacity: 0.2;
							 | 
						||
| 
								 | 
							
									transition: var(--transition);
							 | 
						||
| 
								 | 
							
									height: 100vh;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									&:hover {
							 | 
						||
| 
								 | 
							
										opacity: 1;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@media only screen and (max-width: 1200px) {
							 | 
						||
| 
								 | 
							
										position: static;
							 | 
						||
| 
								 | 
							
										opacity: 1;
							 | 
						||
| 
								 | 
							
										margin-block-start: 4.25rem;
							 | 
						||
| 
								 | 
							
										margin-block-end: -4.25rem;
							 | 
						||
| 
								 | 
							
										padding: 0;
							 | 
						||
| 
								 | 
							
										height: auto;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									& > div {
							 | 
						||
| 
								 | 
							
										--mask: linear-gradient(to bottom,
							 | 
						||
| 
								 | 
							
												transparent,
							 | 
						||
| 
								 | 
							
												black 1rem,
							 | 
						||
| 
								 | 
							
												black calc(100% - 1rem),
							 | 
						||
| 
								 | 
							
												transparent);
							 | 
						||
| 
								 | 
							
										-webkit-mask-image: var(--mask);
							 | 
						||
| 
								 | 
							
										mask-image: var(--mask);
							 | 
						||
| 
								 | 
							
										padding: 1rem;
							 | 
						||
| 
								 | 
							
										overflow: auto;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									& + main {
							 | 
						||
| 
								 | 
							
										grid-area: main;
							 | 
						||
| 
								 | 
							
										margin: 0;
							 | 
						||
| 
								 | 
							
										margin-block-start: 4.25rem;
							 | 
						||
| 
								 | 
							
										margin-block-end: 4rem;
							 | 
						||
| 
								 | 
							
										width: auto;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@media (prefers-reduced-motion) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									*,
							 | 
						||
| 
								 | 
							
									*::before,
							 | 
						||
| 
								 | 
							
									*::after {
							 | 
						||
| 
								 | 
							
										animation-duration: 0s !important;
							 | 
						||
| 
								 | 
							
										transition-duration: 0s !important;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |