:root { /* Typography */ --spacing-base: 1.5em; --font-family-mono: monospace; --font-size-base: 1em; --font-size-small: 0.9em; --font-size-code: 0.95em; /* Spacing */ --spacing-xs: calc(var(--spacing-base) * 0.25); --spacing-sm: calc(var(--spacing-base) * 0.5); --spacing-md: var(--spacing-base); --spacing-lg: calc(var(--spacing-base) * 2); /* Base theme knobs */ --bg-h: 0; --bg-s: 0%; --bg-l: 99%; /* Background colors */ --color-bg-primary: hsl(var(--bg-h) var(--bg-s) var(--bg-l)); --color-bg-secondary: hsl(var(--bg-h) var(--bg-s) calc(var(--bg-l) - 2%)); --color-border: hsl(var(--bg-h) var(--bg-s) calc(var(--bg-l) - 6%)); --color-selection-bg: hsl(var(--bg-h) var(--bg-s) calc(var(--bg-l) - 13%)); /* Text colors with WCAG-friendly contrast */ /* Primary: ensures near-black on light bg and near-white on dark bg */ --color-text-primary: hsl( var(--bg-h) var(--bg-s) clamp(8%, calc(100% - var(--bg-l)), 92%) ); /* Muted: softer but still >4.5:1 contrast */ --color-text-muted: hsl( var(--bg-h) var(--bg-s) clamp(30%, calc(85% - var(--bg-l)), 75%) ); /* Code text: slightly brighter than muted */ --color-text-code: hsl( var(--bg-h) var(--bg-s) clamp(20%, calc(90% - var(--bg-l)), 85%) ); /* Layout */ --container-width: 64ch; --pre-border-radius: 0.75rem; --inline-border-radius: 0.375rem; --gap-base: 1em; --gap-small: 0.5em; /* Breakpoints */ --breakpoint-mobile: 600px; } /* Common component styles */ .no-scrollbar { scrollbar-width: none; /* Firefox */ -ms-overflow-style: none; /* IE and Edge */ } .no-scrollbar::-webkit-scrollbar { display: none; /* Chrome, Safari, Opera */ } .list-unstyled { list-style: none; margin-left: 0; } .text-muted { color: var(--color-text-muted); } .no-underline { text-decoration: none; border-bottom: none; } ::selection { background: var(--color-selection-bg); color: var(--color-text-primary); } /* Skip link for accessibility */ .skip-link { position: absolute; top: -100%; left: 0; padding: var(--spacing-sm) var(--spacing-md); background: var(--color-bg-primary); border: 1px solid var(--color-border); z-index: 1000; opacity: 0; transition: opacity 0.2s ease-in-out; } .skip-link:focus { position: fixed; top: var(--spacing-sm); left: var(--spacing-sm); opacity: 1; } /* Focus styles for accessibility */ a:focus-visible, button:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible { outline: 2px solid var(--color-text-primary); outline-offset: 2px; } * { margin: 0; padding: 0; font: inherit; color: var(--color-text-primary); box-sizing: border-box; } ul { list-style-type: disc; margin-left: 1.5rem; } ol { list-style-type: decimal; margin-left: 1.5rem; } html { margin: 0 0 0 calc(100vw - 100%); -webkit-text-size-adjust: 100%; height: 100%; } body { font: var(--font-size-base) / var(--spacing-base) var(--font-family-mono); background: var(--color-bg-primary); min-height: 100%; display: grid; grid-template-rows: auto 1fr auto; grid-template-columns: minmax(auto, var(--container-width)); justify-content: center; padding: var(--spacing-lg); gap: var(--spacing-lg); } a { display: inline-block; margin-left: -0.16666em; text-decoration: none; border-bottom: 1px dotted; white-space: pre-wrap; word-wrap: break-word; } a:hover { border-bottom: 1px solid; } p, pre { margin: var(--spacing-base) 0; } h1, h2, h3, h4, h5 { margin: var(--spacing-base) 0; font-weight: bold; } h2 { counter-increment: h2; counter-reset: h3; } h3 { counter-increment: h3; counter-reset: h4; } h4 { counter-increment: h4; counter-reset: h5; } h5 { counter-increment: h5; } /* nested counters */ h2::before { content: counter(h2) ". "; } h3::before { content: counter(h2) "." counter(h3) ". "; } h4::before { content: counter(h2) "." counter(h3) "." counter(h4) ". "; } h5::before { content: counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) ". "; } time { color: var(--color-text-muted); } footer { padding: calc(var(--spacing-base) * 2) 0; text-align: center; } footer p { margin-bottom: 0; } pre { border: 1px solid var(--color-border); padding: var(--spacing-sm) var(--spacing-md); border-radius: var(--pre-border-radius); white-space: pre-wrap; word-wrap: break-word; font-family: var(--font-family-mono); font-size: var(--font-size-code); line-height: 1.6; color: var(--color-text-code); overflow-x: auto; box-shadow: 0 1px 2px 0 var(--color-border); } pre code { background: none; border: none; padding: 0; font-size: inherit; color: inherit; } p > code, li > code, h1 > code, h2 > code, h3 > code, h4 > code, h5 > code { background: var(--color-bg-secondary); border: 1px solid var(--color-border); border-radius: var(--inline-border-radius); padding: 0.2em 0.4em; font-family: var(--font-family-mono); font-size: var(--font-size-code); color: var(--color-text-code); white-space: pre-wrap; word-wrap: break-word; } .terms-list { padding-bottom: var(--spacing-base); } .terms-list ul { list-style-type: none; margin-left: 0; } .terms-list ul li { display: inline-block; font-style: italic; font-size: var(--font-size-small); color: var(--color-text-muted); padding: 0 3px; } /* Path navigation styles */ .path-nav { font-family: var(--font-family-mono); padding: var(--spacing-base) 0; white-space: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; /* Firefox */ -ms-overflow-style: none; /* IE and Edge */ width: 100%; } .path-nav::-webkit-scrollbar { display: none; /* Chrome, Safari, Opera */ } .path-nav ol { display: flex; flex-wrap: nowrap; list-style: none; margin: 0; padding: 0; } .path-nav li { display: flex; align-items: center; color: var(--color-text-muted); flex-shrink: 0; max-width: 200px; /* Limit maximum width on small screens */ } .path-nav li.current { max-width: none; /* Allow full width for current page */ } .path-nav li a { text-decoration: none; border-bottom: none; padding: 0 0.25em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--color-text-muted); } .path-nav li.current a { color: var(--color-text-primary); font-weight: bold; } .path-nav a:hover { text-decoration: underline; } .back-nav { margin-bottom: var(--spacing-base); } .back-link { color: var(--color-text-muted); border-bottom: none; } .back-link:hover { color: var(--color-text-primary); text-decoration: none; } /* Time list */ .time-list ul { list-style: none; margin-left: 0; } .time-list li { display: grid; grid-template-columns: auto 1fr; gap: var(--gap-base); align-items: start; padding: var(--spacing-sm) 0; } @media (max-width: 600px) { .time-list li { grid-template-columns: 1fr; gap: var(--gap-small); } .time-list time { font-size: var(--font-size-small); } } /* Main menu navigation styles */ .terminal-nav { font-family: var(--font-family-mono); border-top: 1px solid var(--color-border); margin-top: calc(var(--spacing-base) * 2); padding-top: var(--spacing-base); } .terminal-nav nav ul { list-style: none; padding: 0; margin: 0; display: flex; gap: 1em; } .terminal-nav nav ul li { display: inline-block; } .terminal-nav nav ul li a, .terminal-nav .back-link { color: var(--color-text-muted); border-bottom: none; text-decoration: none; } .terminal-nav nav ul li a:hover, .terminal-nav .back-link:hover { color: var(--color-text-primary); } .terminal-nav nav ul li a.active { color: var(--color-text-primary); font-weight: bold; } .terminal-nav .back-nav { margin: calc(var(--spacing-base) * 0.5) 0; } /* Image styles */ img { display: block; max-width: 100%; height: auto; margin: var(--spacing-base) auto; border: 1px solid var(--color-border); padding: var(--spacing-sm) var(--spacing-md); border-radius: var(--pre-border-radius); } figure { margin: var(--spacing-base) 0; text-align: center; } figure img { margin: 0 auto; } figcaption { color: var(--color-text-muted); font-size: var(--font-size-small); margin-top: calc(var(--spacing-base) / 2); } /* Table styles */ table { width: 100%; margin: var(--spacing-base) 0; border-collapse: collapse; } thead th, th { font-weight: bold; text-align: center; border-bottom: 2px solid var(--color-border); padding: var(--spacing-sm); } td { padding: var(--spacing-sm); border-bottom: 1px solid var(--color-border); } /* Typography emphasis */ strong { font-weight: bold; } em { font-style: italic; } /* Blockquote styles */ blockquote { margin: var(--spacing-base) 0; padding: var(--spacing-sm) var(--spacing-base); border: 1px solid var(--color-border); border-radius: var(--pre-border-radius); background: var(--color-bg-secondary); box-shadow: 0 1px 2px 0 var(--color-border); font-style: italic; } blockquote > :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } /* Table of Contents */ .toc { margin: var(--spacing-base) 0; padding: var(--spacing-sm); border: 1px solid var(--color-border); background: var(--color-bg-secondary); border-radius: var(--pre-border-radius); box-shadow: 0 1px 2px 0 var(--color-border); } .toc .toc-content a { text-decoration: none; color: var(--color-text-primary); font-size: var(--font-size-small); } .toc .toc-content ol li { list-style-type: disc !important; } .time { margin: var(--spacing-md) 0; } @media (max-width: 600px) { .path-nav li { max-width: 100px; /* More aggressive truncation on mobile */ } .path-nav li:first-child { max-width: none; /* Don't truncate site title */ } .path-nav li.current { max-width: 150px; /* Allow slightly more width for current page on mobile */ } } @media (max-width: 600px) { body { padding-top: 2em; } pre { max-width: calc(100vw - 4em); } } /* Print styles */ @media print { body { background: white; color: black; padding: 0; display: block; } header, footer, .terminal-nav, .skip-link, .toc, .back-nav { display: none !important; } main { max-width: 100%; } a { border-bottom: none; color: black; } a[href]::after { content: " (" attr(href) ")"; font-size: 0.8em; color: gray; } a[href^="#"]::after, a[href^="javascript:"]::after { content: ""; } pre, blockquote, img { page-break-inside: avoid; } h1, h2, h3, h4, h5 { page-break-after: avoid; } } /* Custom defined styles */ @import "assets/css/custom";