kepr.css

68.7 KB · raw

1/* Amber carries the brand; neighbouring gold and warm red keep the palette cohesive. */23:root {4	--bg: #0d0805;5	--bg-surface: #150d07;6	--bg-elevated: #22160c;7	--border: #3d2814;8	--text: #efe3d3;9	--text-secondary: #c9ab9c;10	--text-muted: #ad9385;11	--text-faint: #978779;12	--text-heading: #fff4e8;13	--accent: #ffad33;14	--accent-bright: #ffd166;15	--accent-dim: #b8741c;16	--red: #ff5c4d;17	--accent-tint-04: rgba(255, 173, 51, 0.04);18	--accent-tint-12: rgba(255, 173, 51, 0.12);19	--sage: #9ad65f;20	--syntax-red: #ff8f86;21	--sans: "Quicksand", system-ui, sans-serif;22	--mono: "Martian Mono", ui-monospace, monospace;23	caret-color: var(--accent);24	accent-color: var(--accent);25}2627::selection {28	background: var(--accent-bright);29	color: var(--bg);30}3132a:focus-visible,33button:focus-visible,34input:focus-visible,35textarea:focus-visible,36select:focus-visible,37summary:focus-visible {38	outline: 1px solid var(--accent);39	outline-offset: 4px;40}4142* {43	box-sizing: border-box;44	scrollbar-width: thin;45	scrollbar-color: var(--border) transparent;46}4748html,49body {50	margin: 0;51	padding: 0;52	background: var(--bg);53	color: var(--text);54	font-family: var(--sans);55	font-size: 16px;56	line-height: 1.6;57	overflow-x: hidden;58}59body {60	background:61		radial-gradient(ellipse 90% 60% at 50% -15%, rgba(255, 173, 51, 0.12), transparent 70%) fixed,62		var(--bg);63}6465a {66	color: inherit;67	text-decoration: none;68}69a:hover {70	text-decoration: underline;71	text-decoration-color: var(--accent);72	text-decoration-thickness: 1px;73	text-underline-offset: 4px;74}7576/* ----- top bar ------------------------------------------------------------ */7778body > nav {79	display: flex;80	align-items: center;81	padding: 24px 48px;82	font-size: 0.6875rem;83	letter-spacing: 0.04em;84}85.wordmark {86	display: flex;87	color: var(--accent);88}89.wordmark:hover {90	text-decoration: none;91}92.wordmark-icon {93	display: block;94	width: 32px;95	height: 32px;96	color: var(--accent);97}98.wordmark-icon polygon {99	fill: none;100	stroke: currentColor;101	stroke-linejoin: round;102}103.tri-outer polygon {104	stroke-width: 2;105}106.tri-inner polygon {107	stroke-width: 1.5;108}109.tri-outer,110.tri-inner {111	transform-origin: 16px 16px;112}113/* The outer triangle stays gold; the inner one flashes red now and then. */114.tri-outer {115	animation: tri-ccw 12s linear infinite;116}117.tri-inner {118	animation:119		tri-cw 8s linear infinite,120		amber-flash 11s ease-in-out infinite;121}122@keyframes tri-ccw {123	to {124		transform: rotate(-360deg);125	}126}127@keyframes tri-cw {128	to {129		transform: rotate(360deg);130	}131}132@keyframes amber-flash {133	0%,134	90%,135	100% {136		color: var(--accent);137	}138	95% {139		color: var(--accent-bright);140	}141}142.wordmark-by {143	margin-left: 10px;144	font-size: 0.625rem;145	color: var(--text-faint);146	letter-spacing: 0.03em;147}148.nav-links {149	margin-left: auto;150	display: inline-flex;151	gap: 28px;152	font-family: var(--mono);153}154.nav-links a {155	color: var(--text-secondary);156}157.nav-logout {158	margin: 0;159}160.nav-toggle {161	display: none;162}163.nav-logout button {164	border: 0;165	padding: 0;166	background: none;167	color: var(--text-secondary);168	font: inherit;169	letter-spacing: inherit;170	cursor: pointer;171}172.nav-logout button:hover {173	text-decoration: underline;174	text-decoration-color: var(--accent);175}176177.nav-notifications {178	position: relative;179	margin-left: 24px;180	font-family: var(--mono);181}182.nav-notifications summary {183	position: relative;184	display: flex;185	align-items: center;186	justify-content: center;187	width: 36px;188	height: 36px;189	cursor: pointer;190	list-style: none;191	color: var(--text);192}193.nav-notifications summary::-webkit-details-marker {194	display: none;195}196.nav-notifications svg {197	width: 20px;198	height: 20px;199	fill: none;200	stroke: currentColor;201	stroke-width: 1.5;202	stroke-linecap: round;203	stroke-linejoin: round;204}205.notification-dot {206	position: absolute;207	top: 4px;208	right: 4px;209	width: 7px;210	height: 7px;211	border-radius: 50%;212	background: var(--accent-bright);213}214.notification-preview {215	position: absolute;216	top: calc(100% + 8px);217	right: 0;218	z-index: 20;219	width: min(340px, calc(100vw - 32px));220	max-height: 70vh;221	overflow-y: auto;222	padding: 16px;223	background: var(--bg-elevated);224	border: 1px solid var(--border);225	font-size: 0.75rem;226	line-height: 1.6;227}228.notification-preview strong {229	display: block;230	margin-bottom: 12px;231	color: var(--heading);232}233.notification-list > a {234	display: block;235	padding: 12px 0;236	border-top: 1px solid var(--border);237	overflow-wrap: anywhere;238	color: var(--text);239}240.notification-list small {241	display: block;242	margin-top: 4px;243	color: var(--text-secondary);244}245.notification-all {246	display: block;247	margin-top: 12px;248}249250main {251	max-width: 980px;252	margin: 0 auto;253	padding: 24px 48px 120px;254}255256footer {257	text-align: center;258	padding: 80px 24px 48px;259}260footer .credit {261	font-family: var(--mono);262	font-size: 0.6875rem;263	color: var(--text-muted);264}265266.mono {267	font-family: var(--mono);268	font-size: 0.8125rem;269	color: var(--text-secondary);270}271.muted {272	color: var(--text-muted);273}274275@keyframes fadeUp {276	from {277		opacity: 0;278		transform: translateY(6px);279	}280	to {281		opacity: 1;282		transform: translateY(0);283	}284}285@keyframes fadeIn {286	from {287		opacity: 0;288	}289}290291/* ----- repo header -------------------------------------------------------- */292293.repo-head {294	margin: 20px 0 24px;295}296.repo-name {297	font-family: "Comfortaa", var(--sans);298	font-weight: 700;299	font-size: 4rem;300	line-height: 1.05;301	margin: -0.1em 0 10px;302	color: var(--text);303	overflow-wrap: anywhere;304	animation: fadeUp 280ms ease both;305}306.repo-contributor {307	margin: 4px 0 0;308	font-size: 0.8125rem;309	color: var(--accent);310	animation: fadeUp 280ms 40ms ease both;311}312.repo-desc,313.repo-homepage {314	margin: 0 0 10px;315	font-size: 1.0625rem;316	color: var(--text-secondary);317	line-height: 1.75;318	animation: fadeUp 280ms 30ms ease both;319}320.repo-desc p {321	margin: 12px 0 0;322}323.repo-desc a,324.repo-homepage a {325	color: var(--accent);326}327.repo-desc code {328	font-family: var(--mono);329	font-size: 0.85em;330	color: var(--accent);331}332.lang-badges {333	display: flex;334	flex-wrap: wrap;335	gap: 6px;336	margin: 8px 0 6px;337}338.lang-badge {339	font-family: var(--mono);340	font-size: 0.6875rem;341	color: var(--text-secondary);342	background: var(--bg-surface);343	border: 1px solid var(--border);344	border-radius: 3px;345	padding: 1px 7px;346	letter-spacing: 0.02em;347}348.repo-version {349	color: var(--accent-bright);350}351.repo-meta {352	margin: 0;353	font-size: 0.875rem;354	color: var(--text-muted);355	line-height: 1.7;356	animation: fadeUp 280ms 60ms ease both;357}358.repo-tabbar {359	display: flex;360	align-items: center;361	justify-content: space-between;362	flex-wrap: wrap;363	gap: 14px 20px;364	margin-top: 22px;365}366.repo-tabs {367	display: flex;368	gap: 24px;369	flex-wrap: wrap;370	font-family: var(--mono);371	animation: fadeUp 280ms 90ms ease both;372}373.repo-tab {374	font-size: 0.6875rem;375	color: var(--text-muted);376	padding: 0 0 11px;377	border-bottom: 1px solid transparent;378	transition:379		color 140ms,380		border-color 140ms;381}382.repo-tab:hover {383	color: var(--accent);384	text-decoration: none;385}386.repo-tab.active {387	color: var(--accent);388	border-bottom-color: var(--accent);389}390.repo-issue-count {391	position: relative;392	top: -5px;393	display: inline-flex;394	align-items: center;395	justify-content: center;396	min-width: 18px;397	height: 18px;398	margin-left: 0.5em;399	padding: 0 5px;400	border-radius: 999px;401	background: var(--red);402	color: var(--bg);403	font-size: 10px;404	font-weight: 700;405	line-height: 1;406}407.repo-panel {408	padding: 10px 0 16px;409	animation: fadeIn 220ms ease both;410}411.repo-panel[hidden] {412	display: none;413}414/* Inline, archives and builds show about five entries and scroll; their own pages show all. */415.repo-panel .repo-section:has(> .archive-row, > .release-latest) {416	max-height: 420px;417	overflow-y: auto;418	scrollbar-width: thin;419	scrollbar-color: var(--border) transparent;420}421.repo-steal-btn {422	display: block;423	width: fit-content;424	max-width: 100%;425	font-family: var(--mono);426	font-size: 0.75rem;427	color: var(--text-muted);428	background: var(--bg-surface);429	border: 1px solid var(--border);430	border-radius: 3px;431	padding: 5px 11px;432	cursor: pointer;433	letter-spacing: 0.03em;434	white-space: nowrap;435	overflow: hidden;436	text-overflow: ellipsis;437	transition:438		color 120ms,439		border-color 120ms;440}441.repo-steal-btn:hover {442	color: var(--accent);443	border-color: var(--accent-dim);444}445.repo-steal-btn.copied {446	color: var(--sage);447	border-color: var(--sage);448}449.install-lines {450	display: flex;451	flex-direction: column;452	align-items: flex-end;453	gap: 6px;454	max-width: 100%;455	margin-left: auto;456	animation: fadeUp 280ms 120ms ease both;457}458.install-line {459	display: flex;460	align-items: center;461	gap: 12px;462	max-width: 100%;463	font-family: var(--mono);464	font-size: 0.75rem;465	color: var(--text-muted);466	background: var(--bg-surface);467	border: 1px solid var(--border);468	border-radius: 3px;469	padding: 5px 11px;470}471.install-line code {472	white-space: pre;473	overflow-x: auto;474	font-family: inherit;475}476.copy-btn {477	background: none;478	border: 0;479	padding: 0;480	cursor: pointer;481	font: inherit;482	font-size: 0.625rem;483	color: var(--text-faint);484	letter-spacing: 0.04em;485}486.copy-btn:hover {487	color: var(--accent);488}489.copy-btn.copied {490	color: var(--sage);491}492493/* ----- sections ----------------------------------------------------------- */494495.repo-section {496	margin: 36px 0 0;497	animation: fadeIn 320ms 80ms ease both;498}499.repo-section-toggle > summary,500.repo-details-toggle > summary {501	list-style: none;502	cursor: pointer;503	user-select: none;504}505.repo-section-toggle > summary::-webkit-details-marker,506.repo-details-toggle > summary::-webkit-details-marker {507	display: none;508}509.section-head {510	display: flex;511	align-items: baseline;512	gap: 12px;513	padding-bottom: 8px;514	border-bottom: 1px solid var(--border);515	margin-bottom: 4px;516}517.section-head::after,518.repo-details-head::after {519	content: "▸";520	font-size: 0.5625rem;521	opacity: 0.4;522	transition: transform 120ms;523}524.section-head::after {525	margin-left: auto;526}527details[open] > .section-head::after,528details[open] > .repo-details-head::after {529	transform: rotate(90deg);530}531.section-label {532	font-size: 0.6875rem;533	letter-spacing: 0.12em;534	color: var(--text-secondary);535	text-transform: uppercase;536}537.section-count {538	font-family: var(--mono);539	font-size: 0.6875rem;540	color: var(--accent);541}542543/* ----- timeline ----------------------------------------------------------- */544545.timeline {546	display: block;547	margin: 18px 0 4px;548	overflow: visible;549}550.timeline-line {551	stroke: var(--text-faint);552	stroke-width: 1;553	stroke-dasharray: 4 4;554}555.timeline .dot {556	fill: var(--accent);557}558.timeline-pending .timeline .dot {559	visibility: hidden;560}561.timeline .d0 {562	fill: var(--accent-dim);563	fill-opacity: 0.45;564}565.timeline .d1 {566	fill-opacity: 0.55;567}568.timeline .d2 {569	fill-opacity: 0.8;570}571.timeline .d3 {572	fill: var(--accent-bright);573	fill-opacity: 1;574}575.timeline-canvas {576	display: block;577	margin: 18px 0 4px;578	cursor: grab;579	touch-action: pan-y;580}581.timeline-tip {582	position: fixed;583	z-index: 200;584	max-width: 340px;585	padding: 0.45rem 0.7rem;586	background: var(--bg-elevated);587	border: 1px solid var(--border);588	border-radius: 4px;589	pointer-events: none;590	line-height: 1.5;591}592.timeline-tip .tip-id {593	font-family: var(--mono);594	font-size: 12px;595	color: var(--accent);596}597.timeline-tip .tip-msg {598	margin-top: 3px;599	font-style: italic;600	font-size: 15px;601	color: var(--text-heading);602}603.timeline-tip .tip-meta {604	margin-top: 4px;605	font-family: var(--mono);606	font-size: 10px;607	color: var(--text-muted);608}609610/* ----- history ------------------------------------------------------------ */611612.history-row {613	position: relative;614	display: grid;615	grid-template-columns: 110px 1fr auto;616	align-items: baseline;617	gap: 0 10px;618	padding: 9px 8px;619	border-bottom: 1px solid var(--border);620	transition: background 100ms;621}622.history-row::before {623	content: "";624	position: absolute;625	left: 0;626	top: 0;627	bottom: 0;628	width: 2px;629	background: var(--accent);630	transform: scaleY(0);631	transition: transform 120ms ease;632}633.history-row:hover {634	background: var(--accent-tint-04);635	text-decoration: none;636}637.history-row:hover::before {638	transform: scaleY(1);639}640.history-id {641	font-family: var(--mono);642	font-size: 0.75rem;643	color: var(--text-secondary);644}645.history-msg {646	min-width: 0;647	line-height: 1.7;648	overflow: hidden;649	text-overflow: ellipsis;650	white-space: nowrap;651	transition: color 100ms;652}653.history-row:hover .history-msg {654	color: var(--accent);655}656.history-when {657	font-family: var(--mono);658	font-size: 0.6875rem;659	color: var(--text-muted);660	white-space: nowrap;661}662/* Kepr 2's history: four rows at a time, the rest a scroll away. */663.save-list {664	max-height: 180px;665	overflow-y: auto;666	scrollbar-width: thin;667	scrollbar-color: var(--border) transparent;668}669.pager {670	display: flex;671	justify-content: space-between;672	margin: 14px 0 0;673	font-size: 0.6875rem;674}675.pager a:last-child {676	margin-left: auto;677}678.pager a:hover {679	color: var(--accent);680}681682/* ----- atlas -------------------------------------------------------------- */683684.atlas-bar {685	display: flex;686	align-items: center;687	flex-wrap: wrap;688	gap: 8px 14px;689	margin: 10px 0 8px;690	font-size: 0.625rem;691}692.atlas-picker {693	position: relative;694}695/* Each section's fade-in makes it a stacking context, so the picker's popover would sit under the696   sections after it; the Atlas's section is lifted above them. */697#atlas {698	position: relative;699	z-index: 2;700}701.atlas-picker [hidden] {702	display: none;703}704.atlas-ref-tab {705	list-style: none;706	cursor: pointer;707	padding: 4px 8px;708	background: var(--bg);709	border: 1px solid rgba(255, 173, 51, 0.45);710	border-radius: 2px;711	font-size: 0.625rem;712	color: var(--accent);713}714.atlas-ref-tab::-webkit-details-marker {715	display: none;716}717.atlas-ref-tab:hover {718	color: var(--accent-dim);719}720.atlas-picker-popover {721	position: absolute;722	top: calc(100% + 6px);723	left: 0;724	z-index: 50;725	display: flex;726	flex-direction: column;727	width: min(420px, 90vw);728	max-height: 480px;729	background: var(--bg);730	border: 1px solid var(--text-faint);731	box-shadow: 0 18px 48px rgba(0, 0, 0, 0.48);732}733.atlas-picker-filter {734	padding: 8px 10px;735	background: var(--bg);736	border: 0;737	border-bottom: 1px solid var(--bg-elevated);738	outline: none;739	font-size: 0.6875rem;740	color: var(--text-heading);741}742.atlas-picker-filter::placeholder {743	color: var(--text-faint);744}745.atlas-picker-list {746	flex: 1 1 auto;747	min-height: 0;748	overflow: auto;749	scrollbar-width: thin;750	scrollbar-color: var(--border) transparent;751}752.atlas-picker-row {753	display: grid;754	grid-template-columns: 80px 1fr auto;755	align-items: center;756	gap: 8px;757	padding: 6px 10px;758	border-bottom: 1px solid rgba(61, 40, 20, 0.4);759	color: var(--text-muted);760}761.atlas-picker-row:hover {762	background: rgba(255, 173, 51, 0.06);763	text-decoration: none;764}765.atlas-picker-row.active {766	background: rgba(255, 173, 51, 0.1);767}768.atlas-picker-row:hover *,769.atlas-picker-row.active * {770	color: var(--accent);771}772.atlas-picker-id,773.atlas-picker-age {774	font-family: var(--mono);775	font-size: 0.5625rem;776	color: var(--text-faint);777	white-space: nowrap;778	overflow: hidden;779	text-overflow: ellipsis;780}781.atlas-picker-msg {782	font-size: 0.6875rem;783	white-space: nowrap;784	overflow: hidden;785	text-overflow: ellipsis;786}787.atlas-head-link {788	color: var(--accent);789}790.atlas-fold-btn {791	margin-left: auto;792}793.atlas-fold-btn,794.atlas-search-btn {795	padding: 4px 8px;796	background: transparent;797	border: 1px solid var(--border);798	border-radius: 2px;799	font: inherit;800	font-size: 0.625rem;801	color: var(--text-faint);802	cursor: pointer;803}804.atlas-fold-btn:hover,805.atlas-search-btn:hover {806	color: var(--accent);807	border-color: var(--accent-dim);808}809.atlas-fold-btn[hidden],810.atlas-search-btn[hidden],811.atlas-filter[hidden] {812	display: none;813}814.atlas-filter {815	width: 220px;816	max-width: 100%;817	padding: 5px 10px;818	background: transparent;819	border: 1px solid var(--border);820	border-radius: 3px;821	color: var(--text);822	font-size: 0.6875rem;823}824.atlas-filter:focus {825	outline: none;826	border-color: var(--accent-dim);827}828.atlas-filter::placeholder {829	color: var(--text-faint);830}831/* kepr.js fixes the height at the closed tree's, at most Kepr 2's 520px, and the tree and panel832   scroll inside it; without it, the whole box scrolls. */833.atlas {834	display: grid;835	grid-template-columns: minmax(0, 1fr);836	grid-template-rows: minmax(0, 1fr);837	gap: 0 20px;838	max-height: 520px;839	overflow-y: auto;840	border-top: 1px solid var(--bg-elevated);841	border-bottom: 1px solid var(--bg-elevated);842}843.atlas-tree,844.atlas-panel {845	min-height: 0;846	overflow-y: auto;847	scrollbar-width: thin;848	scrollbar-color: var(--border) transparent;849}850.atlas:has(> .atlas-panel:not([hidden])) {851	grid-template-columns: minmax(0, 1.25fr) minmax(0, 0.75fr);852}853.atlas [hidden] {854	display: none;855}856.atlas-folder > summary {857	list-style: none;858}859.atlas-folder > summary::-webkit-details-marker {860	display: none;861}862.atlas-children {863	padding-left: 14px;864	border-left: 1px solid var(--border);865	margin-left: 6px;866}867.atlas-row {868	position: relative;869	display: grid;870	grid-template-columns: minmax(90px, auto) 1fr auto;871	align-items: baseline;872	gap: 0 12px;873	padding: 6px 8px;874	border-bottom: 1px solid rgba(61, 40, 20, 0.62);875	cursor: pointer;876	transition: background 100ms;877}878.atlas-row:hover,879.atlas-row:focus-visible,880.atlas-row.selected {881	outline: none;882	background: var(--accent-tint-04);883	text-decoration: none;884}885.atlas-row.selected {886	box-shadow: inset 2px 0 0 var(--accent);887}888.atlas-name {889	color: var(--text-heading);890	font-size: 0.875rem;891	white-space: nowrap;892}893.atlas-folder > summary .atlas-name {894	color: var(--accent);895}896.atlas-desc {897	min-width: 0;898	color: var(--text-muted);899	font-size: 0.8125rem;900	overflow: hidden;901	text-overflow: ellipsis;902	white-space: nowrap;903}904.atlas-meta {905	font-size: 0.625rem;906	color: var(--text-faint);907	white-space: nowrap;908}909.atlas-panel {910	padding: 12px 0 12px 16px;911	border-left: 1px solid var(--border);912}913.atlas-hint {914	margin: 0;915	font-size: 0.625rem;916	color: var(--text-faint);917}918.atlas-info-name {919	margin: 0;920	font-weight: 400;921	font-size: 1.375rem;922	color: var(--text-heading);923	overflow-wrap: anywhere;924}925.atlas-info-path {926	margin: 0 0 12px;927	font-size: 0.625rem;928	color: var(--text-faint);929	overflow-wrap: anywhere;930}931.atlas-facts {932	display: grid;933	grid-template-columns: auto 1fr;934	gap: 3px 12px;935	margin: 0 0 12px;936	font-size: 0.625rem;937}938.atlas-facts dt {939	color: var(--text-faint);940}941.atlas-facts dd {942	margin: 0;943	color: var(--text);944}945.atlas-facts a {946	color: var(--accent);947}948.atlas-info-desc {949	font-size: 0.8125rem;950	color: var(--text-muted);951}952/* ----- README and rendered Markdown --------------------------------------- */953954.repo-details {955	margin: 36px 0 0;956	animation: fadeIn 320ms 80ms ease both;957}958.repo-details-toggle {959	border-bottom: 1px solid var(--border);960	padding-bottom: 24px;961}962.repo-details-head {963	display: flex;964	align-items: center;965	gap: 6px;966	padding: 8px 0;967	font-family: var(--mono);968	font-size: 0.6875rem;969	letter-spacing: 0.12em;970	color: var(--text-secondary);971	text-transform: uppercase;972}973.markdown {974	font-size: 1.05rem;975	line-height: 1.7;976	overflow-wrap: break-word;977}978.markdown h1,979.markdown h2,980.markdown h3,981.markdown h4 {982	font-weight: 400;983	margin: 1.4em 0 0.4em;984	color: var(--text-heading);985}986.markdown h1 {987	font-size: 1.5rem;988}989.markdown h2 {990	font-size: 1.3rem;991}992.markdown h3 {993	font-size: 1.15rem;994}995.markdown p {996	margin: 0.8em 0;997}998.markdown ul,999.markdown ol {1000	margin: 0.8em 0 0.8em 1.5em;1001	padding: 0;1002}1003.markdown a {1004	color: var(--accent);1005}1006.markdown code {1007	font-family: var(--mono);1008	font-size: 0.82em;1009	color: var(--accent);1010	background: var(--bg-surface);1011	padding: 0.15em 0.35em;1012	border-radius: 3px;1013}1014.markdown pre {1015	background: var(--bg-surface);1016	border-radius: 4px;1017	padding: 1em 1.2em;1018	overflow-x: auto;1019	margin: 1em 0;1020}1021.markdown pre code {1022	background: none;1023	padding: 0;1024	color: var(--text);1025	font-size: 0.85em;1026}1027.markdown blockquote {1028	border-left: 3px solid var(--border);1029	margin: 1em 0;1030	padding: 0.1em 1em;1031	color: var(--text-secondary);1032}1033.markdown hr {1034	border: none;1035	border-top: 1px solid var(--border);1036	margin: 1.5em 0;1037}1038.markdown img {1039	max-width: 100%;1040}1041.markdown table {1042	border-collapse: collapse;1043	display: block;1044	overflow-x: auto;1045}1046.markdown th,1047.markdown td {1048	border: 1px solid var(--border);1049	padding: 4px 10px;1050}10511052/* ----- file viewer -------------------------------------------------------- */10531054.breadcrumb {1055	margin: 0 0 4px;1056	font-size: 0.75rem;1057	overflow-wrap: anywhere;1058}1059.breadcrumb a:hover {1060	color: var(--accent);1061}1062.file-page-title {1063	font-size: 1.75rem;1064	font-weight: 400;1065	margin: 4px 0 12px;1066	overflow-wrap: anywhere;1067}1068.file-meta,1069.file-toggle {1070	margin: 0 0 12px;1071	font-size: 0.6875rem;1072}1073.file-meta a,1074.file-toggle a.active {1075	color: var(--accent);1076}1077.file-image img {1078	max-width: 100%;1079	background: var(--bg-surface);1080	border: 1px solid var(--border);1081}1082.file-view {1083	border: 1px solid var(--border);1084	background: var(--bg-surface);1085	overflow-x: auto;1086}1087.code {1088	margin: 0;1089	padding: 16px 0;1090	font-family: var(--mono);1091	font-size: 0.8125rem;1092	line-height: 1.65;1093	tab-size: 4;1094}1095/* A grid, so tab stops count from the start of the code rather than the line number. */1096.code .line {1097	display: grid;1098	grid-template-columns: 6em 1fr;1099	padding-right: 24px;1100	scroll-margin-top: 40vh;1101}1102.code .line:target,1103.code .line.hl {1104	background: var(--accent-tint-12);1105}1106.code .lc {1107	white-space: pre;1108}1109.code .ln {1110	padding-right: 1.5em;1111	text-align: right;1112	color: var(--text-faint);1113	user-select: none;1114}1115.code .ln:hover {1116	color: var(--accent);1117	text-decoration: none;1118}11191120/* A gold-to-amber-to-red range keeps syntax vivid without colouring every identifier. */1121.tk-comment {1122	color: var(--text-muted);1123	font-style: italic;1124}1125.tk-keyword,1126.tk-constant {1127	color: var(--accent);1128}1129.tk-string,1130.tk-string-expression {1131	color: var(--accent-bright);1132}1133.tk-function {1134	color: var(--syntax-red);1135}1136.tk-parameter {1137	color: var(--text);1138}1139.tk-punctuation {1140	color: var(--text-secondary);1141}1142.tk-link {1143	color: var(--accent);1144	text-decoration: underline;1145}1146.tk-inserted {1147	color: var(--sage);1148}1149.tk-deleted {1150	color: var(--red);1151}1152.tk-i {1153	font-style: italic;1154}11551156/* ----- save page ---------------------------------------------------------- */11571158.save-id {1159	margin: 12px 0 0;1160	font-size: 0.75rem;1161	color: var(--text-secondary);1162}1163.save-flag {1164	margin: 12px 0 0;1165	padding: 8px 12px;1166	border: 1px solid #7a2a1e;1167	border-left: 2px solid var(--red);1168	background: rgba(255, 92, 77, 0.08);1169	color: var(--text-heading);1170}1171.save-flag-label {1172	margin-right: 8px;1173	font-size: 0.625rem;1174	letter-spacing: 0.12em;1175	text-transform: uppercase;1176	color: var(--red);1177}1178.save-message-head {1179	font-size: 2.25rem;1180	font-weight: 400;1181	line-height: 1.3;1182	margin: 12px 0 8px;1183	color: var(--text-heading);1184	overflow-wrap: anywhere;1185	animation: fadeUp 280ms ease both;1186}1187.save-message-body {1188	margin: 0 0 12px;1189	white-space: pre-wrap;1190	color: var(--text-secondary);1191}1192.save-facts {1193	display: grid;1194	grid-template-columns: max-content 1fr;1195	gap: 2px 16px;1196	margin: 16px 0;1197	font-size: 0.75rem;1198}1199.save-facts dt {1200	color: var(--text-faint);1201}1202.save-facts dd {1203	margin: 0;1204	overflow-wrap: anywhere;1205}1206.save-facts a,1207.save-links a,1208.diff-view a {1209	color: var(--accent);1210}1211.save-links {1212	display: flex;1213	flex-wrap: wrap;1214	gap: 8px 20px;1215	margin: 0;1216	font-size: 0.75rem;1217}1218.save-empty {1219	font-size: 0.75rem;1220}1221.change-row,1222.diff-head {1223	display: grid;1224	grid-template-columns: 1fr auto;1225	gap: 12px;1226	padding: 7px 8px;1227	border-bottom: 1px solid var(--border);1228	font-family: var(--mono);1229	font-size: 0.8125rem;1230}1231.change-row:hover {1232	background: var(--accent-tint-04);1233	text-decoration: none;1234}1235.change-path {1236	min-width: 0;1237	overflow-wrap: anywhere;1238}1239.change-added .change-path {1240	color: var(--sage);1241}1242.change-removed .change-path {1243	color: var(--text-muted);1244	text-decoration: line-through;1245}1246.change-modified .change-path {1247	color: var(--accent-bright);1248}1249.change-stat {1250	font-size: 0.75rem;1251	white-space: nowrap;1252}1253.diff-add {1254	color: var(--sage);1255}1256.diff-del {1257	color: var(--red);1258}1259.diff-note {1260	color: var(--text-faint);1261	font-size: 0.6875rem;1262}1263.diff-file {1264	margin: 0 0 20px;1265}1266.diff-head {1267	cursor: pointer;1268	list-style: none;1269	border: 1px solid var(--border);1270	background: var(--bg-surface);1271}1272.diff-head::-webkit-details-marker {1273	display: none;1274}1275.diff-file > .file-view {1276	border-top: 0;1277}1278.diff-file > .diff-note,1279.diff-view {1280	margin: 8px 0 0;1281	font-size: 0.6875rem;1282}1283.code.diff {1284	padding: 4px 0;1285}1286.diff .dl {1287	display: grid;1288	grid-template-columns: 3.5em 3.5em 1.5em 1fr;1289	padding-right: 24px;1290}1291.diff .dh {1292	display: block;1293	padding: 4px 1em;1294	color: var(--text-faint);1295	background: var(--bg-elevated);1296}1297.diff .ln {1298	padding-right: 0.75em;1299	text-align: right;1300	color: var(--text-faint);1301	user-select: none;1302}1303.diff .ds {1304	text-align: center;1305	color: var(--text-faint);1306	user-select: none;1307}1308.diff .dl-add {1309	background: rgba(154, 214, 95, 0.1);1310}1311.diff .dl-add .ds {1312	color: var(--sage);1313}1314.diff .dl-del {1315	background: rgba(255, 92, 77, 0.08);1316}1317.diff .dl-del .ds {1318	color: var(--red);1319}13201321/* ----- archives ----------------------------------------------------------- */13221323.archive-row {1324	padding: 12px 8px;1325	border-bottom: 1px solid var(--border);1326}1327.archive-save {1328	display: flex;1329	flex-wrap: wrap;1330	align-items: baseline;1331	gap: 0 10px;1332	margin: 0;1333}1334.archive-save .history-id {1335	flex: 0 0 110px;1336}1337.archive-msg {1338	flex: 1;1339}1340.archive-head {1341	font-size: 0.625rem;1342	letter-spacing: 0.08em;1343	color: var(--accent);1344	border: 1px solid var(--accent-dim);1345	border-radius: 2px;1346	padding: 0 6px;1347}1348.archive-save .history-id:hover {1349	color: var(--accent);1350}1351.archive-links {1352	display: flex;1353	flex-wrap: wrap;1354	align-items: center;1355	gap: 12px;1356	margin: 6px 0;1357	font-size: 0.75rem;1358}1359.archive-links a {1360	color: var(--accent);1361}1362.archive-row .install-line {1363	justify-content: space-between;1364}1365.archive-row--head {1366	background: var(--accent-tint-04);1367	border-top: 1px solid var(--accent-dim);1368}13691370/* ----- phone -------------------------------------------------------------- */13711372@media (max-width: 768px) {1373	body > nav {1374		padding: 20px 16px;1375	}1376	/* Without the menu script the links wrap in the bar instead of running off it. */1377	.nav-links {1378		flex-wrap: wrap;1379		justify-content: flex-end;1380		gap: 8px 18px;1381		min-width: 0;1382	}1383	.nav--menu {1384		position: relative;1385	}1386	.nav--menu .nav-toggle {1387		display: flex;1388		flex-direction: column;1389		justify-content: center;1390		gap: 4px;1391		width: 36px;1392		height: 36px;1393		margin: -8px -8px -8px auto;1394		padding: 8px;1395		border: 0;1396		background: none;1397		color: var(--text-secondary);1398		cursor: pointer;1399	}1400	.nav-toggle span {1401		height: 1.5px;1402		background: currentColor;1403		transition:1404			transform 0.2s ease,1405			opacity 0.2s ease;1406	}1407	.nav--open .nav-toggle {1408		color: var(--accent);1409	}1410	.nav--open .nav-toggle span:nth-child(1) {1411		transform: translateY(5.5px) rotate(45deg);1412	}1413	.nav--open .nav-toggle span:nth-child(2) {1414		opacity: 0;1415	}1416	.nav--open .nav-toggle span:nth-child(3) {1417		transform: translateY(-5.5px) rotate(-45deg);1418	}1419	.nav--menu .nav-links {1420		display: none;1421	}1422	.nav--menu.nav--open .nav-links {1423		position: absolute;1424		top: 100%;1425		left: 0;1426		right: 0;1427		z-index: 10;1428		display: flex;1429		flex-direction: column;1430		gap: 0;1431		padding: 0 16px 8px;1432		background: var(--bg);1433		border-bottom: 1px solid var(--border);1434		font-size: 0.8125rem;1435	}1436	.nav--open .nav-links > * {1437		padding: 14px 0;1438		border-top: 1px solid var(--border);1439	}1440	main {1441		padding: 16px 16px 80px;1442	}1443	.repo-name {1444		font-size: 2.75rem;1445	}1446	.install-lines {1447		align-items: stretch;1448		margin-left: 0;1449		width: 100%;1450	}1451	.history-row {1452		grid-template-columns: 1fr auto;1453	}1454	.history-id {1455		grid-column: 1 / -1;1456	}1457	.atlas-row {1458		grid-template-columns: 1fr auto;1459	}1460	.atlas-desc {1461		grid-column: 1 / -1;1462		grid-row: 2;1463	}1464	.atlas:has(> .atlas-panel:not([hidden])) {1465		grid-template-columns: minmax(0, 1fr);1466	}1467	.atlas-panel {1468		display: none;1469	}1470	.code .line {1471		grid-template-columns: 4.5em 1fr;1472	}1473	.save-message-head {1474		font-size: 1.625rem;1475	}1476	.archive-msg {1477		flex-basis: 100%;1478		order: 1;1479	}1480	.diff .dl {1481		grid-template-columns: 2.75em 2.75em 1.25em 1fr;1482	}1483	.code .ln {1484		padding-right: 1em;1485	}1486}14871488/* ----- builds ------------------------------------------------------------- */14891490.release {1491	padding: 20px 8px 24px;1492	border-bottom: 1px solid var(--border);1493}1494.release-head {1495	display: flex;1496	flex-wrap: wrap;1497	align-items: baseline;1498	gap: 0 14px;1499	margin: 0 0 8px;1500}1501.release-version {1502	font-family: "Martian Mono", monospace;1503	font-size: 1rem;1504	color: var(--accent-bright);1505}1506.release-latest .release-version {1507	font-size: clamp(2rem, 5vw, 3.5rem);1508	letter-spacing: -0.06em;1509}1510.release-latest > p {1511	font-size: 0.6875rem;1512	margin: 16px 8px 0;1513}1514.release-earlier {1515	font-size: 0.6875rem;1516	margin: 24px 8px 4px;1517}1518.release-row .release-version {1519	flex: 0 0 80px;1520	font-size: 0.8125rem;1521}1522.release-row .archive-links {1523	gap: 4px 24px;1524}1525.release-more > summary {1526	width: fit-content;1527	font-size: 0.6875rem;1528	color: var(--text-muted);1529	cursor: pointer;1530}1531.release-more[open] > summary {1532	margin-bottom: 10px;1533}1534.release-head .history-id:hover {1535	color: var(--accent);1536}1537.release-notes {1538	margin-bottom: 14px;1539}1540.release-file {1541	padding: 10px 0;1542	border-top: 1px solid var(--border);1543}1544.release-file-head {1545	display: flex;1546	flex-wrap: wrap;1547	align-items: baseline;1548	gap: 4px 14px;1549	margin: 0;1550}1551.release-platform {1552	flex: 0 0 180px;1553}1554.release-download {1555	flex: 1;1556	font-size: 0.75rem;1557	color: var(--accent);1558	overflow-wrap: anywhere;1559}1560.release-meta,1561.release-sha {1562	font-size: 0.6875rem;1563	color: var(--text-muted);1564}1565.release-sha {1566	margin: 4px 0 0;1567	overflow-wrap: anywhere;1568}1569.release-hint {1570	margin: 4px 0 0;1571	font-size: 0.8125rem;1572}15731574/* ----- issues ------------------------------------------------------------- */15751576.issues-bar {1577	display: flex;1578	flex-wrap: wrap;1579	align-items: center;1580	gap: 8px 12px;1581	font-size: 0.75rem;1582	padding-bottom: 14px;1583	border-bottom: 1px solid var(--bg-elevated);1584}1585.issues-tab {1586	color: var(--text-faint);1587	border: 1px solid transparent;1588	border-radius: 999px;1589	padding: 4px 10px;1590}1591button.issues-tab {1592	font: inherit;1593	background: none;1594	cursor: pointer;1595}1596.issues-tab.active {1597	color: var(--accent);1598	border-color: var(--accent-tint-12);1599}1600.issues-new {1601	margin-left: auto;1602	color: var(--text-muted);1603}1604.issue-row {1605	display: grid;1606	grid-template-columns: auto minmax(0, 1fr) auto;1607	align-items: baseline;1608	gap: 2px 10px;1609	padding: 16px 8px;1610	border-bottom: 1px solid var(--border);1611}1612.issue-row:hover {1613	text-decoration: none;1614	background: var(--accent-tint-04);1615}1616.issue-title {1617	grid-column: 2 / -1;1618	overflow-wrap: anywhere;1619	color: var(--text-heading);1620}1621.issues-new:hover,1622.issue-row:hover .issue-title {1623	color: var(--accent);1624}1625.issue-meta,1626.issue-post-head {1627	font-size: 0.6875rem;1628	color: var(--text-muted);1629}1630.issue-symbol--open {1631	color: var(--sage);1632}1633.issue-symbol--closed {1634	color: var(--text-faint);1635}1636.issue-row .issue-meta {1637	grid-column: 2;1638}1639.issue-reporter {1640	font-size: 0.6875rem;1641	color: var(--text-secondary);1642	overflow-wrap: anywhere;1643}1644.issues-filter {1645	display: flex;1646	flex-wrap: wrap;1647	gap: 8px;1648	margin-bottom: 16px;1649}1650.issue-post {1651	margin: 18px 0;1652	padding: 14px 18px;1653	border: 1px solid var(--border);1654	border-radius: 6px;1655	background: var(--bg-surface);1656}1657.issue-post--operator {1658	border-color: var(--accent-dim);1659}1660.issue-post-head {1661	display: flex;1662	flex-wrap: wrap;1663	gap: 4px 12px;1664	margin: 0 0 8px;1665}1666.issue-author {1667	color: var(--text-secondary);1668}1669.issue-badge {1670	color: var(--accent-bright);1671	text-transform: uppercase;1672	letter-spacing: 0.08em;1673}1674.issue-text {1675	white-space: pre-wrap;1676	overflow-wrap: anywhere;1677}1678.issues-form {1679	display: flex;1680	flex-direction: column;1681	gap: 6px;1682	max-width: 640px;1683	margin-top: 18px;1684}1685.issues-label {1686	font-family: var(--mono);1687	font-size: 0.6875rem;1688	margin-top: 6px;1689	opacity: 0.8;1690}1691.issues-input,1692.issues-textarea {1693	font-family: var(--mono);1694	font-size: 0.75rem;1695	width: 100%;1696	padding: 6px 8px;1697	color: var(--text);1698	background: var(--bg);1699	border: 1px solid var(--border);1700	border-radius: 4px;1701	resize: vertical;1702}1703.issues-input:focus,1704.issues-textarea:focus {1705	outline: none;1706	border-color: var(--accent);1707}1708.issues-filter .issues-input {1709	width: auto;1710	min-width: 0;1711	flex: 1 1 140px;1712}1713.issues-submit {1714	align-self: flex-start;1715	margin-top: 10px;1716	padding: 6px 14px;1717	font-family: var(--mono);1718	font-size: 0.75rem;1719	color: var(--bg);1720	background: var(--accent);1721	border: none;1722	border-radius: 4px;1723	cursor: pointer;1724}1725.issues-submit:hover {1726	opacity: 0.85;1727}1728.issues-submit:disabled {1729	opacity: 0.4;1730	cursor: not-allowed;1731}1732.issues-actions {1733	display: flex;1734	align-items: center;1735	gap: 16px;1736	margin: 10px 0 0;1737}1738.issues-actions .issues-submit {1739	align-self: auto;1740	margin-top: 0;1741}1742.issues-cancel {1743	font-size: 0.75rem;1744	color: var(--text-muted);1745}1746.issues-cancel:hover {1747	color: var(--accent);1748}1749button.issues-cancel {1750	padding: 0;1751	border: 0;1752	background: none;1753	cursor: pointer;1754}1755.issues-error {1756	font-size: 0.75rem;1757	color: var(--red);1758}1759/* The honeypot: off-screen for people, still in the form for bots. */1760.issues-hp {1761	position: absolute;1762	left: -9999px;1763	height: 0;1764	overflow: hidden;1765	opacity: 0;1766}1767/* The search takes four parts of the row and the type one (June, 2026-10-08). */1768.issues-filter .issues-search {1769	flex: 4 1 0;1770}1771.issues-filter .issues-type {1772	flex: 1 1 0;1773	min-width: 7.5rem;1774}1775.issues-filter .issues-submit {1776	margin-top: 0;1777}1778@media (max-width: 520px) {1779	.issues-filter .issues-search {1780		flex-basis: 100%;1781	}1782}1783/* The thread hangs from a dashed rail, as the timeline does; each post is a dot on it. */1784.issue-thread {1785	position: relative;1786	margin-top: 22px;1787	padding-left: 22px;1788}1789.issue-thread::before {1790	content: "";1791	position: absolute;1792	left: 5px;1793	top: 24px;1794	bottom: 24px;1795	border-left: 1px dashed var(--border);1796}1797.issue-thread .issue-post {1798	position: relative;1799	scroll-margin-top: 24px;1800}1801.issue-thread .issue-post::before {1802	content: "";1803	position: absolute;1804	left: -21px;1805	top: 18px;1806	width: 7px;1807	height: 7px;1808	border-radius: 50%;1809	background: var(--bg);1810	border: 1px solid var(--text-faint);1811}1812.issue-thread .issue-post--operator::before {1813	background: var(--accent);1814	border-color: var(--accent);1815}1816.issue-post:target {1817	border-color: var(--accent-dim);1818	box-shadow: 0 0 0 3px var(--accent-tint-12);1819}1820.issue-post-head .history-when {1821	margin-left: auto;1822	color: var(--text-faint);1823}1824.issue-replying {1825	color: var(--text-faint);1826}1827.issue-replying a {1828	color: var(--text-secondary);1829}1830.markdown.issue-text {1831	white-space: normal;1832	font-size: 0.95rem;1833	line-height: 1.65;1834}1835.issue-text > :first-child {1836	margin-top: 0;1837}1838.issue-text > :last-child {1839	margin-bottom: 0;1840}1841.issue-text h1,1842.issue-text h2 {1843	font-size: 1.15rem;1844}1845.issue-text h3,1846.issue-text h4 {1847	font-size: 1rem;1848}1849/* Long logs scroll inside their block instead of stretching the thread. */1850.issue-text pre {1851	max-height: 26rem;1852	overflow: auto;1853	font-size: 0.8rem;1854	background: var(--bg);1855	border: 1px solid var(--border);1856}1857.issue-text blockquote {1858	color: var(--text-muted);1859	border-left-color: var(--accent-dim);1860}1861.issue-post-actions {1862	display: flex;1863	gap: 16px;1864	margin: 12px 0 0;1865	font-size: 0.6875rem;1866}1867.issue-post-actions a {1868	color: var(--text-faint);1869}1870.issue-post:hover .issue-post-actions a {1871	color: var(--text-muted);1872}1873.issue-post-actions a:hover,1874.issue-post-actions a:focus-visible {1875	color: var(--accent);1876	text-decoration: none;1877}1878.issue-composer {1879	display: flex;1880	flex-direction: column;1881	gap: 6px;1882	margin: 26px 0 0 22px;1883	padding: 16px 18px;1884	border: 1px solid var(--border);1885	border-radius: 6px;1886	background: var(--bg-surface);1887	scroll-margin-top: 24px;1888}1889.issue-composer:focus-within {1890	border-color: var(--accent-dim);1891}1892.issue-composer-head {1893	display: flex;1894	flex-wrap: wrap;1895	justify-content: space-between;1896	gap: 4px 12px;1897	margin: 0 0 4px;1898	font-size: 0.6875rem;1899	color: var(--text-muted);1900}1901.issue-composer-head label {1902	color: var(--text-secondary);1903}1904.issue-composer-name {1905	color: var(--accent);1906}1907.issue-composer-to .issues-cancel {1908	margin-left: 6px;1909	color: var(--text-faint);1910}1911.issue-composer .issues-textarea {1912	min-height: 9rem;1913	font-size: 0.8125rem;1914	line-height: 1.55;1915}1916.issue-hint {1917	margin: 0;1918	font-size: 0.625rem;1919	color: var(--text-faint);1920}1921.issue-closed-note {1922	margin: 26px 0 0 22px;1923	font-size: 0.75rem;1924	color: var(--text-faint);1925}1926.issue-notice {1927	margin: 18px 0 0;1928	padding: 8px 14px;1929	font-size: 0.75rem;1930	color: var(--sage);1931	background: var(--bg-surface);1932	border-left: 2px solid var(--sage);1933	border-radius: 0 4px 4px 0;1934}1935/* Name and email side by side; with email off, the name takes the whole row. */1936.issue-composer-who {1937	display: grid;1938	grid-auto-flow: column;1939	grid-auto-columns: 1fr;1940	grid-template-rows: auto auto;1941	gap: 6px 14px;1942}1943.issue-follow {1944	display: flex;1945	flex-direction: column;1946	gap: 6px;1947	margin: 14px 0 0 22px;1948	padding: 12px 18px 14px;1949	border: 1px dashed var(--border);1950	border-radius: 6px;1951	scroll-margin-top: 24px;1952}1953.issue-follow-row {1954	display: flex;1955	gap: 8px;1956	margin: 0;1957}1958.issue-follow-row .issues-input {1959	flex: 1;1960}1961.issue-follow-row .issues-submit {1962	margin-top: 0;1963}1964.issues-check {1965	display: flex;1966	align-items: center;1967	gap: 8px;1968}1969@media (max-width: 520px) {1970	.issue-composer-who {1971		grid-auto-flow: row;1972		grid-template-rows: none;1973	}1974}1975.issue-attached {1976	display: flex;1977	flex-wrap: wrap;1978	gap: 6px;1979	margin: 0;1980	padding: 0;1981	list-style: none;1982	font-size: 0.6875rem;1983	color: var(--text-secondary);1984}1985.issue-attached:empty {1986	display: none;1987}1988.issue-attached li {1989	display: flex;1990	align-items: center;1991	gap: 6px;1992	padding: 3px 8px 3px 3px;1993	border: 1px solid var(--border);1994	border-radius: 4px;1995	overflow-wrap: anywhere;1996}1997.issue-attached img {1998	width: 28px;1999	height: 28px;2000	border-radius: 2px;2001	object-fit: cover;2002}2003/* A post's pictures: one shows whole, several sit in a grid of crops that open full size. */2004.issue-shots {2005	display: grid;2006	grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr));2007	gap: 8px;2008	margin-top: 12px;2009}2010.issue-shot {2011	display: block;2012	overflow: hidden;2013	border: 1px solid var(--border);2014	border-radius: 4px;2015	background: var(--bg);2016}2017.issue-shot:hover {2018	border-color: var(--accent-dim);2019}2020.issue-shot img {2021	display: block;2022	width: 100%;2023	height: 10rem;2024	object-fit: cover;2025}2026.issue-shot:only-child {2027	grid-column: 1 / -1;2028}2029.issue-shot:only-child img {2030	height: auto;2031	max-height: 30rem;2032	object-fit: contain;2033}2034.issue-log {2035	margin-top: 12px;2036	border: 1px solid var(--border);2037	border-radius: 4px;2038	background: var(--bg);2039}2040.issue-log-name {2041	padding: 8px 12px;2042	font-size: 0.6875rem;2043	color: var(--text-secondary);2044	cursor: pointer;2045}2046.issue-log-name:hover {2047	color: var(--accent);2048}2049.issue-log pre {2050	max-height: 22rem;2051	margin: 0;2052	padding: 10px 12px;2053	overflow: auto;2054	font-family: var(--mono);2055	font-size: 0.75rem;2056	line-height: 1.5;2057	border-top: 1px solid var(--border);2058}2059.issue-log-foot {2060	margin: 0;2061	padding: 6px 12px 8px;2062	font-size: 0.625rem;2063	color: var(--text-faint);2064}2065.issue-log-whole {2066	color: var(--accent);2067}2068.issues-file {2069	font-family: var(--mono);2070	font-size: 0.6875rem;2071	color: var(--text-muted);2072}2073.issues-file::file-selector-button {2074	margin-right: 10px;2075	padding: 5px 12px;2076	font: inherit;2077	color: var(--text-secondary);2078	background: var(--bg);2079	border: 1px solid var(--border);2080	border-radius: 4px;2081	cursor: pointer;2082}2083.issues-file::file-selector-button:hover {2084	color: var(--accent);2085	border-color: var(--accent-dim);2086}20872088/* ----- front page --------------------------------------------------------- */20892090/* Kepr 2's hero band, full width, reaching up behind the nav (32px mark + 48px padding). */2091body > nav {2092	position: relative;2093	z-index: 1;2094}2095.ticker {2096	position: relative;2097	height: 304px;2098	margin: -104px calc(50% - 50vw) 0;2099	padding: 96px 0 20px;2100	display: flex;2101	flex-direction: column;2102	justify-content: space-evenly;2103	overflow: hidden;2104	pointer-events: none;2105	user-select: none;2106	border-bottom: 1px solid var(--border);2107	font-family: var(--mono);2108	color: var(--text-secondary);2109	mask-image: linear-gradient(2110		to right,2111		transparent,2112		#000 48px,2113		#000 calc(100% - 48px),2114		transparent2115	);2116}2117.ticker-row {2118	white-space: nowrap;2119	line-height: 1.2;2120	opacity: var(--o);2121	animation: ticker-glow 83s var(--glow-at) ease-in-out infinite;2122}2123/* The drift's duration is set by kepr.js from the track's width, so every row keeps Kepr 2's2124   pace in px/s (--speed) however long its messages are; this is the no-JavaScript fallback. */2125.ticker-track {2126	display: inline-flex;2127	gap: 64px;2128	padding-right: 64px;2129	animation: ticker-drift 1500s linear infinite;2130}2131/* Kepr 2's depth bands: nearer rows are larger, brighter and faster. Each row takes its turn at2132   the glow, a few seconds out of every 83, spaced so one or two glow at a time. */2133.ticker-row:nth-child(1) {2134	font-size: 9px;2135	--o: 0.05;2136	--speed: 12;2137	--glow-at: -5s;2138}2139.ticker-row:nth-child(2) {2140	font-size: 18px;2141	--o: 0.1;2142	--speed: 23;2143	--glow-at: -41s;2144}2145.ticker-row:nth-child(3) {2146	font-size: 7px;2147	--o: 0.04;2148	--speed: 9;2149	--glow-at: -77s;2150}2151.ticker-row:nth-child(4) {2152	font-size: 13px;2153	--o: 0.07;2154	--speed: 17;2155	--glow-at: -29s;2156}2157.ticker-row:nth-child(5) {2158	font-size: 22px;2159	--o: 0.12;2160	--speed: 29;2161	--glow-at: -65s;2162}2163.ticker-row:nth-child(6) {2164	font-size: 8px;2165	--o: 0.045;2166	--speed: 10;2167	--glow-at: -17s;2168}2169.ticker-row:nth-child(7) {2170	font-size: 15px;2171	--o: 0.08;2172	--speed: 20;2173	--glow-at: -53s;2174}2175@keyframes ticker-drift {2176	to {2177		transform: translateX(-50%);2178	}2179}2180@keyframes ticker-glow {2181	0%,2182	10%,2183	100% {2184		color: var(--text-secondary);2185		opacity: var(--o);2186		text-shadow: none;2187	}2188	5% {2189		color: var(--accent);2190		opacity: calc(var(--o) * 3.5);2191		text-shadow: 0 0 3px var(--accent-tint-12);2192	}2193}21942195.headline {2196	display: grid;2197	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);2198	gap: 48px;2199	align-items: center;2200	padding: 56px 0 40px;2201}2202.headline h1 {2203	font-size: clamp(2rem, 5vw, 3.5rem);2204	font-weight: 400;2205	line-height: 1.15;2206	color: var(--text-heading);2207	margin: 0 0 20px;2208	animation: fadeUp 480ms ease both;2209}2210.headline-tagline {2211	margin: 0;2212	font-size: 0.9375rem;2213	line-height: 1.7;2214	color: var(--text-secondary);2215	animation: fadeUp 480ms 80ms ease both;2216}2217.headline-cloud {2218	display: flex;2219	flex-wrap: wrap;2220	justify-content: center;2221	align-items: center;2222	gap: 10px 22px;2223	padding: 20px;2224	animation: fadeIn 600ms 160ms ease both;2225}2226.tc-tag {2227	font-family: var(--mono);2228	letter-spacing: 0.03em;2229	white-space: nowrap;2230	color: var(--accent-dim);2231	transition:2232		color 0.2s,2233		opacity 0.2s,2234		text-shadow 0.2s;2235}2236.tc-tag:hover {2237	color: var(--accent);2238	opacity: 1;2239	text-shadow: 0 0 14px var(--accent-tint-12);2240}2241.tc-1 {2242	font-size: 10px;2243	opacity: 0.42;2244}2245.tc-2 {2246	font-size: 12px;2247	opacity: 0.56;2248}2249.tc-3 {2250	font-size: 15px;2251	opacity: 0.7;2252}2253.tc-4 {2254	font-size: 18px;2255	opacity: 0.85;2256	font-weight: 500;2257}2258.tc-5 {2259	font-size: 23px;2260	opacity: 1;2261	font-weight: 500;2262}22632264.featured-label {2265	font-size: 0.6875rem;2266	font-weight: 400;2267	letter-spacing: 0.08em;2268	text-transform: uppercase;2269	color: var(--text-secondary);2270	margin: 0 0 12px;2271}2272.landing-self-host {2273	margin: 32px 0 0;2274	font-size: 0.75rem;2275}2276.landing-self-host a {2277	color: var(--text-secondary);2278}22792280/* ----- repo cards (front page, browse, profile) --------------------------- */22812282.card-grid {2283	display: grid;2284	grid-template-columns: repeat(2, minmax(0, 1fr));2285	gap: 16px;2286}2287.repo-card {2288	display: flex;2289	flex-direction: column;2290	padding: 20px 22px 16px;2291	border: 1px solid var(--bg-elevated);2292	border-radius: 4px;2293	background: var(--bg);2294	transition:2295		border-color 120ms,2296		background 120ms;2297	animation: fadeUp 350ms ease both;2298}2299.repo-card:hover {2300	text-decoration: none;2301	border-color: var(--text-faint);2302	background: var(--accent-tint-04);2303}2304.repo-card-head {2305	display: flex;2306	align-items: baseline;2307	justify-content: space-between;2308	gap: 12px;2309}2310.repo-card-name {2311	font-size: 1.375rem;2312	line-height: 1.1;2313	color: var(--accent);2314	overflow: hidden;2315	text-overflow: ellipsis;2316	white-space: nowrap;2317}2318.repo-card-saves {2319	font-size: 0.6875rem;2320	white-space: nowrap;2321}2322.repo-card-desc {2323	margin: 8px 0 0;2324	font-size: 0.8125rem;2325	line-height: 1.5;2326	color: var(--text-secondary);2327	display: -webkit-box;2328	-webkit-line-clamp: 2;2329	-webkit-box-orient: vertical;2330	overflow: hidden;2331}2332.repo-card-cat {2333	margin: 10px 0 0;2334	font-size: 0.9375rem;2335	color: var(--text);2336}23372338/* ----- profile ------------------------------------------------------------ */23392340/* The cover runs the full width of the window while the page keeps its column. */2341.profile-cover {2342	position: relative;2343	height: 380px;2344	margin: -24px calc(50% - 50vw) 0;2345	overflow: hidden;2346	border-bottom: 1px solid var(--bg-surface);2347}2348.hex-backdrop {2349	position: absolute;2350	inset: 0;2351	display: flex;2352	flex-direction: row-reverse;2353	justify-content: center;2354	align-items: flex-start;2355	gap: 13px;2356	pointer-events: none;2357	user-select: none;2358	font-family: var(--mono);2359	font-size: 13px;2360	line-height: 16px;2361	color: var(--accent-dim);2362	mask-image: linear-gradient(to bottom, transparent, #000 10%, #000 78%, transparent);2363}2364/* Matching groups keep every column continuous across the loop boundary. */2365.hex-col {2366	display: flex;2367	flex-direction: column;2368	flex-shrink: 0;2369	--hex-peak: 0.42;2370	opacity: var(--hex-peak);2371	animation:2372		hex-stream 120s linear infinite,2373		hex-shimmer 16s ease-in-out infinite;2374	animation-delay: -43s, 0s;2375}2376.hex-group {2377	display: flex;2378	flex-direction: column;2379	gap: 36px;2380	padding-bottom: 36px;2381}2382.hex-id {2383	writing-mode: vertical-rl;2384	text-orientation: upright;2385	letter-spacing: 3px;2386	opacity: 0.45;2387}2388.hex-id:first-child {2389	color: var(--accent);2390	opacity: 1;2391}2392.hex-col:nth-child(3n) {2393	--hex-peak: 0.65;2394	color: var(--accent);2395	animation-duration: 144s, 19s;2396	animation-delay: -77s, 0s;2397}2398.hex-col:nth-child(4n + 1) {2399	--hex-peak: 0.3;2400	animation-duration: 160s, 23s;2401	animation-delay: -119s, 0s;2402}2403.hex-col:nth-child(5n + 2) {2404	--hex-peak: 0.5;2405	animation-duration: 108s, 17s;2406	animation-delay: -19s, 0s;2407}2408.hex-col:nth-child(7n) {2409	--hex-peak: 0.55;2410	animation-delay: -91s, 0s;2411}2412.hex-backdrop.paused .hex-col {2413	animation-play-state: paused;2414}2415@keyframes hex-stream {2416	from {2417		transform: translateY(-50%);2418	}2419	to {2420		transform: translateY(0);2421	}2422}2423@keyframes hex-shimmer {2424	0%,2425	100% {2426		opacity: var(--hex-peak);2427	}2428	45% {2429		opacity: 0.1;2430	}2431}2432.profile-cover-fade {2433	position: absolute;2434	left: 0;2435	right: 0;2436	bottom: 0;2437	height: 55%;2438	background: linear-gradient(to bottom, transparent, var(--bg));2439	pointer-events: none;2440}2441.profile-identity {2442	position: absolute;2443	bottom: 40px;2444	left: 0;2445	right: 0;2446	max-width: 980px;2447	margin: 0 auto;2448	padding: 0 48px;2449}2450.profile-username {2451	margin: 0 0 8px;2452	font-family: "Sacramento", cursive;2453	font-weight: 400;2454	font-size: 3.625rem;2455	line-height: 1;2456	letter-spacing: -0.02em;2457	text-transform: lowercase;2458	color: var(--text-heading);2459	user-select: none;2460	animation: fadeUp 500ms ease both;2461}2462.profile-signature {2463	display: block;2464	max-height: 96px;2465	max-width: min(360px, 100%);2466}2467.profile-tagline {2468	margin: 0 0 6px;2469	font-family: var(--mono);2470	font-size: 0.75rem;2471	letter-spacing: 0.15em;2472	color: var(--text-faint);2473}2474.profile-op-badge {2475	display: block;2476	font-size: 0.6875rem;2477	letter-spacing: 0.18em;2478	color: var(--accent-bright);2479}24802481.profile-portrait-section {2482	display: grid;2483	grid-template-columns: 320px minmax(0, 1fr);2484	gap: 40px;2485	align-items: start;2486	padding-top: 40px;2487}2488.profile-left {2489	display: flex;2490	flex-direction: column;2491	gap: 16px;2492}2493.profile-identity-card,2494.profile-languages-bar {2495	padding: 20px 24px;2496	border: 1px solid var(--bg-elevated);2497	border-radius: 4px;2498}2499.profile-identity-bio {2500	margin: 0;2501	font-size: 0.875rem;2502	line-height: 1.5;2503	color: var(--text-muted);2504}2505.profile-identity-location {2506	margin: 6px 0 0;2507	font-family: var(--mono);2508	font-size: 0.8125rem;2509	color: var(--text-muted);2510}2511.profile-website-pill {2512	display: inline-block;2513	max-width: 100%;2514	margin-top: 10px;2515	padding: 3px 8px;2516	overflow: hidden;2517	text-overflow: ellipsis;2518	white-space: nowrap;2519	border: 1px solid var(--text-faint);2520	border-radius: 3px;2521	background: var(--bg-surface);2522	font-family: var(--mono);2523	font-size: 0.6875rem;2524	color: var(--accent);2525}2526.profile-website-pill:hover {2527	border-color: var(--accent);2528	text-decoration: none;2529}2530.profile-stats-grid {2531	display: grid;2532	grid-template-columns: 1fr 1fr;2533	border: 1px solid var(--bg-elevated);2534	border-radius: 4px;2535	overflow: hidden;2536}2537.profile-stat-tile {2538	padding: 16px;2539	border-right: 1px solid var(--bg-elevated);2540	border-bottom: 1px solid var(--bg-elevated);2541}2542.profile-stat-tile:nth-child(2n) {2543	border-right: none;2544}2545.profile-stat-tile:nth-last-child(-n + 2) {2546	border-bottom: none;2547}2548.profile-stat-number {2549	margin-bottom: 4px;2550	font-weight: 600;2551	font-size: 1.75rem;2552	line-height: 1;2553	color: var(--accent);2554}2555.profile-stat-label,2556.profile-section-label {2557	font-family: var(--mono);2558	font-size: 0.625rem;2559	text-transform: uppercase;2560	letter-spacing: 0.08em;2561	color: var(--text-faint);2562}2563.profile-lang-bar {2564	display: block;2565	width: 100%;2566	height: 6px;2567	margin-bottom: 8px;2568	border-radius: 3px;2569	background: var(--bg-surface);2570}2571.profile-lang-bar rect {2572	fill: var(--accent);2573	opacity: 0.6;2574}2575.profile-lang-bar rect:nth-child(2) {2576	fill: var(--accent-bright);2577}2578.profile-lang-bar rect:nth-child(3) {2579	fill: var(--accent-dim);2580}2581.profile-lang-bar rect:nth-child(4) {2582	fill: var(--text-muted);2583}2584.profile-lang-labels {2585	display: flex;2586	flex-wrap: wrap;2587	gap: 10px;2588	font-family: var(--mono);2589	font-size: 0.625rem;2590	color: var(--text-muted);2591}2592.profile-section-label {2593	margin-bottom: 16px;2594	letter-spacing: 0.2em;2595}2596.profile-timeline {2597	display: grid;2598	grid-auto-rows: 2.25rem;2599	max-height: 13.5rem;2600	overflow-y: auto;2601	scrollbar-width: thin;2602}2603.profile-event {2604	display: grid;2605	grid-template-columns: 96px 12px minmax(0, 1fr) auto;2606	gap: 10px;2607	align-items: baseline;2608	padding: 7px 0;2609	border-bottom: 1px solid var(--bg-surface);2610	font-family: var(--mono);2611	font-size: 0.6875rem;2612	animation: fadeUp 300ms ease both;2613}2614.profile-event-repo,2615.profile-event-message {2616	overflow: hidden;2617	text-overflow: ellipsis;2618	white-space: nowrap;2619}2620.profile-event-repo,2621.profile-event-glyph {2622	color: var(--accent);2623}2624.profile-event-glyph {2625	font-size: 0.625rem;2626}2627.profile-event-message {2628	color: var(--text-muted);2629}2630.profile-event-message:hover {2631	color: var(--text-heading);2632}2633.profile-event-time {2634	font-size: 0.625rem;2635	white-space: nowrap;2636	color: var(--text-faint);2637}2638.profile-empty-state {2639	font-style: italic;2640	font-size: 0.8125rem;2641	color: var(--text-faint);2642}2643.profile-repos-section {2644	margin-top: 40px;2645	padding-top: 40px;2646	border-top: 1px solid var(--bg-surface);2647}26482649/* ----- docs and support --------------------------------------------------- */26502651.admin-layout {2652	display: grid;2653	grid-template-columns: 160px minmax(0, 1fr);2654	gap: 48px;2655	min-height: 70vh;2656}2657.admin-sidebar {2658	position: sticky;2659	top: 24px;2660	align-self: start;2661	padding: 24px 0;2662	font-size: 0.75rem;2663}2664.admin-sidebar nav,2665.admin-sidebar-foot {2666	display: flex;2667	flex-direction: column;2668	gap: 16px;2669	margin-top: 20px;2670}2671.admin-sidebar a {2672	color: var(--text-secondary);2673}2674.admin-unread {2675	display: inline-block;2676	min-width: 1.5em;2677	padding: 0 5px;2678	border-radius: 999px;2679	background: var(--accent);2680	color: var(--bg);2681	font-size: 0.6875rem;2682	text-align: center;2683}2684.notification-unread {2685	box-shadow: inset 2px 0 0 var(--accent);2686	background: var(--accent-tint-04);2687}2688.notification-list .notification-unread {2689	border-left: 2px solid var(--accent);2690	padding-left: 12px;2691}26922693.admin-sidebar a[aria-current] {2694	color: var(--accent);2695	border-left: 2px solid var(--accent);2696	padding-left: 12px;2697}2698.admin-sidebar-foot {2699	border-top: 1px solid var(--border);2700	padding-top: 24px;2701	margin-top: 40px;2702}2703.admin-content {2704	min-width: 0;2705}2706.admin-heading {2707	border-bottom: 1px solid var(--border);2708	padding: 24px 0;2709	margin-bottom: 32px;2710}2711.admin-heading h1 {2712	font-size: 2rem;2713	font-weight: 400;2714	margin: 8px 0 0;2715	color: var(--text-heading);2716}2717.admin-intro {2718	color: var(--text-secondary);2719	margin-bottom: 24px;2720}2721.admin-notice {2722	color: var(--sage);2723	border-left: 2px solid var(--sage);2724	padding-left: 16px;2725}2726.admin-content .profile-signature {2727	max-width: 240px;2728	max-height: 120px;2729	object-fit: contain;2730}2731.admin-vitals {2732	display: flex;2733	flex-wrap: wrap;2734	gap: 24px 40px;2735	padding: 0 0 24px;2736	border-bottom: 1px solid var(--border);2737}2738.admin-vitals strong {2739	display: block;2740	font-size: 1.75rem;2741	font-weight: 400;2742	color: var(--accent);2743}2744.admin-days {2745	margin: 0;2746	padding: 0;2747	list-style: none;2748	font-size: 0.6875rem;2749}2750.admin-days li {2751	display: grid;2752	grid-template-columns: 11ch minmax(0, 1fr) 5ch;2753	gap: 12px;2754	align-items: center;2755	padding: 2px 0;2756}2757.admin-days meter {2758	appearance: none;2759	width: 100%;2760	height: 6px;2761	background: var(--border);2762	border: 0;2763}2764.admin-days meter::-webkit-meter-bar {2765	height: 6px;2766	background: var(--border);2767	border: 0;2768	border-radius: 0;2769}2770.admin-days meter::-webkit-meter-optimum-value {2771	background: var(--accent);2772}2773.admin-days meter::-moz-meter-bar {2774	background: var(--accent);2775}2776.admin-days li > span:last-child {2777	text-align: right;2778}2779.admin-select-row {2780	display: flex;2781	gap: 12px;2782	align-items: center;2783}2784.admin-select-row .issue-row {2785	flex: 1;2786	min-width: 0;2787}2788.admin-content form.issue-row {2789	align-items: center;2790}2791.admin-table {2792	width: 100%;2793	border-collapse: collapse;2794	font-size: 0.6875rem;2795}2796.admin-table th,2797.admin-table td {2798	padding: 6px 12px 6px 0;2799	border-bottom: 1px solid var(--border);2800	text-align: left;2801	font-weight: 400;2802	overflow-wrap: anywhere;2803}2804.admin-table th {2805	color: var(--text-muted);2806}2807.admin-releases {2808	margin: 12px 0 0;2809	padding: 0;2810	list-style: none;2811	font-size: 0.6875rem;2812}2813.admin-releases li {2814	padding: 4px 0;2815}2816.admin-repos-layout {2817	display: grid;2818	grid-template-columns: 140px minmax(0, 1fr);2819	gap: 24px;2820}2821.admin-repo-picker {2822	position: sticky;2823	top: 24px;2824	align-self: start;2825	display: flex;2826	flex-direction: column;2827	gap: 20px;2828	font-size: 0.75rem;2829}2830.admin-repo-picker nav {2831	display: flex;2832	flex-direction: column;2833	max-height: 50vh;2834	overflow-y: auto;2835	border-bottom: 1px solid var(--border);2836}2837.admin-repo-link {2838	padding: 12px 8px;2839	overflow-wrap: anywhere;2840	border-left: 2px solid transparent;2841	color: var(--text-secondary);2842}2843.admin-repo-link.active {2844	border-left-color: var(--accent);2845	background: var(--bg-surface);2846	color: var(--accent-bright);2847}2848.admin-repo-link span {2849	display: block;2850	font-size: 0.625rem;2851}2852.admin-repo-workspace {2853	min-width: 0;2854}2855#global-hide {2856	scroll-margin-top: 24px;2857}2858@media (max-width: 900px) {2859	.admin-repos-layout {2860		grid-template-columns: minmax(0, 1fr);2861	}2862	.admin-repo-picker {2863		position: static;2864	}2865	.admin-repo-picker nav {2866		max-height: 200px;2867	}2868}2869@media (max-width: 680px) {2870	.admin-layout {2871		grid-template-columns: minmax(0, 1fr);2872		gap: 0;2873	}2874	.admin-sidebar {2875		position: static;2876		padding: 8px 0;2877	}2878	.admin-sidebar nav,2879	.admin-sidebar-foot {2880		flex-flow: row wrap;2881		gap: 12px 20px;2882	}2883	.admin-sidebar-foot {2884		margin-top: 16px;2885		padding-top: 16px;2886	}2887}28882889.site-doc {2890	max-width: 72ch;2891	margin-top: 16px;2892}2893.site-doc h1 {2894	font-size: clamp(2rem, 5vw, 3rem);2895	font-weight: 400;2896	color: var(--text-heading);2897}2898.site-doc h2 {2899	margin-top: 2.4em;2900	scroll-margin-top: 24px;2901}2902.site-doc-layout {2903	display: grid;2904	grid-template-columns: 180px minmax(0, 72ch);2905	gap: 48px;2906}2907.site-doc-nav {2908	position: sticky;2909	top: 24px;2910	align-self: start;2911	display: flex;2912	flex-direction: column;2913	gap: 10px;2914	margin-top: 32px;2915	font-size: 0.8125rem;2916}2917.site-doc-nav a {2918	color: var(--text-secondary);2919	text-decoration: none;2920}2921.site-doc-nav a:hover {2922	color: var(--text-heading);2923}2924@media (max-width: 860px) {2925	.site-doc-layout {2926		grid-template-columns: minmax(0, 1fr);2927		gap: 0;2928	}2929	.site-doc-nav {2930		position: static;2931		flex-flow: row wrap;2932		gap: 8px 16px;2933		margin-top: 24px;2934	}2935}29362937@media (max-width: 860px) {2938	.headline,2939	.profile-portrait-section {2940		grid-template-columns: minmax(0, 1fr);2941	}2942	.headline {2943		gap: 8px;2944		padding-top: 48px;2945	}2946	.card-grid {2947		grid-template-columns: minmax(0, 1fr);2948	}2949}2950@media (max-width: 768px) {2951	.ticker {2952		height: 226px;2953		margin-top: -88px;2954		padding-top: 80px;2955	}2956	.profile-cover {2957		height: 280px;2958		margin-top: -16px;2959	}2960	.profile-identity {2961		bottom: 24px;2962		padding: 0 16px;2963	}2964	.profile-username {2965		font-size: 2.5rem;2966	}2967	.profile-event {2968		grid-template-columns: 72px 12px minmax(0, 1fr);2969	}2970	.profile-event-time {2971		display: none;2972	}2973}29742975/* ----- media in Markdown and the signed-in editor ------------------------- */29762977/* Sizes and places from an image's options (markdown.ts); classes, as the policy allows no inline2978   style. */2979.markdown .media {2980	display: block;2981	max-width: 100%;2982	height: auto;2983	margin: 12px auto;2984	border-radius: 3px;2985}2986.markdown .media-left {2987	margin-left: 0;2988}2989.markdown .media-right {2990	margin-right: 0;2991}2992.markdown .media-w25 {2993	width: 25%;2994}2995.markdown .media-w33 {2996	width: 33%;2997}2998.markdown .media-w50 {2999	width: 50%;3000}3001.markdown .media-w66 {3002	width: 66%;3003}3004.markdown .media-w75 {3005	width: 75%;3006}3007.markdown .media-w100 {3008	width: 100%;3009}3010.edit-btn {3011	margin-left: 12px;3012	padding: 1px 7px;3013	background: transparent;3014	border: 1px solid rgba(255, 173, 51, 0.2);3015	border-radius: 2px;3016	font-size: 0.625rem;3017	color: var(--text-faint);3018	cursor: pointer;3019	vertical-align: middle;3020}3021.repo-desc-editable:not(:has(.editor)) {3022	cursor: text;3023}3024.edit-btn:hover {3025	color: var(--accent);3026	border-color: var(--accent-dim);3027}3028.editor {3029	display: grid;3030	gap: 8px;3031	margin: 8px 0 16px;3032}3033.editor-toolbar,3034.editor-media,3035.editor-actions {3036	display: flex;3037	flex-wrap: wrap;3038	align-items: center;3039	gap: 4px;3040}3041.editor-media[hidden] {3042	display: none;3043}3044.editor-label,3045.editor-status {3046	margin: 0 6px;3047	font-size: 0.625rem;3048	color: var(--text-faint);3049}3050.editor-panes {3051	display: grid;3052	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);3053	gap: 12px;3054}3055@media (max-width: 768px) {3056	.editor-panes {3057		grid-template-columns: minmax(0, 1fr);3058	}3059}3060.editor-input {3061	width: 100%;3062	min-height: 4lh;3063	max-height: 70vh;3064	field-sizing: content;3065	resize: vertical;3066	padding: 10px 12px;3067	background: var(--bg-surface);3068	border: 1px solid var(--border);3069	border-radius: 3px;3070	color: var(--text);3071	font-size: 0.75rem;3072	line-height: 1.6;3073}3074.editor-input:focus {3075	outline: none;3076	border-color: var(--accent-dim);3077}3078.editor-preview {3079	min-width: 0;3080	max-height: 70vh;3081	overflow-y: auto;3082	padding: 0 4px;3083}3084.editor-preview:empty::before {3085	content: attr(data-empty);3086	font-family: var(--mono);3087	font-size: 0.625rem;3088	color: var(--text-faint);3089}30903091/* ----- file viewer (Kepr 2's Atlas modal) -------------------------------- */30923093body:has(> .fv-overlay) {3094	overflow: hidden;3095}3096.fv-overlay {3097	position: fixed;3098	inset: 0;3099	z-index: 2000;3100	display: flex;3101	flex-direction: column;3102	background: rgba(13, 8, 5, 0.97);3103	outline: none;3104	animation: fv-in 200ms ease both;3105}3106@keyframes fv-in {3107	from {3108		opacity: 0;3109		transform: translateY(6px) scale(0.97);3110	}3111}3112.fv-header {3113	display: flex;3114	align-items: center;3115	gap: 16px;3116	flex-shrink: 0;3117	height: 48px;3118	padding: 0 20px;3119	background: var(--bg);3120	border-bottom: 1px solid var(--bg-elevated);3121}3122.fv-close {3123	background: none;3124	border: 0;3125	padding: 0 4px;3126	font-size: 1.375rem;3127	line-height: 1;3128	color: var(--text-faint);3129	cursor: pointer;3130}3131.fv-close:hover {3132	color: var(--accent);3133}3134.fv-title {3135	display: flex;3136	align-items: baseline;3137	gap: 8px;3138	flex: 1;3139	min-width: 0;3140}3141.fv-name {3142	font-size: 1.25rem;3143	color: var(--text-heading);3144	white-space: nowrap;3145}3146.fv-path {3147	font-size: 0.625rem;3148	color: var(--text-faint);3149	white-space: nowrap;3150	overflow: hidden;3151	text-overflow: ellipsis;3152}3153.fv-controls,3154.fv-nav {3155	display: flex;3156	align-items: center;3157	gap: 4px;3158	flex-shrink: 0;3159}3160.fv-ctrl-btn {3161	background: transparent;3162	border: 1px solid rgba(255, 173, 51, 0.2);3163	border-radius: 2px;3164	padding: 3px 7px;3165	font: inherit;3166	font-size: 0.625rem;3167	color: var(--text-faint);3168	cursor: pointer;3169	transition:3170		color 100ms,3171		border-color 100ms;3172}3173.fv-ctrl-btn:hover:not(:disabled),3174.fv-ctrl-btn.active {3175	color: var(--accent);3176	border-color: rgba(255, 173, 51, 0.5);3177	text-decoration: none;3178}3179.fv-ctrl-btn:disabled {3180	opacity: 0.3;3181	cursor: default;3182}3183.fv-pos {3184	min-width: 48px;3185	text-align: center;3186	font-size: 0.625rem;3187	color: var(--text-faint);3188}3189.fv-body {3190	flex: 1;3191	min-height: 0;3192	display: grid;3193	grid-template-columns: minmax(0, 1fr) 280px;3194}3195.fv-source {3196	min-height: 0;3197	overflow: auto;3198	padding: 16px 28px 32px;3199	font-family: var(--mono);3200	font-size: 0.6875rem;3201	color: var(--text-faint);3202}3203.fv-source .file-view {3204	margin: -16px -28px 0;3205	border: 0;3206	background: none;3207	overflow: visible;3208}3209.fv-source .code {3210	font-size: var(--fv-size);3211	color: var(--text);3212}3213.fv-wrap .fv-source .lc {3214	white-space: pre-wrap;3215	overflow-wrap: anywhere;3216}3217.fv-source .file-markdown {3218	font-family: var(--sans);3219	font-size: calc(var(--fv-size) + 2px);3220	color: var(--text);3221}3222.fv-detail .atlas-info-desc {3223	font-size: 0.8125rem;3224}3225.fv-detail {3226	overflow-y: auto;3227	padding: 18px 20px 24px;3228	background: var(--bg);3229	border-left: 1px solid var(--bg-elevated);3230}3231/* After the viewer's own rules, which would otherwise win at equal specificity. */3232@media (max-width: 768px) {3233	.fv-overlay {3234		background: var(--bg);3235	}3236	.fv-header {3237		flex-wrap: wrap;3238		height: auto;3239		padding: 8px 12px;3240		gap: 8px 12px;3241	}3242	.fv-title {3243		flex-basis: calc(100% - 40px);3244	}3245	.fv-body {3246		grid-template-columns: minmax(0, 1fr);3247	}3248	.fv-detail {3249		display: none;3250	}3251	.fv-source {3252		padding: 12px 16px 24px;3253	}3254	.fv-source .file-view {3255		margin: -12px -16px 0;3256	}3257}32583259/* Last in the file, after every animation it stops, so it wins without !important. */3260@media (prefers-reduced-motion: reduce) {3261	.tri-outer,3262	.tri-inner,3263	.repo-name,3264	.repo-contributor,3265	.repo-desc,3266	.repo-homepage,3267	.repo-meta,3268	.repo-tabs,3269	.install-lines,3270	.repo-section,3271	.repo-details,3272	.save-message-head,3273	.ticker-row,3274	.ticker-track,3275	.hex-col,3276	.headline h1,3277	.headline-tagline,3278	.headline-cloud,3279	.repo-card,3280	.profile-username,3281	.profile-event,3282	.fv-overlay,3283	.repo-panel {3284		animation: none;3285	}3286	.nav-toggle span {3287		transition: none;3288	}3289	.hex-col {3290		opacity: 0.12;3291	}3292}32933294/* ----- fonts: served by Kepr itself; licences beside them in /static/fonts ----- */32953296/* latin */3297@font-face {3298	font-family: "Bellota";3299	font-style: normal;3300	font-weight: 700;3301	font-display: swap;3302	src: url(/static/fonts/bellota-latin-700-normal.woff2) format("woff2");3303	unicode-range:3304		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;3305}33063307/* cyrillic */3308@font-face {3309	font-family: "Bellota";3310	font-style: normal;3311	font-weight: 700;3312	font-display: swap;3313	src: url(/static/fonts/bellota-cyrillic-700-normal.woff2) format("woff2");3314	unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;3315}33163317/* latin-ext */3318@font-face {3319	font-family: "Bellota";3320	font-style: normal;3321	font-weight: 700;3322	font-display: swap;3323	src: url(/static/fonts/bellota-latin-ext-700-normal.woff2) format("woff2");3324	unicode-range:3325		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;3326}33273328/* vietnamese */3329@font-face {3330	font-family: "Bellota";3331	font-style: normal;3332	font-weight: 700;3333	font-display: swap;3334	src: url(/static/fonts/bellota-vietnamese-700-normal.woff2) format("woff2");3335	unicode-range:3336		U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;3337}33383339/* greek */3340@font-face {3341	font-family: "Comfortaa";3342	font-style: normal;3343	font-weight: 700;3344	font-stretch: 100%;3345	font-display: swap;3346	src: url(/static/fonts/comfortaa-greek-700-normal.woff2) format("woff2");3347	unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;3348}33493350/* latin */3351@font-face {3352	font-family: "Comfortaa";3353	font-style: normal;3354	font-weight: 700;3355	font-stretch: 100%;3356	font-display: swap;3357	src: url(/static/fonts/comfortaa-latin-700-normal.woff2) format("woff2");3358	unicode-range:3359		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;3360}33613362/* cyrillic */3363@font-face {3364	font-family: "Comfortaa";3365	font-style: normal;3366	font-weight: 700;3367	font-stretch: 100%;3368	font-display: swap;3369	src: url(/static/fonts/comfortaa-cyrillic-700-normal.woff2) format("woff2");3370	unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;3371}33723373/* latin-ext */3374@font-face {3375	font-family: "Comfortaa";3376	font-style: normal;3377	font-weight: 700;3378	font-stretch: 100%;3379	font-display: swap;3380	src: url(/static/fonts/comfortaa-latin-ext-700-normal.woff2) format("woff2");3381	unicode-range:3382		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;3383}33843385/* vietnamese */3386@font-face {3387	font-family: "Comfortaa";3388	font-style: normal;3389	font-weight: 700;3390	font-stretch: 100%;3391	font-display: swap;3392	src: url(/static/fonts/comfortaa-vietnamese-700-normal.woff2) format("woff2");3393	unicode-range:3394		U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;3395}33963397/* cyrillic-ext */3398@font-face {3399	font-family: "Comfortaa";3400	font-style: normal;3401	font-weight: 700;3402	font-stretch: 100%;3403	font-display: swap;3404	src: url(/static/fonts/comfortaa-cyrillic-ext-700-normal.woff2) format("woff2");3405	unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;3406}34073408/* latin */3409@font-face {3410	font-family: "Martian Mono";3411	font-style: normal;3412	font-weight: 400;3413	font-stretch: 100%;3414	font-display: swap;3415	src: url(/static/fonts/martian-mono-latin-400-normal.woff2) format("woff2");3416	unicode-range:3417		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;3418}34193420/* cyrillic */3421@font-face {3422	font-family: "Martian Mono";3423	font-style: normal;3424	font-weight: 400;3425	font-stretch: 100%;3426	font-display: swap;3427	src: url(/static/fonts/martian-mono-cyrillic-400-normal.woff2) format("woff2");3428	unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;3429}34303431/* latin-ext */3432@font-face {3433	font-family: "Martian Mono";3434	font-style: normal;3435	font-weight: 400;3436	font-stretch: 100%;3437	font-display: swap;3438	src: url(/static/fonts/martian-mono-latin-ext-400-normal.woff2) format("woff2");3439	unicode-range:3440		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;3441}34423443/* cyrillic-ext */3444@font-face {3445	font-family: "Martian Mono";3446	font-style: normal;3447	font-weight: 400;3448	font-stretch: 100%;3449	font-display: swap;3450	src: url(/static/fonts/martian-mono-cyrillic-ext-400-normal.woff2) format("woff2");3451	unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;3452}34533454/* latin */3455@font-face {3456	font-family: "Quicksand";3457	font-style: normal;3458	font-weight: 400;3459	font-stretch: 100%;3460	font-display: swap;3461	src: url(/static/fonts/quicksand-latin-400-normal.woff2) format("woff2");3462	unicode-range:3463		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;3464}34653466/* latin-ext */3467@font-face {3468	font-family: "Quicksand";3469	font-style: normal;3470	font-weight: 400;3471	font-stretch: 100%;3472	font-display: swap;3473	src: url(/static/fonts/quicksand-latin-ext-400-normal.woff2) format("woff2");3474	unicode-range:3475		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;3476}34773478/* vietnamese */3479@font-face {3480	font-family: "Quicksand";3481	font-style: normal;3482	font-weight: 400;3483	font-stretch: 100%;3484	font-display: swap;3485	src: url(/static/fonts/quicksand-vietnamese-400-normal.woff2) format("woff2");3486	unicode-range:3487		U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;3488}34893490/* latin */3491@font-face {3492	font-family: "Quicksand";3493	font-style: normal;3494	font-weight: 600;3495	font-stretch: 100%;3496	font-display: swap;3497	src: url(/static/fonts/quicksand-latin-600-normal.woff2) format("woff2");3498	unicode-range:3499		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;3500}35013502/* latin-ext */3503@font-face {3504	font-family: "Quicksand";3505	font-style: normal;3506	font-weight: 600;3507	font-stretch: 100%;3508	font-display: swap;3509	src: url(/static/fonts/quicksand-latin-ext-600-normal.woff2) format("woff2");3510	unicode-range:3511		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;3512}35133514/* vietnamese */3515@font-face {3516	font-family: "Quicksand";3517	font-style: normal;3518	font-weight: 600;3519	font-stretch: 100%;3520	font-display: swap;3521	src: url(/static/fonts/quicksand-vietnamese-600-normal.woff2) format("woff2");3522	unicode-range:3523		U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;3524}35253526/* latin */3527@font-face {3528	font-family: "Sacramento";3529	font-style: normal;3530	font-weight: 400;3531	font-display: swap;3532	src: url(/static/fonts/sacramento-latin-400-normal.woff2) format("woff2");3533	unicode-range:3534		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;3535}35363537/* latin-ext */3538@font-face {3539	font-family: "Sacramento";3540	font-style: normal;3541	font-weight: 400;3542	font-display: swap;3543	src: url(/static/fonts/sacramento-latin-ext-400-normal.woff2) format("woff2");3544	unicode-range:3545		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;3546}