@font-face {
  font-family: 'Clash Grotesk';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/clashgrotesk-400.woff2) format('woff2');
}
@font-face {
  font-family: 'Clash Grotesk';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../fonts/clashgrotesk-500.woff2) format('woff2');
}
@font-face {
  font-family: 'Clash Grotesk';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(../fonts/clashgrotesk-600.woff2) format('woff2');
}
@font-face {
  font-family: 'Clash Grotesk';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(../fonts/clashgrotesk-700.woff2) format('woff2');
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: italic;
  font-weight: 100 800;
  font-display: swap;
  src: url(../fonts/jetbrainsmono-var-italic.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 100 800;
  font-display: swap;
  src: url(../fonts/jetbrainsmono-var-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cole.am: minimal, no client JS, light/dark automatic */
:root {
  color-scheme: light dark;
  --bg: #ffffff;
  --fg: #1a1a1a;
  --muted: #666666;
  --line: #e2e2e2;
  --accent: #0a58ca;
  --code-bg: #f4f4f4;
  --card: #fafafa;
}
@media (prefers-color-scheme: dark) {
  :root {
    --bg: #111111;
    --fg: #e6e6e6;
    --muted: #999999;
    --line: #2a2a2a;
    --accent: #7ab0ff;
    --code-bg: #1b1b1b;
    --card: #181818;
  }
}
* { box-sizing: border-box; }
body {
  margin: 0;
  font-family: "Clash Grotesk", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
  background: var(--bg);
  color: var(--fg);
  line-height: 1.65;
  font-size: 17px;
}
main {
  max-width: 44rem;
  margin: 0 auto;
  padding: 2.5rem 1.25rem 4rem;
}
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }

.site-header {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  max-width: 44rem;
  margin: 0 auto;
  padding: 1.5rem 1.25rem 0;
  border-bottom: 1px solid var(--line);
}
.site-header .brand { font-weight: 700; font-size: 1.15rem; color: var(--fg); }
.site-header nav a { margin-left: 1.1rem; color: var(--muted); }
.site-header nav a:hover { color: var(--accent); }

.site-footer {
  display: flex;
  justify-content: space-between;
  max-width: 44rem;
  margin: 0 auto;
  padding: 1.25rem;
  border-top: 1px solid var(--line);
  color: var(--muted);
  font-size: 0.85rem;
}

.hero { margin: 0 0 2.5rem; }
.hero h1 { margin: 0 0 0.3rem; font-size: 2rem; }
.tagline { color: var(--muted); margin: 0; }

/* colorized ASCII hero art: rendered image (static/img/hero.png), white
   background keyed to alpha so it works on light and dark themes */
.hero-art { margin: 0 0 1rem; }
.hero-art img {
  display: block;
  max-width: 100%;
  height: auto;
}
/* config-driven ASCII art above the h1 (site.toml home.ascii) */
.hero-ascii {
  margin: 0 0 0.9rem;
  padding: 0;
  background: transparent;
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 0.95rem;
  line-height: 1.05;
  color: var(--muted);
  user-select: none;
}

h2 { font-size: 1.15rem; }
.post-list { list-style: none; margin: 0.8rem 0; padding: 0; }
.post-list li {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.45rem 0;
  border-bottom: 1px solid var(--line);
}
.post-list time { color: var(--muted); white-space: nowrap; font-size: 0.9rem; }
.more { margin-top: 1rem; }

.post-header h1 { margin: 0 0 0.4rem; }
.meta { color: var(--muted); font-size: 0.9rem; margin: 0 0 2rem; }
.tag { background: var(--card); border: 1px solid var(--line); border-radius: 99px; padding: 0.05rem 0.6rem; font-size: 0.8rem; }

.content h1 { font-size: 1.5rem; }
.content h2 { font-size: 1.25rem; margin-top: 2rem; }
.content h3 { font-size: 1.1rem; margin-top: 1.6rem; }
.content img { max-width: 100%; height: auto; }
.content pre {
  background: var(--code-bg);
  padding: 1rem 1.1rem;
  border-radius: 8px;
  overflow-x: auto;
  font-size: 0.875rem;
  line-height: 1.5;
}
.content code { font-family: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace; }
.content p > code, .content li > code {
  background: var(--code-bg);
  padding: 0.1rem 0.35rem;
  border-radius: 4px;
  font-size: 0.85em;
}
.content blockquote {
  margin: 1.5rem 0;
  padding: 0.1rem 1.2rem;
  border-left: 3px solid var(--accent);
  color: var(--muted);
}
.content table { border-collapse: collapse; width: 100%; margin: 1.5rem 0; }
.content th, .content td { border: 1px solid var(--line); padding: 0.5rem 0.75rem; text-align: left; }
.content th { background: var(--card); }

/* asciidoctor admonitions */
.content .admonitionblock { margin: 1.5rem 0; border: 1px solid var(--line); border-radius: 8px; background: var(--card); }
.content .admonitionblock table { border: none; margin: 0; }
.content .admonitionblock td { border: none; }
.content .admonitionblock .title { font-weight: 700; }

.ad-slot { margin: 1.75rem 0; text-align: center; }
.ad-slot:empty { display: none; }

.notfound { text-align: center; padding: 4rem 0; }

/* old-web section: webring bar + badge wall (authentic 80x15/88x31 buttons
   in static/img/badges/, plus two CSS microbuttons) */
.oldweb {
  max-width: 44rem;
  margin: 0 auto;
  padding: 1.5rem 1.25rem 0.5rem;
  display: flex;
  flex-direction: column;
  gap: 0.8rem;
  align-items: center;
}
.webring {
  display: flex;
  gap: 0.7rem;
  align-items: baseline;
  font-size: 0.8rem;
  color: var(--muted);
  border: 1px solid var(--line);
  border-radius: 99px;
  padding: 0.22rem 0.95rem;
}
.webring .ring-name { font-style: italic; }
.webring a { color: var(--accent); }
/* webring hub page (/webring/): same pill, roomier, and the member list */
.webring-hub {
  justify-content: center;
  font-size: 0.9rem;
  padding: 0.4rem 1.2rem;
}
.ring-members {
  list-style: none;
  margin: 0.8rem 0;
  padding: 0;
}
.ring-members li { padding: 0.25rem 0; }
.badges {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 0.45rem 0.5rem;
  justify-content: center;
  align-items: center;
}
.badges img {
  display: block;
  image-rendering: pixelated;
}
.badges a { line-height: 0; }
/* CSS microbuttons: 80x15, for the two badges with no archive original */
.badge {
  width: 80px;
  height: 15px;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  font: 700 8px/1 monospace;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  border: 1px solid;
  border-radius: 1px;
  overflow: hidden;
  padding: 0 2px;
}
.badge.b-go { background: #00add8; border-color: #046d8a; color: #04303c; }
.badge.b-hits {
  background: #0a0a0a;
  border-color: #333333;
  color: #39ff14;
  font-family: monospace;
  letter-spacing: 0.12em;
  text-shadow: 0 0 3px #39ff14;
}
/* the house webring badge: same shape, a notch larger than 80x15 */
.badge.b-ring {
  width: 118px;
  height: 20px;
  font-size: 9px;
  background: #d9a441;
  border-color: #8a6116;
  color: #2b1d05;
}
.badge.b-ring a { color: #2b1d05; text-decoration: none; }

/* ---- front page portfolio sections ---- */
.home-bio { max-width: 42rem; }
.aka {
  margin: 0.3rem 0 0;
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 0.85rem;
  color: var(--muted);
}
.aka::before { content: "~ "; color: var(--accent); }
.status-term {
  margin: 0.7rem 0 0;
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 0.85rem;
  color: var(--fg);
}
.status-term .prompt { color: var(--accent); margin-right: 0.45rem; }
.projects-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 0.8rem;
}
.project-card {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  padding: 0.9rem 1rem;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--card);
  text-decoration: none;
}
.project-card:hover { border-color: var(--accent); }
.project-name { font-weight: 600; }
.project-desc { color: var(--muted); font-size: 0.9rem; }
.social-row {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}
.social-row a {
  display: inline-block;
  padding: 0.2rem 0.8rem;
  border: 1px solid var(--line);
  border-radius: 99px;
  background: var(--card);
  text-decoration: none;
  color: var(--fg);
  font-size: 0.9rem;
}
.social-row a:hover { border-color: var(--accent); }
.contact-note { margin-top: 1rem; color: var(--muted); }

/* syntax highlighting: chroma classes (github light) */
/* Background */ .bg { background-color: #f7f7f7; }
/* PreWrapper */ .chroma { background-color: #f7f7f7; -webkit-text-size-adjust: none; }
/* Error */ .chroma .err { color: #f6f8fa; background-color: #82071e }
/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
/* LineHighlight */ .chroma .hl { background-color: #dedede }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* Line */ .chroma .line { display: flex; }
/* Keyword */ .chroma .k { color: #cf222e }
/* KeywordConstant */ .chroma .kc { color: #cf222e }
/* KeywordDeclaration */ .chroma .kd { color: #cf222e }
/* KeywordNamespace */ .chroma .kn { color: #cf222e }
/* KeywordPseudo */ .chroma .kp { color: #cf222e }
/* KeywordReserved */ .chroma .kr { color: #cf222e }
/* KeywordType */ .chroma .kt { color: #cf222e }
/* NameAttribute */ .chroma .na { color: #1f2328 }
/* NameClass */ .chroma .nc { color: #1f2328 }
/* NameConstant */ .chroma .no { color: #0550ae }
/* NameDecorator */ .chroma .nd { color: #0550ae }
/* NameEntity */ .chroma .ni { color: #6639ba }
/* NameLabel */ .chroma .nl { color: #990000; font-weight: bold }
/* NameNamespace */ .chroma .nn { color: #24292e }
/* NameOther */ .chroma .nx { color: #1f2328 }
/* NameTag */ .chroma .nt { color: #0550ae }
/* NameBuiltin */ .chroma .nb { color: #6639ba }
/* NameBuiltinPseudo */ .chroma .bp { color: #6a737d }
/* NameVariable */ .chroma .nv { color: #953800 }
/* NameVariableClass */ .chroma .vc { color: #953800 }
/* NameVariableGlobal */ .chroma .vg { color: #953800 }
/* NameVariableInstance */ .chroma .vi { color: #953800 }
/* NameVariableMagic */ .chroma .vm { color: #953800 }
/* NameFunction */ .chroma .nf { color: #6639ba }
/* NameFunctionMagic */ .chroma .fm { color: #6639ba }
/* LiteralString */ .chroma .s { color: #0a3069 }
/* LiteralStringAffix */ .chroma .sa { color: #0a3069 }
/* LiteralStringBacktick */ .chroma .sb { color: #0a3069 }
/* LiteralStringChar */ .chroma .sc { color: #0a3069 }
/* LiteralStringDelimiter */ .chroma .dl { color: #0a3069 }
/* LiteralStringDoc */ .chroma .sd { color: #0a3069 }
/* LiteralStringDouble */ .chroma .s2 { color: #0a3069 }
/* LiteralStringEscape */ .chroma .se { color: #0a3069 }
/* LiteralStringHeredoc */ .chroma .sh { color: #0a3069 }
/* LiteralStringInterpol */ .chroma .si { color: #0a3069 }
/* LiteralStringOther */ .chroma .sx { color: #0a3069 }
/* LiteralStringRegex */ .chroma .sr { color: #0a3069 }
/* LiteralStringSingle */ .chroma .s1 { color: #0a3069 }
/* LiteralStringSymbol */ .chroma .ss { color: #032f62 }
/* LiteralNumber */ .chroma .m { color: #0550ae }
/* LiteralNumberBin */ .chroma .mb { color: #0550ae }
/* LiteralNumberFloat */ .chroma .mf { color: #0550ae }
/* LiteralNumberHex */ .chroma .mh { color: #0550ae }
/* LiteralNumberInteger */ .chroma .mi { color: #0550ae }
/* LiteralNumberIntegerLong */ .chroma .il { color: #0550ae }
/* LiteralNumberOct */ .chroma .mo { color: #0550ae }
/* Operator */ .chroma .o { color: #0550ae }
/* OperatorWord */ .chroma .ow { color: #0550ae }
/* OperatorReserved */ .chroma .or { color: #0550ae }
/* Punctuation */ .chroma .p { color: #1f2328 }
/* Comment */ .chroma .c { color: #57606a }
/* CommentHashbang */ .chroma .ch { color: #57606a }
/* CommentMultiline */ .chroma .cm { color: #57606a }
/* CommentSingle */ .chroma .c1 { color: #57606a }
/* CommentSpecial */ .chroma .cs { color: #57606a }
/* CommentPreproc */ .chroma .cp { color: #57606a }
/* CommentPreprocFile */ .chroma .cpf { color: #57606a }
/* GenericDeleted */ .chroma .gd { color: #82071e; background-color: #ffebe9 }
/* GenericEmph */ .chroma .ge { color: #1f2328 }
/* GenericInserted */ .chroma .gi { color: #116329; background-color: #dafbe1 }
/* GenericOutput */ .chroma .go { color: #1f2328 }
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
/* TextWhitespace */ .chroma .w { color: #ffffff }
/* syntax highlighting: github-dark under prefers-color-scheme */
@media (prefers-color-scheme: dark) {
/* Background */ .bg { color: #e6edf3; background-color: #0d1117; }
/* PreWrapper */ .chroma { color: #e6edf3; background-color: #0d1117; -webkit-text-size-adjust: none; }
/* Error */ .chroma .err { color: #f85149 }
/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
/* LineHighlight */ .chroma .hl { background-color: #6e7681 }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #737679 }
/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #6e7681 }
/* Line */ .chroma .line { display: flex; }
/* Keyword */ .chroma .k { color: #ff7b72 }
/* NameAttribute */ .chroma .na { color: #79c0ff }
/* NameBuiltin */ .chroma .nb { color: #79c0ff }
/* NameBuiltinPseudo */ .chroma .bp { color: #e6edf3 }
/* NameOther */ .chroma .nx { color: #e6edf3 }
/* Punctuation */ .chroma .p { color: #e6edf3 }
/* KeywordConstant */ .chroma .kc { color: #79c0ff }
/* KeywordDeclaration */ .chroma .kd { color: #ff7b72 }
/* KeywordNamespace */ .chroma .kn { color: #ff7b72 }
/* KeywordPseudo */ .chroma .kp { color: #79c0ff }
/* KeywordReserved */ .chroma .kr { color: #ff7b72 }
/* KeywordType */ .chroma .kt { color: #ff7b72 }
/* NameClass */ .chroma .nc { color: #f0883e; font-weight: bold }
/* NameConstant */ .chroma .no { color: #79c0ff; font-weight: bold }
/* NameDecorator */ .chroma .nd { color: #d2a8ff; font-weight: bold }
/* NameEntity */ .chroma .ni { color: #ffa657 }
/* NameException */ .chroma .ne { color: #f0883e; font-weight: bold }
/* NameLabel */ .chroma .nl { color: #79c0ff; font-weight: bold }
/* NameNamespace */ .chroma .nn { color: #ff7b72 }
/* NameProperty */ .chroma .py { color: #79c0ff }
/* NameTag */ .chroma .nt { color: #7ee787 }
/* NameVariable */ .chroma .nv { color: #79c0ff }
/* NameVariableClass */ .chroma .vc { color: #79c0ff }
/* NameVariableGlobal */ .chroma .vg { color: #79c0ff }
/* NameVariableInstance */ .chroma .vi { color: #79c0ff }
/* NameVariableMagic */ .chroma .vm { color: #79c0ff }
/* NameFunction */ .chroma .nf { color: #d2a8ff; font-weight: bold }
/* NameFunctionMagic */ .chroma .fm { color: #d2a8ff; font-weight: bold }
/* Literal */ .chroma .l { color: #a5d6ff }
/* LiteralDate */ .chroma .ld { color: #79c0ff }
/* LiteralString */ .chroma .s { color: #a5d6ff }
/* LiteralStringAffix */ .chroma .sa { color: #79c0ff }
/* LiteralStringBacktick */ .chroma .sb { color: #a5d6ff }
/* LiteralStringChar */ .chroma .sc { color: #a5d6ff }
/* LiteralStringDelimiter */ .chroma .dl { color: #79c0ff }
/* LiteralStringDoc */ .chroma .sd { color: #a5d6ff }
/* LiteralStringDouble */ .chroma .s2 { color: #a5d6ff }
/* LiteralStringEscape */ .chroma .se { color: #79c0ff }
/* LiteralStringHeredoc */ .chroma .sh { color: #79c0ff }
/* LiteralStringInterpol */ .chroma .si { color: #a5d6ff }
/* LiteralStringOther */ .chroma .sx { color: #a5d6ff }
/* LiteralStringRegex */ .chroma .sr { color: #79c0ff }
/* LiteralStringSingle */ .chroma .s1 { color: #a5d6ff }
/* LiteralStringSymbol */ .chroma .ss { color: #a5d6ff }
/* LiteralNumber */ .chroma .m { color: #a5d6ff }
/* LiteralNumberBin */ .chroma .mb { color: #a5d6ff }
/* LiteralNumberFloat */ .chroma .mf { color: #a5d6ff }
/* LiteralNumberHex */ .chroma .mh { color: #a5d6ff }
/* LiteralNumberInteger */ .chroma .mi { color: #a5d6ff }
/* LiteralNumberIntegerLong */ .chroma .il { color: #a5d6ff }
/* LiteralNumberOct */ .chroma .mo { color: #a5d6ff }
/* Operator */ .chroma .o { color: #ff7b72; font-weight: bold }
/* OperatorWord */ .chroma .ow { color: #ff7b72; font-weight: bold }
/* OperatorReserved */ .chroma .or { color: #ff7b72; font-weight: bold }
/* Comment */ .chroma .c { color: #8b949e; font-style: italic }
/* CommentHashbang */ .chroma .ch { color: #8b949e; font-style: italic }
/* CommentMultiline */ .chroma .cm { color: #8b949e; font-style: italic }
/* CommentSingle */ .chroma .c1 { color: #8b949e; font-style: italic }
/* CommentSpecial */ .chroma .cs { color: #8b949e; font-weight: bold; font-style: italic }
/* CommentPreproc */ .chroma .cp { color: #8b949e; font-weight: bold; font-style: italic }
/* CommentPreprocFile */ .chroma .cpf { color: #8b949e; font-weight: bold; font-style: italic }
/* GenericDeleted */ .chroma .gd { color: #ffa198; background-color: #490202 }
/* GenericEmph */ .chroma .ge { font-style: italic }
/* GenericError */ .chroma .gr { color: #ffa198 }
/* GenericHeading */ .chroma .gh { color: #79c0ff; font-weight: bold }
/* GenericInserted */ .chroma .gi { color: #56d364; background-color: #0f5323 }
/* GenericOutput */ .chroma .go { color: #8b949e }
/* GenericPrompt */ .chroma .gp { color: #8b949e }
/* GenericStrong */ .chroma .gs { font-weight: bold }
/* GenericSubheading */ .chroma .gu { color: #79c0ff }
/* GenericTraceback */ .chroma .gt { color: #ff7b72 }
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
/* TextWhitespace */ .chroma .w { color: #6e7681 }
}

/* ---- source blocks: figure wrapper around chroma pre ---- */
.content figure.source {
  margin: 1.4rem 0;
  border: 1px solid var(--line);
  border-radius: 8px;
  overflow: hidden;
}
.content figure.source::before {
  content: attr(data-lang);
  display: block;
  padding: 0.3rem 1.1rem;
  background: var(--card);
  border-bottom: 1px solid var(--line);
  color: var(--muted);
  font: 600 0.72rem/1.4 "JetBrains Mono", ui-monospace, monospace;
  text-transform: lowercase;
  letter-spacing: 0.05em;
}
.content figure.source pre.chroma {
  margin: 0;
  border: 0;
  border-radius: 0;
  background: var(--code-bg);
  padding: 1rem 1.1rem;
}
.content figure.source pre.chroma code {
  background: transparent;
  padding: 0;
}

.site-footer a {
  color: var(--muted);
  text-decoration: none;
}
.site-footer a:hover { color: var(--fg); }

/* ---- social cards (Elsewhere) ---- */
.social-cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 0.8rem;
}
.social-card {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.25rem;
  padding: 1rem 1.1rem;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--card);
  text-decoration: none;
  color: var(--fg);
}
.social-card:hover { border-color: var(--accent); }
.social-card.static { border-style: dashed; }
.brand-icon { fill: var(--fg); }
.social-card:hover .brand-icon { fill: var(--accent); }
.sc-name { font-weight: 600; margin-top: 0.35rem; }
.sc-handle {
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 0.8rem;
  color: var(--muted);
}
.sc-stats {
  margin-top: 0.45rem;
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 0.72rem;
  color: var(--fg);
  background: var(--bg);
  border: 1px solid var(--line);
  border-radius: 6px;
  padding: 0.15rem 0.5rem;
}
.stats-synced {
  margin-top: 0.6rem;
  font-size: 0.75rem;
  color: var(--muted);
}

/* ---- GitHub mini contribution graph (social card) ---- */
.sc-contrib {
  display: grid;
  grid-template-rows: repeat(7, 7px);
  grid-auto-flow: column;
  grid-auto-columns: 7px;
  gap: 2px;
  margin-top: 0.55rem;
}
.sc-contrib i { display: block; width: 7px; height: 7px; border-radius: 2px; }
.sc-contrib .pad { background: transparent; }
.sc-contrib .l0 { background: #ebedf0; }
.sc-contrib .l1 { background: #9be9a8; }
.sc-contrib .l2 { background: #40c463; }
.sc-contrib .l3 { background: #30a14e; }
.sc-contrib .l4 { background: #216e39; }
@media (prefers-color-scheme: dark) {
  .sc-contrib .l0 { background: #161b22; }
  .sc-contrib .l1 { background: #0e4429; }
  .sc-contrib .l2 { background: #006d32; }
  .sc-contrib .l3 { background: #26a641; }
  .sc-contrib .l4 { background: #39d353; }
}

/* ---- skills & certifications ---- */
.skills-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
  gap: 0.7rem;
  margin: 0.9rem 0;
}
.skill-group {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 0.75rem 0.85rem;
}
.skill-group h3 {
  margin: 0 0 0.5rem;
  font-size: 0.78rem;
  font-family: "JetBrains Mono", ui-monospace, monospace;
  text-transform: lowercase;
  letter-spacing: 0.06em;
  color: var(--muted);
}
.skill-chips {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
}
.skill-chips li {
  font-size: 0.8rem;
  background: var(--bg);
  border: 1px solid var(--line);
  border-radius: 99px;
  padding: 0.1rem 0.55rem;
}
.certs {
  list-style: none;
  margin: 0.6rem 0 0;
  padding: 0;
}
.certs li {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.3rem 0;
  border-bottom: 1px dashed var(--line);
  font-size: 0.92rem;
}
.certs .cert-issuer { color: var(--muted); font-size: 0.82rem; }

/* ---- external webring pills (hotline, geekring) ---- */
.webring-ext {
  font-size: 0.72rem;
  padding: 0.16rem 0.8rem;
  opacity: 0.85;
}
.webring .ring-pending { font-style: italic; }

/* ---- real visitor counter (functions/counter.svg.js) ---- */
.counter { line-height: 0; }
.counter img { display: block; }

/* ---- /cves/ advisory index ---- */
.cve-list {
  list-style: none;
  margin: 1rem 0;
  padding: 0;
}
.cve-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem 1rem;
  align-items: baseline;
  padding: 0.45rem 0;
  border-bottom: 1px dashed var(--line);
  font-size: 0.92rem;
}
.cve-id { font-family: "JetBrains Mono", ui-monospace, monospace; font-size: 0.84rem; }
.cve-pkg { color: var(--muted); }
.cve-sev { font-size: 0.78rem; border: 1px solid var(--line); border-radius: 99px; padding: 0 0.5rem; }
.cve-sum { flex: 1 1 240px; }
.cve-empty { color: var(--muted); font-style: normal; }
