Something went wrong. Try again.
Proof of concept mechanical port of ircnet/ircd to Rust as part of a bit about C being insecure for network services
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574/* xess — Xe Iaso Design System * Gruvbox Pale tokens + Schibsted Grotesk + Podkova + Iosevka Curly Iaso. */
/* ---------- Fonts ---------- */@font-face { font-family: "Podkova"; font-style: normal; font-weight: 400 800; font-display: swap; src: url(podkova.woff2) format("woff2");}
@font-face { font-family: "Iosevka Curly Iaso"; font-style: normal; font-display: swap; src: url(iosevka-curly.woff2) format("woff2");}
/* latin-ext */@font-face { font-family: "Schibsted Grotesk"; font-style: italic; font-weight: 400 900; font-display: swap; src: url(schibsted-grotesk-italic-latin-ext.woff2) format("woff2"); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}/* latin */@font-face { font-family: "Schibsted Grotesk"; font-style: italic; font-weight: 400 900; font-display: swap; src: url(schibsted-grotesk-italic-latin.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;}/* latin-ext */@font-face { font-family: "Schibsted Grotesk"; font-style: normal; font-weight: 400 900; font-display: swap; src: url(schibsted-grotesk-latin-ext.woff2) format("woff2"); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}/* latin */@font-face { font-family: "Schibsted Grotesk"; font-style: normal; font-weight: 400 900; font-display: swap; src: url(schibsted-grotesk-latin.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;}
/* ---------- Color tokens (Gruvbox Pale) ---------- */:root { --bg-hard: #f9f5d7; --bg-soft: #f2e5bc; --bg-0: #fbf1c7; --bg-1: #ebdbb2; --bg-2: #d5c4a1; --bg-3: #bdae93; --bg-4: #a89984;
--fg-0: #282828; --fg-1: #3c3836; --fg-2: #504945; --fg-3: #665c54; --fg-4: #7c6f64;
--red: #9d0006; --red-bright: #cc241d; --green: #79740e; --green-bright: #98971a; --yellow: #b57614; --yellow-bright: #d79921; --blue: #076678; --blue-bright: #458588; --purple: #8f3f71; --purple-bright: #b16286; --aqua: #427b58; --aqua-bright: #689d6a; --orange: #af3a03; --orange-bright: #d65d0e; --gray: #7c6f64;
--link: #b80050; --link-hover-bg: #9e0045; --link-hover: #fdf4c1; --link-visited: #53493c; --link-visited-hover-bg: #282828; --link-visited-hover: #fff;
--surface: var(--bg-hard); --surface-raised: var(--bg-soft); --surface-sunken: var(--bg-1); --text: var(--fg-1); --text-muted: var(--fg-3); --border: var(--bg-3);
--font-sans: "Schibsted Grotesk", "Iosevka Aile Iaso", system-ui, sans-serif; --font-serif: "Podkova", "Iosevka Etoile Iaso", Georgia, serif; --font-mono: "Iosevka Curly Iaso", ui-monospace, "SF Mono", Consolas, monospace;
--step--1: 0.875rem; --step-0: 1rem; --step-1: 1.125rem; --step-2: 1.25rem; --step-3: 1.5rem; --step-4: 1.875rem; --step-5: 2.25rem; --step-6: 3rem;
--radius-xs: 2px; --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px; --radius-xl: 12px;
--shadow-sm: 0 1px 2px rgba(40, 40, 40, 0.08); --shadow-md: 0 2px 6px rgba(40, 40, 40, 0.12);
--space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px; --space-5: 24px; --space-6: 32px; --space-7: 48px; --space-8: 64px;
/* Motion */ --duration-fast: 120ms; --duration-base: 200ms; --duration-slow: 320ms; --ease-standard: cubic-bezier(0.2, 0.6, 0.2, 1);
/* Z-index layers */ --z-dropdown: 10; --z-sticky: 20; --z-overlay: 40; --z-modal: 50; --z-toast: 60; --z-tooltip: 70;
/* Focus */ --focus-ring: var(--purple-bright); --focus-ring-width: 2px;}
@media (prefers-color-scheme: dark) { :root { --bg-hard: #1d2021; --bg-soft: #32302f; --bg-0: #282828; --bg-1: #3c3836; --bg-2: #504945; --bg-3: #665c54; --bg-4: #7c6f64;
--fg-0: #fbf1c7; --fg-1: #ebdbb2; --fg-2: #d5c4a1; --fg-3: #bdae93; --fg-4: #a89984;
--red: #fb4934; --red-bright: #cc241d; --green: #b8bb26; --green-bright: #98971a; --yellow: #fabd2f; --yellow-bright: #d79921; --blue: #83a598; --blue-bright: #458588; --purple: #d3869b; --purple-bright: #b16286; --aqua: #8ec07c; --aqua-bright: #689d6a; --orange: #fe8019; --orange-bright: #d65d0e; --gray: #a89984;
--link: #ffa8ce; --link-hover-bg: #b3004d; --link-hover: #fff; --link-visited: #c1b7a9; --link-visited-hover-bg: #282828; --link-visited-hover: #fdf4c1; }}
/* ---------- Base ---------- */html { color-scheme: light dark;}
body { font-family: var(--font-sans); color: var(--text); background: var(--surface); font-size: var(--step-0); line-height: 1.55; -webkit-font-smoothing: antialiased; margin: 0;}
::selection { background: var(--purple-bright); color: var(--bg-hard);}
main { max-width: 50rem; padding: 2rem; margin: auto;}
@media only screen and (max-device-width: 736px) { main { padding: var(--space-4); }}
/* ---------- Type ---------- */h1,h2,h3,h4,h5,h6 { font-family: var(--font-serif); font-weight: 600; line-height: 1.2; color: var(--fg-0); margin: 0 0 0.5em; text-wrap: pretty;}h1 { font-size: var(--step-5);}h2 { font-size: var(--step-4);}h3 { font-size: var(--step-3);}h4 { font-size: var(--step-2);}h5 { font-size: var(--step-1);}h6 { font-size: var(--step-0); text-transform: uppercase; letter-spacing: 0.04em;}
p { margin: 0 0 1em; text-wrap: pretty;}
code,pre,kbd,samp { font-family: var(--font-mono); font-size: 0.95em;}
:not(pre) > code { background: var(--bg-1); color: var(--fg-1); padding: 0.1em 0.3em; border-radius: var(--radius-sm);}
pre { background: #1d2021; color: #ebdbb2; padding: 1em; border: 0; border-radius: var(--radius-md); overflow: auto;}
@media (prefers-color-scheme: dark) { pre { background: var(--bg-soft); color: var(--fg-1); } :not(pre) > code { background: var(--bg-soft); }}
/* ---------- Links (magenta invert-on-hover is a signature) ---------- */a { color: var(--link); text-decoration: underline; text-underline-offset: 2px;}a:hover { color: var(--link-hover); background: var(--link-hover-bg);}a:visited { color: var(--link-visited);}a:visited:hover { color: var(--link-visited-hover); background: var(--link-visited-hover-bg);}
/* ---------- Other primitives ---------- */blockquote { color: var(--text-muted); margin: 1em 0; padding: 0.25em 1em;}
details { padding: var(--space-4); background: var(--bg-soft); border-radius: var(--radius-md);}
hr { border: none; border-top: 1px solid var(--border); margin: var(--space-6) 0;}
footer { text-align: center; color: var(--text-muted); margin-top: var(--space-7);}
nav { margin-bottom: var(--space-5);}
/* ---------- Buttons ---------- */.xe-btn { display: inline-flex; align-items: center; gap: 0.5em; font-family: var(--font-sans); font-weight: 500; padding: 8px 16px; border-radius: var(--radius-xl); border: 0; text-decoration: none; box-shadow: var(--shadow-sm); transition: transform 0.15s ease, background 0.15s ease, box-shadow 0.15s ease; cursor: pointer;}.xe-btn:hover { transform: translateY(-1px); box-shadow: var(--shadow-md); text-decoration: none;}.xe-btn--primary { background: var(--orange-bright); color: #fff;}.xe-btn--primary:hover { background: var(--orange); color: #fff;}.xe-btn--secondary { background: var(--fg-0); color: var(--bg-hard);}.xe-btn--accent { background: var(--purple-bright); color: #fff;}.xe-btn--ghost { background: transparent; color: var(--fg-1); border: 1px solid var(--border); box-shadow: none;}.xe-btn--danger { background: var(--red); color: #fff;}.xe-btn--danger:hover { background: var(--red-bright); color: #fff;}
/* ---------- Cards & tags ---------- */.xe-card { background: var(--bg-2); border: 1px solid var(--bg-4); border-radius: var(--radius-md); padding: var(--space-4);}
.xe-tag { display: inline-block; background: var(--bg-1); color: var(--fg-1); padding: 6px 10px; border-radius: var(--radius-lg); font-size: var(--step--1); margin: 4px;}
.xe-tag-list { display: flex; flex-wrap: wrap; gap: var(--space-2); margin: var(--space-3) 0;}
.xe-tag-list .xe-tag { margin: 0;}
/* ---------- Surfaces ---------- */.xe-surface-raised { background: var(--bg-0); color: var(--fg-1); border-radius: var(--radius-md); padding: var(--space-4);}
.xe-divider-strong { height: 2px; background: var(--bg-3); border: 0; margin: var(--space-6) 0;}
.xe-border-hairline { height: 1px; background: var(--bg-4); border: 0; margin: var(--space-5) 0;}
/* ---------- Text scale ---------- */.xe-text-strong { color: var(--fg-0); font-weight: 600;}.xe-text-subtle { color: var(--fg-2);}.xe-text-muted { color: var(--fg-3); font-size: var(--step--1);}.xe-text-caption { color: var(--fg-4); font-size: var(--step--1);}
/* ---------- Blockquote / PullQuote ---------- */.xe-blockquote { background: var(--bg-2); color: var(--fg-1); padding: var(--space-4); border-radius: var(--radius-lg); margin: var(--space-4) auto;}.xe-blockquote::before { content: "> "; color: var(--fg-3); font-family: var(--font-mono);}
.xe-pullquote { background: var(--bg-2); color: var(--fg-1); border-left: 4px solid var(--blue); padding: var(--space-4); border-radius: var(--radius-md); font-style: italic; margin: var(--space-5) 0;}
/* ---------- Chat ("Conv") ---------- */.xe-chat { display: flex; flex-direction: column; background: var(--bg-soft); border-radius: var(--radius-md); overflow: hidden; margin: var(--space-4) 0;}.xe-chat__row { display: flex; gap: var(--space-3); padding: var(--space-3);}.xe-chat__row + .xe-chat__row { margin-top: -1px;}.xe-chat__avatar { width: 64px; height: 64px; border-radius: var(--radius-xs); flex-shrink: 0; object-fit: cover; background: var(--bg-1);}.xe-chat__body { display: flex; flex-direction: column; gap: var(--space-1); min-width: 0;}.xe-chat__name { font-weight: 600;}.xe-chat__message { color: var(--fg-1);}.xe-chat__message :last-child { margin-bottom: 0;}
/* ---------- Admonitions ---------- */.xe-admonition { display: flex; background: var(--bg-soft); color: var(--fg-1); border-radius: var(--radius-md); overflow: hidden; margin: var(--space-4) 0;}.xe-admonition__rule { flex: 0 0 4px; align-self: stretch;}.xe-admonition__body { flex: 1; padding: var(--space-4);}.xe-admonition__header { display: flex; align-items: center; gap: var(--space-2); margin-bottom: var(--space-2);}.xe-admonition__dot { display: inline-block; width: 8px; height: 8px; border-radius: var(--radius-xs); flex-shrink: 0;}.xe-admonition__title { font-weight: 600; color: var(--fg-0);}.xe-admonition__content :last-child { margin-bottom: 0;}.xe-admonition--info .xe-admonition__rule { background: var(--blue);}.xe-admonition--info .xe-admonition__dot { background: var(--blue-bright);}.xe-admonition--warning .xe-admonition__rule { background: var(--yellow);}.xe-admonition--warning .xe-admonition__dot { background: var(--yellow-bright);}.xe-admonition--tip .xe-admonition__rule { background: var(--green);}.xe-admonition--tip .xe-admonition__dot { background: var(--green-bright);}.xe-admonition--note .xe-admonition__rule { background: var(--purple);}.xe-admonition--note .xe-admonition__dot { background: var(--purple-bright);}.xe-admonition--danger .xe-admonition__rule { background: var(--red);}.xe-admonition--danger .xe-admonition__dot { background: var(--red-bright);}.xe-admonition--success .xe-admonition__rule { background: var(--aqua);}.xe-admonition--success .xe-admonition__dot { background: var(--aqua-bright);}
/* ---------- Sponsor card ---------- */.xe-sponsor { background: var(--bg-0); border: 1px solid var(--bg-4); border-radius: var(--radius-md); overflow: hidden;}.xe-sponsor__rule { display: flex; height: 2px;}.xe-sponsor__rule-start { flex: 1; background: var(--orange-bright);}.xe-sponsor__rule-end { flex: 1; background: var(--purple-bright);}.xe-sponsor__heading { color: var(--orange); padding: var(--space-4) var(--space-4) 0;}.xe-sponsor__body { padding: 0 var(--space-4) var(--space-4);}
/* ---------- Navigation ---------- */.xe-nav__list { display: flex; flex-wrap: wrap; gap: var(--space-4); list-style: none; padding: 0; margin: 0;}.xe-nav__link { font-weight: 500;}
/* ---------- Footer wrapper ---------- */.xe-footer { text-align: center; color: var(--fg-3); margin-top: var(--space-7);}
/* ---------- Figure ---------- */.xe-figure { margin: var(--space-5) 0;}.xe-figure img { display: block; width: 100%; height: auto; border-radius: var(--radius-md);}.xe-figure figcaption { text-align: center; color: var(--fg-3); font-style: italic; margin-top: var(--space-2); font-size: var(--step--1);}
/* ---------- Icon ---------- */.xe-icon { display: inline-block; width: 1.25em; height: 1.25em; vertical-align: -0.2em;}
/* ---------- Kbd ---------- */.xe-kbd { display: inline-block; font-family: var(--font-mono); font-size: 0.85em; padding: 1px 6px; margin: 0 0.15em; border: 1px solid var(--bg-4); border-bottom-width: 2px; border-radius: var(--radius-sm); background: var(--bg-0); color: var(--fg-1);}
/* ---------- Mark ---------- */.xe-mark { background: var(--purple-bright); color: var(--bg-hard); padding: 0 0.2em; margin: 0 0.15em; border-radius: var(--radius-sm);}
/* ---------- Badge ---------- */.xe-badge { display: inline-block; font-size: var(--step--1); font-weight: 500; padding: 2px 8px; border-radius: var(--radius-lg); background: var(--bg-1); color: var(--fg-1);}.xe-badge--info { background: var(--blue); color: #fff;}.xe-badge--warning { background: var(--yellow); color: #fff;}.xe-badge--tip { background: var(--green); color: #fff;}.xe-badge--note { background: var(--purple); color: #fff;}.xe-badge--danger { background: var(--red); color: #fff;}.xe-badge--success { background: var(--aqua); color: #fff;}.xe-badge--neutral { background: var(--bg-1); color: var(--fg-1);}
/* ---------- Spinner ---------- */.xe-spinner { display: inline-flex; gap: 4px; align-items: center;}.xe-spinner__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--orange-bright); animation: xe-spinner-pulse 1.2s ease-in-out infinite;}.xe-spinner__dot:nth-child(2) { animation-delay: 0.15s;}.xe-spinner__dot:nth-child(3) { animation-delay: 0.3s;}@keyframes xe-spinner-pulse { 0%, 80%, 100% { opacity: 0.25; transform: scale(0.75); } 40% { opacity: 1; transform: scale(1); }}
/* ---------- Focus ring (applies everywhere keyboard focus lands) ---------- */:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 2px; border-radius: var(--radius-xs);}
/* ---------- Visually hidden ---------- */.xe-visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;}
/* ---------- Skip link ---------- */.xe-skip-link { position: absolute; top: 0; left: 0; transform: translateY(-120%); background: var(--fg-0); color: var(--bg-hard); padding: 8px 16px; border-radius: 0 0 var(--radius-md) 0; z-index: var(--z-overlay); text-decoration: none; transition: transform var(--duration-fast) var(--ease-standard);}.xe-skip-link:focus,.xe-skip-link:focus-visible { transform: translateY(0);}
/* ---------- Forms ---------- */.xe-form { display: flex; flex-direction: column; gap: var(--space-4);}.xe-field { display: flex; flex-direction: column; gap: var(--space-1);}.xe-label { font-weight: 600; color: var(--fg-0);}.xe-field__helper { margin: 0; color: var(--fg-3); font-size: var(--step--1);}.xe-field__error { margin: 0; color: var(--red); font-size: var(--step--1);}.xe-input,.xe-textarea,.xe-select { font-family: var(--font-sans); font-size: var(--step-0); color: var(--fg-0); background: var(--bg-0); border: 1px solid var(--bg-4); border-radius: var(--radius-md); padding: 8px 12px; transition: border-color var(--duration-fast) var(--ease-standard);}.xe-input:hover,.xe-textarea:hover,.xe-select:hover { border-color: var(--fg-3);}.xe-textarea { min-height: 6rem; line-height: 1.4; resize: vertical;}.xe-select { appearance: none; background-image: linear-gradient(45deg, transparent 50%, var(--fg-3) 50%), linear-gradient(-45deg, transparent 50%, var(--fg-3) 50%); background-position: calc(100% - 16px) 50%, calc(100% - 10px) 50%; background-size: 6px 6px, 6px 6px; background-repeat: no-repeat; padding-right: 32px;}.xe-checkbox,.xe-radio { display: inline-flex; align-items: center; gap: var(--space-2); cursor: pointer;}.xe-switch { display: inline-flex; align-items: center; gap: var(--space-2); cursor: pointer;}.xe-switch input { position: absolute; opacity: 0; pointer-events: none;}.xe-switch__track { position: relative; display: inline-block; width: 36px; height: 20px; background: var(--bg-3); border-radius: 999px; transition: background var(--duration-fast) var(--ease-standard);}.xe-switch__thumb { position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; background: var(--bg-hard); border-radius: 50%; transition: transform var(--duration-fast) var(--ease-standard);}.xe-switch input:checked + .xe-switch__track { background: var(--orange-bright);}.xe-switch input:checked + .xe-switch__track .xe-switch__thumb { transform: translateX(16px);}
/* ---------- Breadcrumb ---------- */.xe-breadcrumb { margin: var(--space-3) 0;}.xe-breadcrumb__list { display: flex; flex-wrap: wrap; gap: var(--space-1) var(--space-2); list-style: none; padding: 0; margin: 0; color: var(--fg-3); font-size: var(--step--1);}.xe-breadcrumb__item + .xe-breadcrumb__item::before { content: "/"; margin-right: var(--space-2); color: var(--fg-4);}
/* ---------- Pagination ---------- */.xe-pagination { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); margin: var(--space-6) 0;}.xe-pagination__label { color: var(--fg-3); font-size: var(--step--1);}.xe-pagination__disabled { color: var(--fg-4); cursor: not-allowed;}
/* ---------- Table of contents ---------- */.xe-toc { background: var(--bg-soft); border-radius: var(--radius-md); padding: var(--space-4); margin: var(--space-4) 0;}.xe-toc__title { font-size: var(--step-0); text-transform: uppercase; letter-spacing: 0.04em; color: var(--fg-2); margin: 0 0 var(--space-2);}.xe-toc__list { margin: 0; padding-left: var(--space-5);}.xe-toc__list .xe-toc__list { padding-left: var(--space-4); margin-top: var(--space-1);}
/* ---------- Next/Prev ---------- */.xe-nextprev { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-3); margin: var(--space-6) 0;}.xe-nextprev__prev,.xe-nextprev__next { display: flex; flex-direction: column; gap: var(--space-1); background: var(--bg-2); border-radius: var(--radius-md); padding: var(--space-3); text-decoration: none; color: var(--fg-0);}.xe-nextprev__prev { align-items: flex-start;}.xe-nextprev__next { align-items: flex-end; text-align: right; grid-column-start: 2;}.xe-nextprev__label { font-size: var(--step--1); color: var(--fg-3); text-transform: uppercase; letter-spacing: 0.04em;}.xe-nextprev__title { font-family: var(--font-serif); font-weight: 600;}
/* ---------- Back to top ---------- */.xe-back-to-top { display: inline-block; margin: var(--space-5) 0; font-size: var(--step--1);}
/* ---------- Prose ---------- */.xe-prose { max-width: 65ch; margin-inline: auto;}.xe-prose > :last-child { margin-bottom: 0;}
/* ---------- Hero / PageHeader ---------- */.xe-hero { padding: var(--space-6) 0 var(--space-5); margin-bottom: var(--space-6); border-bottom: 1px solid var(--bg-4);}.xe-hero__title { font-size: var(--step-6); margin: 0 0 var(--space-2);}.xe-hero__subtitle { font-size: var(--step-2); color: var(--fg-3); margin: 0;}.xe-hero__body { margin-top: var(--space-4);}.xe-page-header { margin-bottom: var(--space-5);}.xe-page-header__title { margin-bottom: var(--space-1);}.xe-page-header__meta { color: var(--fg-3);}
/* ---------- PostMeta / PostCard ---------- */.xe-postmeta { display: flex; flex-wrap: wrap; gap: var(--space-1) var(--space-3); color: var(--fg-3); font-size: var(--step--1);}.xe-postmeta__tags { flex-basis: 100%; margin-top: var(--space-1);}.xe-postcard { background: var(--bg-2); border: 1px solid var(--bg-4); border-radius: var(--radius-md); overflow: hidden; display: flex; flex-direction: column; margin-bottom: var(--space-4);}.xe-postcard__hero-link { display: block; line-height: 0; text-decoration: none; background: var(--bg-1);}.xe-postcard__hero-link:hover { background: var(--bg-1);}.xe-postcard__hero { display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; object-fit: cover;}.xe-postcard__body { display: flex; flex-direction: column; gap: var(--space-2); padding: var(--space-4);}.xe-postcard__title-link { text-decoration: none; color: inherit;}.xe-postcard__title { margin: 0; font-size: var(--step-2);}.xe-postcard__date { color: var(--fg-3); font-size: var(--step--1);}.xe-postcard__excerpt { margin: 0; color: var(--fg-1);}
/* ---------- Definition list ---------- */.xe-dl { display: grid; grid-template-columns: max-content 1fr; gap: var(--space-2) var(--space-4); margin: var(--space-4) 0;}.xe-dl__term { font-weight: 600; color: var(--fg-0);}.xe-dl__desc { margin: 0; color: var(--fg-1);}
/* ---------- Timeline ---------- */.xe-timeline { list-style: none; padding: 0; margin: var(--space-5) 0;}.xe-timeline__event { position: relative; padding-left: var(--space-5); padding-bottom: var(--space-5); border-left: 2px solid var(--bg-3);}.xe-timeline__event:last-child { border-left-color: transparent; padding-bottom: 0;}.xe-timeline__dot { position: absolute; left: -7px; top: 4px; width: 12px; height: 12px; border-radius: 50%; background: var(--orange-bright); border: 2px solid var(--bg-hard);}.xe-timeline__when { color: var(--fg-3); font-size: var(--step--1);}.xe-timeline__title { font-weight: 600; color: var(--fg-0); margin-top: var(--space-1);}.xe-timeline__body { margin-top: var(--space-2);}
/* ---------- Stat ---------- */.xe-stat { display: inline-flex; flex-direction: column; gap: var(--space-1); padding: var(--space-3) var(--space-4);}.xe-stat__value { font-family: var(--font-serif); font-size: var(--step-5); font-weight: 600; color: var(--fg-0); line-height: 1;}.xe-stat__label { color: var(--fg-3); font-size: var(--step--1); text-transform: uppercase; letter-spacing: 0.04em;}
/* ---------- Table ---------- */.xe-table-wrap { overflow-x: auto; margin: var(--space-4) 0; border-radius: var(--radius-md); border: 1px solid var(--bg-4);}.xe-table { width: 100%; border-collapse: collapse; font-size: var(--step-0);}.xe-table th,.xe-table td { padding: var(--space-2) var(--space-3); text-align: left; vertical-align: top;}.xe-table thead th { background: var(--bg-1); border-bottom: 2px solid var(--bg-3); font-weight: 600; color: var(--fg-0);}.xe-table tbody tr:nth-child(even) { background: var(--bg-0);}.xe-table tbody tr + tr { border-top: 1px solid var(--bg-3);}
/* ---------- Toast ---------- */.xe-toast { background: var(--bg-0); border: 1px solid var(--bg-4); border-left: 4px solid var(--fg-4); border-radius: var(--radius-md); padding: var(--space-3) var(--space-4); box-shadow: var(--shadow-md); max-width: 24rem;}.xe-toast__title { display: block; color: var(--fg-0); margin-bottom: var(--space-1);}.xe-toast--info { border-left-color: var(--blue);}.xe-toast--success { border-left-color: var(--aqua);}.xe-toast--warning { border-left-color: var(--yellow);}.xe-toast--danger { border-left-color: var(--red);}
/* ---------- Modal ---------- */.xe-modal { border: 1px solid var(--bg-4); border-radius: var(--radius-md); padding: 0; background: var(--bg-0); color: var(--fg-1); box-shadow: var(--shadow-md); max-width: 32rem; width: 90vw;}.xe-modal::backdrop { background: rgba(40, 40, 40, 0.5); backdrop-filter: blur(2px);}.xe-modal__header { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); padding: var(--space-3) var(--space-4); border-bottom: 1px solid var(--bg-4);}.xe-modal__title { margin: 0; font-size: var(--step-2); line-height: 1.2;}.xe-modal__close-form { display: contents;}.xe-modal__close { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; padding: 0; background: transparent; border: 0; border-radius: var(--radius-sm); color: var(--fg-2); cursor: pointer; font-size: 1.4rem; line-height: 1; transition: background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);}.xe-modal__close:hover { background: var(--bg-1); color: var(--fg-0);}.xe-modal__body { padding: var(--space-4);}
/* ---------- Progress ---------- */.xe-progress { display: flex; flex-direction: column; gap: var(--space-1); margin: var(--space-3) 0;}.xe-progress__label { color: var(--fg-3); font-size: var(--step--1);}.xe-progress__bar { appearance: none; width: 100%; height: 8px; border: 0; border-radius: 999px; overflow: hidden; background: var(--bg-1);}.xe-progress__bar::-webkit-progress-bar { background: var(--bg-1); border-radius: 999px;}.xe-progress__bar::-webkit-progress-value { background: var(--orange-bright); border-radius: 999px; transition: width var(--duration-base) var(--ease-standard);}.xe-progress__bar::-moz-progress-bar { background: var(--orange-bright); border-radius: 999px;}
/* ---------- Tooltip ---------- */.xe-tooltip { position: relative; display: inline-block; text-decoration: underline dotted; cursor: help;}.xe-tooltip::after { content: attr(data-tooltip); position: absolute; bottom: calc(100% + 6px); left: 50%; transform: translateX(-50%); background: var(--fg-0); color: var(--bg-hard); padding: 4px 8px; border-radius: var(--radius-sm); font-size: var(--step--1); white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity var(--duration-fast) var(--ease-standard); z-index: var(--z-tooltip);}.xe-tooltip:hover::after,.xe-tooltip:focus-visible::after { opacity: 1;}
/* ---------- Mobile breakpoint ---------- */@media (max-width: 48rem) { .xe-nextprev { grid-template-columns: 1fr; } .xe-nextprev__next { grid-column-start: 1; align-items: flex-start; text-align: left; } .xe-dl { grid-template-columns: 1fr; gap: var(--space-1); }}
/* ====================================================================== *//* leveva docs site chrome — header / nav / footer + markdown prose. *//* Built on the xess tokens above; everything uses xess custom properties *//* so it tracks the light/dark palette automatically. *//* ====================================================================== */
.site-header { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--space-2) var(--space-5); max-width: 50rem; margin: 0 auto; padding: var(--space-4) 2rem var(--space-3); border-bottom: 2px solid var(--border);}.site-header .brand { font-family: var(--font-serif); font-weight: 700; font-size: var(--step-3); color: var(--link); text-decoration: none; margin-right: auto;}/* The header's own nav is a horizontal bar — cancel the xess `nav` margin. */.site-header nav { display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-4); margin-bottom: 0;}.site-header nav a,.site-header nav summary { color: var(--text); text-decoration: none; padding: 2px 6px; border-radius: var(--radius-sm);}/* Keep the signature magenta invert-on-hover for the chrome links too. */.site-header .brand:hover,.site-header nav a:hover,.site-header nav summary:hover { color: var(--link-hover); background: var(--link-hover-bg);}/* The current page reads as magenta + underline, so visitors know where they are. */.site-header nav a.is-current { color: var(--link); text-decoration: underline; text-underline-offset: 3px;}
/* "Docs" disclosure menu — a <details> popover, no JS required. */.nav-docs { position: relative;}.nav-docs > summary { cursor: pointer; list-style: none; /* hide the default disclosure triangle... */ user-select: none;}.nav-docs > summary::-webkit-details-marker { display: none;}.nav-docs > summary::after { content: " \25be"; /* ...and supply our own ▾ caret. */ color: var(--text-muted);}.nav-docs[open] > summary::after { content: " \25b4"; /* ▴ when open */}.nav-docs.is-active > summary { color: var(--link); /* a doc page is active → highlight the group */}.nav-docs__menu { position: absolute; top: calc(100% + var(--space-2)); left: 0; z-index: 20; display: flex; flex-direction: column; gap: 2px; min-width: 12rem; padding: var(--space-2); background: var(--surface-raised); border: 1px solid var(--border); border-radius: var(--radius-md); box-shadow: var(--shadow-md);}.nav-docs__menu a { display: block;}
.site-footer { max-width: 50rem; margin: var(--space-7) auto 0; padding: var(--space-4) 2rem; border-top: 1px solid var(--border); text-align: center; color: var(--text-muted); font-size: var(--step--1);}
/* The article wrapper used by index.html / page.html / section.html. */.prose > :last-child { margin-bottom: 0;}
/* Markdown tables render as plain <table> (xess only styles `.xe-table`), so give them the same treatment here using xess tokens. */.prose table { width: 100%; border-collapse: collapse; margin: var(--space-4) 0; font-size: var(--step-0); border: 1px solid var(--bg-4);}.prose th,.prose td { padding: var(--space-2) var(--space-3); text-align: left; vertical-align: top;}.prose thead th { background: var(--bg-1); border-bottom: 2px solid var(--bg-3); font-weight: 600; color: var(--fg-0);}.prose tbody tr:nth-child(even) { background: var(--bg-0);}.prose tbody tr + tr { border-top: 1px solid var(--bg-3);}
/* ---------- Blog ---------- */.post-date { color: var(--text-muted); font-size: var(--step--1); margin-top: calc(-1 * var(--space-2));}.post-list { list-style: none; padding: 0; margin: var(--space-5) 0 0;}.post-list__item { padding: var(--space-4) 0; border-top: 1px solid var(--border);}.post-list__item:last-child { border-bottom: 1px solid var(--border);}.post-list__title { font-family: var(--font-serif); font-size: var(--step-2); font-weight: 600;}.post-list__date { display: block; color: var(--text-muted); font-size: var(--step--1); margin-top: var(--space-1);}.post-list__desc { margin: var(--space-2) 0 0; color: var(--fg-2);}