/*! HTML5 Boilerplate v9.0.1 | MIT License | https://html5boilerplate.com/ */ /* main.css 3.0.0 | MIT License | https://github.com/h5bp/main.css#readme */ @font-face { font-family: "Perfectly Nineties"; font-style: normal; font-weight: 400; font-display: block; src: url("../fonts/PerfectlyNineties-Regular.woff") format("woff"); } @font-face { font-family: "Perfectly Nineties"; font-style: italic; font-weight: 400; font-display: block; src: url("../fonts/PerfectlyNineties-Italic.woff") format("woff"); } @font-face { font-family: "MD UI"; font-style: normal; font-weight: 400; font-display: block; src: url("../fonts/MDUI-Regular.woff2") format("woff"); } @font-face { font-family: "MD UI"; font-style: italic; font-weight: 400; font-display: block; src: url("../fonts/MDUI-Italic.woff2") format("woff"); } @font-face { font-family: "MD IO"; font-style: normal; font-weight: 400; font-display: block; src: url("../fonts/MDIO-Regular.woff2") format("woff"); } @font-face { font-family: "MD IO"; font-style: italic; font-weight: 400; font-display: block; src: url("../fonts/MDIO-Italic.woff2") format("woff"); } /* ======================= Base styles ======================= */ :root { color-scheme: light dark; /* Primitive tokens: raw design values */ --color-neutral-100: #F7F7F7; --color-neutral-200: #D4D4D4; --color-neutral-300: #B4B4B4; --color-neutral-400: #959595; --color-neutral-500: #777777; --color-neutral-600: #5B5B5B; --color-neutral-700: #3D3D3D; --color-neutral-800: #292929; --color-neutral-900: #121212; --color-orange-red-100: #FFE7CC; --color-orange-red-200: #FFC999; --color-orange-red-300: #FFA466; --color-orange-red-400: #FF803F; --color-orange-red-500: #FF4500; --color-orange-red-600: #DB2C00; --color-orange-red-700: #B71800; --color-orange-red-800: #930900; --color-orange-red-900: #7A0000; --color-orange-100: #FFF1CC; --color-orange-200: #FFDE99; --color-orange-300: #FFC766; --color-orange-400: #FFB13F; --color-orange-500: #FF8C00; --color-orange-600: #DB6E00; --color-orange-700: #B75400; --color-orange-800: #933D00; --color-orange-900: #7A2C00; --text-h1: clamp(2.25rem, 1.9rem + 1.1vw, 3rem); --text-h2: clamp(1.875rem, 1.6rem + 0.9vw, 2.5rem); --text-h3: clamp(1.625rem, 1.4rem + 0.7vw, 2rem); --text-h4: clamp(1.375rem, 1.22rem + 0.45vw, 1.75rem); --text-h5: clamp(1.25rem, 1.15rem + 0.25vw, 1.5rem); --text-h6: 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-button: clamp(1.25rem, 1.15rem + 0.25vw, 1.5rem); --line-tight: 1.1; --line-normal: 1.2; --line-relaxed: 1.4; --line-loose: 1.6; --spacing-1: 0.125rem; --spacing-2: 0.25rem; --spacing-3: 0.5rem; --spacing-4: 1rem; --spacing-5: 1.5rem; --spacing-6: 2rem; --spacing-7: 2.5rem; --spacing-8: 3rem; --spacing-9: 3.5rem; --spacing-10: 4rem; --spacing-11: 4.5rem; --spacing-12: 5rem; --border-width-sm: 1px; --border-width-md: 1.5px; --radius-xs: 0.25rem; --radius-sm: 0.5rem; --radius-md: 1rem; --radius-lg: 1.5rem; --radius-xl: 2rem; --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 */ --color-background: light-dark(var(--color-neutral-100), var(--color-neutral-900)); --color-background-content-box: light-dark(var(--color-neutral-200), var(--color-neutral-800)); --color-border-content-box-orange-red: color-mix(in srgb, var(--color-orange-red-800) 50%, transparent); --color-border-content-box-orange: color-mix(in srgb, var(--color-orange-800) 50%, transparent); --color-border-content-box-grey-light: color-mix(in srgb, var(--color-neutral-400) 25%, transparent); --color-border-content-box-grey-dark: color-mix(in srgb, var(--color-neutral-600) 25%, transparent); --color-primary: light-dark(var(--color-orange-red-600), var(--color-orange-red-500)); --color-primary-hover: light-dark(var(--color-orange-red-500), var(--color-orange-500)); --color-primary-active: light-dark(var(--color-orange-red-700), var(--color-orange-red-600)); --color-secondary: light-dark(var(--color-neutral-700), var(--color-neutral-400)); --color-secondary-hover: light-dark(var(--color-neutral-600), var(--color-neutral-300)); --color-secondary-active: light-dark(var(--color-neutral-800), var(--color-neutral-500)); --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-primary-button: var(--color-orange-red-500); --color-primary-button-hover: var(--color-orange-500); --color-primary-button-active: var(--color-orange-red-600); --color-text-button: var(--color-neutral-900); --color-text-button-active: var(--color-neutral-100); --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-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); } *, *::before, *::after { box-sizing: border-box; text-box-trim: trim-both; text-box-edge: cap alphabetic; -webkit-font-smoothing: antialiased; } html { scroll-behavior: smooth; } body { margin: 0; background: var(--color-background); color: var(--color-text); font-family: "MD UI", Helvetica, sans; font-style: normal; font-weight: 400; font-size: 100%; line-height: var(--line-relaxed); letter-spacing: 0.025em; display: flex; flex-direction: column; min-height: 100vh; min-height: 100dvh; /* better on modern mobile browsers */ } h1, h2, h3, h4, h5, h6, p, li { scroll-margin-top: 80px; width: clamp(min(100%, 40ch), 50ch, min(100%, 60ch)); } ::-moz-selection { background: var(--color-orange-red-200); text-shadow: none; } ::selection { background: var(--color-orange-red-200); text-shadow: none; } hr { display: block; height: 1px; border: 0; border-top: var(--border-width-sm) solid var(--color-neutral-500); margin: var(--spacing-4) 0; padding: 0; } /* * Remove the gap between audio, canvas, iframes, * images, videos and the bottom of their containers: * https://github.com/h5bp/html5-boilerplate/issues/440 */ audio, canvas, iframe, img, svg, video { vertical-align: middle; } /* * Remove default fieldset styles. */ fieldset { border: 0; margin: 0; padding: 0; } /* * Allow only vertical resizing of textareas. */ textarea { resize: vertical; } /* ======================= Element styles ======================= */ .spacer { display: block; width: 100%; height: var(--spacing-2); flex-shrink: 0; } .spacer-sm { height: var(--spacing-3); } .spacer-lg { height: var(--spacing-4); } .spacer-xl { height: var(--spacing-5); } h1, h2, h3, h4, h5, h6 { font-family: "Perfectly Nineties", Times, "Times New Roman", serif; font-style: normal; font-weight: 400; line-height: var(--line-normal); text-align: left; margin: var(--spacing-6) 0 var(--spacing-6) 0; } h1, .size-h1 { font-size: var(--text-h1); } h2, .size-h2 { font-size: var(--text-h2); } h3, .size-h3 { font-size: var(--text-h3); } h4, .size-h4 { font-size: var(--text-h4); } h5, .size-h5 { font-size: var(--text-h5); } h6, .size-h6 { font-size: var(--text-h6); } p, ul, ol, li { font-family: "MD UI", Helvetica, sans; font-style: normal; font-weight: 400; font-feature-settings: "ss01" 1, "ss02" 1; font-size: var(--text-body); line-height: var(--line-relaxed); margin: var(--spacing-3) 0 var(--spacing-6) 0; text-align: left; } a { color: var(--color-primary); text-decoration: underline; text-underline-offset: 0.175rem; text-decoration-thickness: 0.075rem; transition: 0.2s; } a:hover { color: var(--color-primary-hover); text-decoration-thickness: 0.175rem; } a:visited { color: var(--color-primary); text-decoration-thickness: 0.175rem; } button, .link-button, .logo { appearance: none; -webkit-appearance: none; display: inline-flex; align-items: center; justify-content: center; min-height: 44px; font-family: "MD IO", monospace; font-style: normal; font-weight: 400; line-height: var(--line-normal); letter-spacing: 0.025rem; padding: 0.875rem 1rem; background: var(--color-primary-button); font-size: var(--text-button); color: var(--color-text-button); border: none; border-radius: var(--radius-xxl); box-shadow: var(--shadow-button); text-decoration: none; } .logo { padding: 1rem; aspect-ratio: 1/1; } .logo svg { height: 1.75em; width: 1.75em; flex: none; display: block; } .logo svg path { fill: currentColor; } button:hover, .link-button:hover, .logo:hover { background: var(--color-primary-button-hover); color: var(--color-text-button); } button:active, .link-button:active, .logo:active { background: var(--color-primary-button-active); box-shadow: var(--shadow-button-active); color: var(--color-text-button-active); } button:visited, .link-button:visited, .logo:visited { color: var(--color-text-button); text-decoration: none; } .link-button span { margin-right: 0.3em; } /* ======================= Layout styles ======================= */ #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); } .site-header { display: flex; align-items: center; justify-content: center; position: sticky; top: 0; z-index: 100; } .site-header .menu-bar { width: 900px; padding: var(--spacing-5) var(--spacing-6) 0 var(--spacing-5); display: flex; align-items: center; justify-content: space-between; gap: 1rem; background: rgb(255 255 255 / 0.88); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); } .menu-bar .menu-left { display: flex; align-items: center; justify-content: center; gap: 1rem; min-height: 44px; } /* .desktop-nav { height: 100%; align-self: stretch; } */ .desktop-nav { flex: 1; background: var(--color-neutral-200); border-radius: var(--radius-xxl); box-shadow: var(--shadow-button); padding: var(--spacing-1); } .desktop-nav ul, .mobile-menu ul { list-style: none; margin: 0; padding: 0; } .desktop-nav ul { display: flex; gap: 1rem; } .desktop-nav ul li { margin: 0; } .desktop-nav ul li a { align-self: stretch; } .desktop-nav a, .mobile-menu a { color: inherit; text-decoration: none; } .menu-toggle, .menu-close { width: 44px; height: 44px; border: 1px solid var(--border); border-radius: 0.75rem; background: #fff; color: inherit; cursor: pointer; } .menu-toggle { display: none; position: relative; } .menu-toggle span { position: absolute; left: 50%; width: 20px; height: 2px; background: currentColor; border-radius: 999px; transform-origin: center; 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 { position: fixed; inset: 0; background: var(--overlay); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); opacity: 0; pointer-events: none; transition: opacity 0.25s ease; z-index: 200; } .mobile-menu { position: fixed; inset: auto 1rem 1rem 1rem; width: auto; max-width: 24rem; margin-inline: auto; background: var(--panel); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border: 1px solid rgb(255 255 255 / 0.45); border-radius: 1rem; box-shadow: 0 20px 50px rgb(0 0 0 / 0.16); padding: 1rem; opacity: 0; transform: translateY(1rem) scale(0.98); pointer-events: none; transition: opacity 0.25s ease, transform 0.25s ease; z-index: 300; } .mobile-menu__header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1rem; } .mobile-menu ul { display: grid; gap: 0.5rem; } .mobile-menu a { display: block; padding: 0.95rem 1rem; border-radius: 0.75rem; background: rgb(255 255 255 / 0.56); } /* .page-content { padding: 3rem 1.25rem; } */ .menu-open .menu-overlay { opacity: 1; pointer-events: auto; } .menu-open .mobile-menu { opacity: 1; transform: translateY(0) scale(1); 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; } } main, footer { max-width: 900px; border: none; margin-left:auto; margin-right:auto; padding: var(--spacing-4) var(--spacing-6); display: flex; flex-direction: column; align-items: center; align-content: center; justify-items: stretch; justify-content: space-between; row-gap: var(--spacing-4); } main { flex: 1; } footer { margin-top: var(--spacing-3); padding-top: var(--spacing-4); padding-bottom: var(--spacing-7); padding-left: var(--spacing-5); padding-right: var(--spacing-5); font-family: "MD IO", monospace; font-style: normal; font-weight: 400; font-size: var(--text-small); line-height: var(--line-relaxed); color: var(--color-text-secondary); } footer a { color: var(--color-secondary); } footer a:hover { color: var(--color-secondary-hover); } footer a:visited { color: var(--color-secondary); } .align-left { align-items: left; align-content: left; padding-top: 1rem; } .content-box { width: 100%; background: var(--color-background-content-box); border-style: solid; border-radius: var(--radius-xxl); border-width: var(--border-width-sm); box-shadow: var(--shadow-box); row-gap: var(--spacing-7); padding: var(--spacing-6); color: var(--color-neutral-900); border-color: light-dark(var(--color-border-content-box-grey-light), var(--color-border-content-box-grey-dark)); } .content-intro { background: var(--color-orange-red-500); border-color: var(--color-border-content-box-orange-red); } .content-text { background: var(--color-orange-500); border-color: var(--color-border-content-box-orange); } .placeholder { flex: 1; min-height: 120px; -webkit-mask-image: linear-gradient( to top, 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% ); mask-image: linear-gradient( to top, 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% ); -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-size: 100% 100%; mask-size: 100% 100%; } .headline { line-height: var(--line-tight); margin: 0; } .text { width: clamp(min(100%, 40ch), 75%, 60ch); margin: 0; } .text a { color: var(--color-neutral-900); } .text a:hover { color: var(--color-neutral-800); } .text a:visited { color: var(--color-neutral-900); } .footer-content { display: flex; flex-direction: row; column-gap: var(--spacing-5); } .footer-links { display: flex; flex-direction: row; 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 ======================= */ /* * Hide visually and from screen readers */ .hidden, [hidden] { display: none !important; } /* * Hide only visually, but have it available for screen readers: * https://snook.ca/archives/html_and_css/hiding-content-for-accessibility * * 1. For long content, line feeds are not interpreted as spaces and small width * causes content to wrap 1 word per line: * https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe */ .visually-hidden { border: 0; clip: rect(0, 0, 0, 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; white-space: nowrap; width: 1px; /* 1 */ } /* * Extends the .visually-hidden class to allow the element * to be focusable when navigated to via the keyboard: * https://www.drupal.org/node/897638 */ .visually-hidden.focusable:active, .visually-hidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; white-space: inherit; width: auto; } /* * Hide visually and from screen readers, but maintain layout */ .invisible { visibility: hidden; } /* * Clearfix: contain floats * * The use of `table` rather than `block` is only necessary if using * `::before` to contain the top-margins of child elements. */ .clearfix::before, .clearfix::after { content: ""; display: table; } .clearfix::after { clear: both; } /* ======================= Media Queries for Responsive Design. ======================= */ @media (prefers-color-scheme: dark) { :root { --shadow-box: var(--shadow-dark); } } @media screen and (max-width:768px) { main { padding: var(--spacing-4) var(--spacing-5); } .footer-content { flex-direction: column; row-gap: var(--spacing-4); } .footer-fade { height: 240px; } } @media screen and (max-width:440px) { /* .footer-fixed { position: unset; left: unset; right: unset; bottom: unset; z-index: unset; } */ .footer-links { flex-direction: column; row-gap: var(--spacing-4); } .footer-fade { display: none; } } @media screen and (max-width:375px) { main { padding: var(--spacing-4); } } @media print, (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 1.25dppx), (min-resolution: 120dpi) { /* Style adjustments for high resolution devices */ } /* ======================= Print styles. Inlined to avoid the additional HTTP request: https://www.phpied.com/delay-loading-your-print-css/ ======================= */ @media print { *, *::before, *::after { background: #fff !important; color: #000 !important; /* Black prints faster */ box-shadow: none !important; text-shadow: none !important; } a, a:visited { text-decoration: underline; } a[href]::after { content: " (" attr(href) ")"; } abbr[title]::after { content: " (" attr(title) ")"; } /* * Don't show links that are fragment identifiers, * or use the `javascript:` pseudo protocol */ a[href^="#"]::after, a[href^="javascript:"]::after { content: ""; } pre { white-space: pre-wrap !important; } pre, blockquote { border: var(--border-width-sm) solid #999; page-break-inside: avoid; } tr, img { page-break-inside: avoid; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } }