Files
thgtoa/docs/stylesheets/hacker.css
T
nopeitsnothing 7ee67836c3 style(css): change main font and code fonts
Change the font to EB Garamond and Office Code Pro
2026-06-20 22:47:50 -04:00

518 lines
10 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
:root {
--crt-amber: #e7d9a3;
--crt-blue: #00d9ff;
--crt-green: #00f080;
--crt-red: #ff4c4c;
--phosphor-dim: #1a3a1a;
--status-success: #4ade80;
--status-warning: #fbbf24;
--status-error: #ef4444;
--status-info: #60a5fa;
--terminal-green-glow: rgba(0, 255, 0, 0.15);
--terminal-line-color: rgba(0, 255, 0, 0.3);
--terminal-border-faint: rgba(0, 255, 0, 0.08);
--md-default-bg-color: rgba(0, 255, 0, 0.08);
}
body::before {
content: "";
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
pointer-events: none;
z-index: 9999;
background: linear-gradient(
rgba(18, 32, 12, 0) 50%,
rgba(0, 20, 0, 0.1) 50%
),
linear-gradient(
90deg,
rgba(12, 36, 18, 0) 50%,
rgba(0, 16, 0, 0.08) 50%
);
background-size: 100% 4px, 6px 100%;
animation: scanline 4ms linear infinite;
}
@keyframes scanline {
0% { background-position: 0 0, 0 0; }
100% { background-position: 0 4px, 6px 100%; }
}
body::after {
content: "";
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
pointer-events: none;
z-index: 9998;
background: radial-gradient(
ellipse at center,
transparent 50%,
rgba(0, 0, 0, 0.3) 100%
);
}
@keyframes cursorBlink {
0%, 49% { opacity: 1; }
50%, 100% { opacity: 0; }
}
.md-header__topic::before,
body > *:first-child::before {
content: "λ ";
animation: cursorBlink 1s step-end infinite;
color: var(--crt-amber);
font-family: var(--font-main);
margin-right: 0.25em;
}
.terminal-window {
background: linear-gradient(180deg,
var(--bg-primary) 0%,
var(--bg-card) 100%
);
border: 2px solid var(--border-color);
border-radius: 8px;
padding: 1.5em;
position: relative;
box-shadow: 0 8px 32px rgba(0, 255, 0, 0.1);
}
.terminal-window::before {
content: "";
position: absolute;
top: -2px;
left: -2px;
right: -2px;
height: 3px;
background: linear-gradient(90deg,
transparent,
var(--accent-green),
transparent
);
opacity: 0.5;
}
strong {
text-shadow: 0 0 1px var(--border-color);
}
h1, h2 {
color: var(--crt-amber);
font-family: var(--font-main);
font-weight: bold;
margin-right: 0.02em;}
h3, h4, h5, h6 {
color: var(--crt-amber);
font-family: var(--font-main);
font-weight: bold;
}
p strong,
strong {
text-shadow: 0 0 1px var(--border-color);
}
pre {
background: linear-gradient(180deg,
var(--bg-color) 0%,
#0d150d 100%
);
border-left: 3px solid var(--accent-green);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
pre[role="presentation"] [data-line] {
color: var(--text-muted);
font-family: var(--font-main);
user-select: none;
min-width: 3em;
text-align: right;
padding-right: 1em;
}
pre code .token-keyword {
color: var(--crt-blue);
font-weight: bold;
}
pre code .token-string {
color: var(--status-success);
}
pre code .token-comment {
color: var(--text-muted);
font-style: italic;
}
.kbd,
kbd,
[data-type="kbd"] {
background: var(--bg-secondary);
border: 1px solid var(--border-color);
border-bottom: 2px solid var(--border-color);
border-radius: 4px;
padding: 0.2em 0.5em;
font-family: var(--font-main);
font-size: 0.85em;
color: var(--accent-green);
text-shadow: 0 1px 2px rgba(0, 255, 0, 0.1);
transition: all 0.1s ease;
}
code,
kbd,
pre {
font-family:var(--font-main)
}
kbd:hover {
border-color: var(--accent-green);
box-shadow: 0 2px 8px rgba(0, 255, 0, 0.2);
transform: translateY(-1px);
}
.status-indicator {
display: inline-flex;
align-items: center;
gap: 0.5em;
font-family: var(--code-font);
font-size: 0.85em;
text-transform: uppercase;
letter-spacing: 0.1em;
padding: 0.25em 0.5em;
border-radius: 4px;
}
.status-success {
color: var(--status-success);
background: rgba(74, 222, 128, 0.1);
border: 1px solid rgba(74, 222, 128, 0.3);
}
.status-warning {
color: var(--status-warning);
background: rgba(251, 191, 36, 0.1);
border: 1px solid rgba(251, 191, 36, 0.3);
}
.status-error {
color: var(--status-error);
background: rgba(239, 68, 68, 0.1);
border: 1px solid rgba(239, 68, 68, 0.3);
}
.status-info {
color: var(--status-info);
background: rgba(96, 165, 250, 0.1);
border: 1px solid rgba(96, 165, 250, 0.3);
}
.admonition {
border-left: 4px solid var(--accent-green);
background: transparent !important;
}
.admonition-title {
font-family: var(--font-main);
letter-spacing: 0.02em;
text-transform: uppercase;
font-size: 0.85em;
color: var(--accent-green);
background: transparent !important;
padding: 0.4em 0.8em;
}
.md-typeset details.admonition summary,
.md-typeset details > .admonition-title {
background: transparent !important;
}
.md-typeset details.admonition {
border: none;
background: transparent !important;
border-radius: 0;
overflow: visible;
}
.md-typeset a.headerlink {
display: none;
}
/* Force all admonition summaries to be transparent */
details[open] > summary,
summary[open] {
background-color: transparent !important;
}
.md-typeset table:not([class]) {
font-family: var(--code-font);
font-size: 0.95em;
}
.md-typeset__table th {
background: linear-gradient(180deg,
var(--bg-secondary) 0%,
var(--bg-card) 100%
);
border-bottom: 2px solid var(--accent-green);
font-weight: 700;
letter-spacing: 0.05em;
}
.md-typeset__table tr:hover {
background-color: var(--bg-primary);
}
blockquote, .admonition-blockquote {
border-left: 3px solid var(--accent-green);
margin: 1.5em 0;
padding-left: 1.5em;
background: transparent !important;
}
blockquote p:first-of-type::before {
content: " ";
color: var(--accent-green);
font-family: var(--code-font);
}
.md-typeset a::after,
a:not(.btn)::after {
content: "";
position: absolute;
bottom: -3px;
left: 0;
width: 0;
height: 1px;
background: var(--bg-card);
transition: width 0.2s ease;
}
.md-typeset a:hover::after,
a:not(.btn):hover::after {
width: 100%;
}
.btn {
font-family: var(--code-font);
text-transform: uppercase;
letter-spacing: 0.05em;
font-size: 0.85em;
transition: all 0.2s ease;
}
.md-typeset .admonition-title,
div.admonition > div:first-of-type::before {
font-family: var(--code-font);
text-transform: uppercase;
letter-spacing: 0.1em;
}
.md-typeset mark,
.highlight-mark {
background-color: rgba(255, 235, 0, 0.3);
color: inherit;
padding: 0.1em;
border-radius: 2px;
}
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--bg-primary);
}
::-webkit-scrollbar-thumb {
background: var(--terminal-green-glow);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--accent-green-dim);
}
@media (max-width: 768px) {
body::before {
background-size: 100% 2px, 3px 100%;
animation-duration: 6s;
}
}
@media (prefers-contrast: high) {
:root {
--accent-green: #fff;
--bg-primary: #000;
}
body::before {
background-size: 100% 3px, 4px 100%;
}
}
@keyframes terminalLoad {
0% { opacity: 0; transform: translateY(25px); }
100% { opacity: 1; transform: translateY(0); }
}
.md-typeset h1,
.md-content {
animation: terminalLoad 200ms ease-out forwards;
}
body::after {
content: "";
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
pointer-events: none;
z-index: 9997;
background: radial-gradient(
circle at center,
rgba(0, 255, 0, 0.03) 0%,
transparent 60%
);
animation: phosphorDecay 8s ease-out infinite;
}
@keyframes phosphorDecay {
0%, 100% { opacity: 0.4; }
50% { opacity: 0.2; }
}
body::after::before {
content: "";
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
pointer-events: none;
z-index: 9998;
background: radial-gradient(
circle at center,
transparent 40%,
rgba(0, 0, 0, 0.6) 100%
);
}
/* Ensure TOC nav elements can display properly with high z-index */
.md-nav {
z-index: 10000 !important;
}
.md-nav--secondary {
z-index: 10000 !important;
}
/* Ensure TOC nav links always have readable text */
.md-nav__link,
.md-nav__item {
color: var(--crt-green) !important;
background-color: transparent !important;
}
/* Prevent TOC nested items from inheriting bad backgrounds */
.md-nav__list > .md-nav__nested {
background-color: transparent !important;
}
/* Smooth TOC expansion/animation */
.md-nav__inner {
overflow: visible;
}
.md-nav__item.is-collapsed .md-nav__link > .md-nav__icon {
display: none;
}
/* Ensure nested nav items have proper z-index on hover/focus */
.md-nav__link:focus,
.md-nav__link:hover {
outline-color: var(--crt-green) !important;
outline-offset: -2px;
}
/* Material for MkDocs TOC color overrides */
.md-nav__link .md-nav__icon {
color: var(--crt-green);
}
.md-nav__item.is-parent > .md-nav__link > .md-nav__icon {
transform: rotate(0deg);
}
.md-nav__item.is-parent > .md-nav__link:hover > .md-nav__icon,
.md-nav__item.is-parent > .md-nav__link[aria-expanded="true"] > .md-nav__icon {
transform: rotate(90deg);
color: var(--crt-green);
}
.terminal-banner {
font-family: var(--code-font);
font-size: 0.75em;
letter-spacing: 0.2em;
text-align: center;
color: var(--text-muted);
padding: 1em 0;
border-top: 1px dashed var(--terminal-line-color);
border-bottom: 1px dashed var(--terminal-line-color);
margin: 3em 0;
}
.holographic-grid {
background-image:
linear-gradient(var(--terminal-border-faint) 1px, transparent 1px),
linear-gradient(90deg, var(--terminal-border-faint) 1px, transparent 1px);
background-size: 20px 20px;
position: relative;
}
.holographic-grid::before {
content: "";
position: absolute;
inset: 0;
background:
linear-gradient(
rgba(0, 255, 0, 0.03) 10px,
transparent 10px
),
linear-gradient(
90deg,
rgba(0, 255, 0, 0.03) 10px,
transparent 10px
);
background-size: 10px 10px;
}
/* Ensure TOC section titles are visible */
.md-nav__title,
.md-nav__list > .md-nav__item > .md-nav__link > .md-nav__content {
color: var(--crt-green) !important;
background-color: transparent !important;
}
/* Handle open/close animation properly */
.md-typeset details[open] {
margin-bottom: 1rem;
}
.md-typeset summary {
display: flex;
align-items: center;
gap: 0.5rem;
}