kepr.css

65.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}19261927/* ----- front page --------------------------------------------------------- */19281929/* Kepr 2's hero band, full width, reaching up behind the nav (32px mark + 48px padding). */1930body > nav {1931	position: relative;1932	z-index: 1;1933}1934.ticker {1935	position: relative;1936	height: 304px;1937	margin: -104px calc(50% - 50vw) 0;1938	padding: 96px 0 20px;1939	display: flex;1940	flex-direction: column;1941	justify-content: space-evenly;1942	overflow: hidden;1943	pointer-events: none;1944	user-select: none;1945	border-bottom: 1px solid var(--border);1946	font-family: var(--mono);1947	color: var(--text-secondary);1948	mask-image: linear-gradient(1949		to right,1950		transparent,1951		#000 48px,1952		#000 calc(100% - 48px),1953		transparent1954	);1955}1956.ticker-row {1957	white-space: nowrap;1958	line-height: 1.2;1959	opacity: var(--o);1960	animation: ticker-glow 83s var(--glow-at) ease-in-out infinite;1961}1962/* The drift's duration is set by kepr.js from the track's width, so every row keeps Kepr 2's1963   pace in px/s (--speed) however long its messages are; this is the no-JavaScript fallback. */1964.ticker-track {1965	display: inline-flex;1966	gap: 64px;1967	padding-right: 64px;1968	animation: ticker-drift 1500s linear infinite;1969}1970/* Kepr 2's depth bands: nearer rows are larger, brighter and faster. Each row takes its turn at1971   the glow, a few seconds out of every 83, spaced so one or two glow at a time. */1972.ticker-row:nth-child(1) {1973	font-size: 9px;1974	--o: 0.05;1975	--speed: 12;1976	--glow-at: -5s;1977}1978.ticker-row:nth-child(2) {1979	font-size: 18px;1980	--o: 0.1;1981	--speed: 23;1982	--glow-at: -41s;1983}1984.ticker-row:nth-child(3) {1985	font-size: 7px;1986	--o: 0.04;1987	--speed: 9;1988	--glow-at: -77s;1989}1990.ticker-row:nth-child(4) {1991	font-size: 13px;1992	--o: 0.07;1993	--speed: 17;1994	--glow-at: -29s;1995}1996.ticker-row:nth-child(5) {1997	font-size: 22px;1998	--o: 0.12;1999	--speed: 29;2000	--glow-at: -65s;2001}2002.ticker-row:nth-child(6) {2003	font-size: 8px;2004	--o: 0.045;2005	--speed: 10;2006	--glow-at: -17s;2007}2008.ticker-row:nth-child(7) {2009	font-size: 15px;2010	--o: 0.08;2011	--speed: 20;2012	--glow-at: -53s;2013}2014@keyframes ticker-drift {2015	to {2016		transform: translateX(-50%);2017	}2018}2019@keyframes ticker-glow {2020	0%,2021	10%,2022	100% {2023		color: var(--text-secondary);2024		opacity: var(--o);2025		text-shadow: none;2026	}2027	5% {2028		color: var(--accent);2029		opacity: calc(var(--o) * 3.5);2030		text-shadow: 0 0 3px var(--accent-tint-12);2031	}2032}20332034.headline {2035	display: grid;2036	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);2037	gap: 48px;2038	align-items: center;2039	padding: 56px 0 40px;2040}2041.headline h1 {2042	font-size: clamp(2rem, 5vw, 3.5rem);2043	font-weight: 400;2044	line-height: 1.15;2045	color: var(--text-heading);2046	margin: 0 0 20px;2047	animation: fadeUp 480ms ease both;2048}2049.headline-tagline {2050	margin: 0;2051	font-size: 0.9375rem;2052	line-height: 1.7;2053	color: var(--text-secondary);2054	animation: fadeUp 480ms 80ms ease both;2055}2056.headline-cloud {2057	display: flex;2058	flex-wrap: wrap;2059	justify-content: center;2060	align-items: center;2061	gap: 10px 22px;2062	padding: 20px;2063	animation: fadeIn 600ms 160ms ease both;2064}2065.tc-tag {2066	font-family: var(--mono);2067	letter-spacing: 0.03em;2068	white-space: nowrap;2069	color: var(--accent-dim);2070	transition:2071		color 0.2s,2072		opacity 0.2s,2073		text-shadow 0.2s;2074}2075.tc-tag:hover {2076	color: var(--accent);2077	opacity: 1;2078	text-shadow: 0 0 14px var(--accent-tint-12);2079}2080.tc-1 {2081	font-size: 10px;2082	opacity: 0.42;2083}2084.tc-2 {2085	font-size: 12px;2086	opacity: 0.56;2087}2088.tc-3 {2089	font-size: 15px;2090	opacity: 0.7;2091}2092.tc-4 {2093	font-size: 18px;2094	opacity: 0.85;2095	font-weight: 500;2096}2097.tc-5 {2098	font-size: 23px;2099	opacity: 1;2100	font-weight: 500;2101}21022103.featured-label {2104	font-size: 0.6875rem;2105	font-weight: 400;2106	letter-spacing: 0.08em;2107	text-transform: uppercase;2108	color: var(--text-secondary);2109	margin: 0 0 12px;2110}2111.landing-self-host {2112	margin: 32px 0 0;2113	font-size: 0.75rem;2114}2115.landing-self-host a {2116	color: var(--text-secondary);2117}21182119/* ----- repo cards (front page, browse, profile) --------------------------- */21202121.card-grid {2122	display: grid;2123	grid-template-columns: repeat(2, minmax(0, 1fr));2124	gap: 16px;2125}2126.repo-card {2127	display: flex;2128	flex-direction: column;2129	padding: 20px 22px 16px;2130	border: 1px solid var(--bg-elevated);2131	border-radius: 4px;2132	background: var(--bg);2133	transition:2134		border-color 120ms,2135		background 120ms;2136	animation: fadeUp 350ms ease both;2137}2138.repo-card:hover {2139	text-decoration: none;2140	border-color: var(--text-faint);2141	background: var(--accent-tint-04);2142}2143.repo-card-head {2144	display: flex;2145	align-items: baseline;2146	justify-content: space-between;2147	gap: 12px;2148}2149.repo-card-name {2150	font-size: 1.375rem;2151	line-height: 1.1;2152	color: var(--accent);2153	overflow: hidden;2154	text-overflow: ellipsis;2155	white-space: nowrap;2156}2157.repo-card-saves {2158	font-size: 0.6875rem;2159	white-space: nowrap;2160}2161.repo-card-desc {2162	margin: 8px 0 0;2163	font-size: 0.8125rem;2164	line-height: 1.5;2165	color: var(--text-secondary);2166	display: -webkit-box;2167	-webkit-line-clamp: 2;2168	-webkit-box-orient: vertical;2169	overflow: hidden;2170}2171.repo-card-cat {2172	margin: 10px 0 0;2173	font-size: 0.9375rem;2174	color: var(--text);2175}21762177/* ----- profile ------------------------------------------------------------ */21782179/* The cover runs the full width of the window while the page keeps its column. */2180.profile-cover {2181	position: relative;2182	height: 380px;2183	margin: -24px calc(50% - 50vw) 0;2184	overflow: hidden;2185	border-bottom: 1px solid var(--bg-surface);2186}2187.hex-backdrop {2188	position: absolute;2189	inset: 0;2190	display: flex;2191	flex-direction: row-reverse;2192	justify-content: center;2193	align-items: flex-start;2194	gap: 13px;2195	pointer-events: none;2196	user-select: none;2197	font-family: var(--mono);2198	font-size: 13px;2199	line-height: 16px;2200	color: var(--accent-dim);2201	mask-image: linear-gradient(to bottom, transparent, #000 10%, #000 78%, transparent);2202}2203/* Matching groups keep every column continuous across the loop boundary. */2204.hex-col {2205	display: flex;2206	flex-direction: column;2207	flex-shrink: 0;2208	--hex-peak: 0.42;2209	opacity: var(--hex-peak);2210	animation:2211		hex-stream 120s linear infinite,2212		hex-shimmer 16s ease-in-out infinite;2213	animation-delay: -43s, 0s;2214}2215.hex-group {2216	display: flex;2217	flex-direction: column;2218	gap: 36px;2219	padding-bottom: 36px;2220}2221.hex-id {2222	writing-mode: vertical-rl;2223	text-orientation: upright;2224	letter-spacing: 3px;2225	opacity: 0.45;2226}2227.hex-id:first-child {2228	color: var(--accent);2229	opacity: 1;2230}2231.hex-col:nth-child(3n) {2232	--hex-peak: 0.65;2233	color: var(--accent);2234	animation-duration: 144s, 19s;2235	animation-delay: -77s, 0s;2236}2237.hex-col:nth-child(4n + 1) {2238	--hex-peak: 0.3;2239	animation-duration: 160s, 23s;2240	animation-delay: -119s, 0s;2241}2242.hex-col:nth-child(5n + 2) {2243	--hex-peak: 0.5;2244	animation-duration: 108s, 17s;2245	animation-delay: -19s, 0s;2246}2247.hex-col:nth-child(7n) {2248	--hex-peak: 0.55;2249	animation-delay: -91s, 0s;2250}2251.hex-backdrop.paused .hex-col {2252	animation-play-state: paused;2253}2254@keyframes hex-stream {2255	from {2256		transform: translateY(-50%);2257	}2258	to {2259		transform: translateY(0);2260	}2261}2262@keyframes hex-shimmer {2263	0%,2264	100% {2265		opacity: var(--hex-peak);2266	}2267	45% {2268		opacity: 0.1;2269	}2270}2271.profile-cover-fade {2272	position: absolute;2273	left: 0;2274	right: 0;2275	bottom: 0;2276	height: 55%;2277	background: linear-gradient(to bottom, transparent, var(--bg));2278	pointer-events: none;2279}2280.profile-identity {2281	position: absolute;2282	bottom: 40px;2283	left: 0;2284	right: 0;2285	max-width: 980px;2286	margin: 0 auto;2287	padding: 0 48px;2288}2289.profile-username {2290	margin: 0 0 8px;2291	font-family: "Sacramento", cursive;2292	font-weight: 400;2293	font-size: 3.625rem;2294	line-height: 1;2295	letter-spacing: -0.02em;2296	text-transform: lowercase;2297	color: var(--text-heading);2298	user-select: none;2299	animation: fadeUp 500ms ease both;2300}2301.profile-signature {2302	display: block;2303	max-height: 96px;2304	max-width: min(360px, 100%);2305}2306.profile-tagline {2307	margin: 0 0 6px;2308	font-family: var(--mono);2309	font-size: 0.75rem;2310	letter-spacing: 0.15em;2311	color: var(--text-faint);2312}2313.profile-op-badge {2314	display: block;2315	font-size: 0.6875rem;2316	letter-spacing: 0.18em;2317	color: var(--accent-bright);2318}23192320.profile-portrait-section {2321	display: grid;2322	grid-template-columns: 320px minmax(0, 1fr);2323	gap: 40px;2324	align-items: start;2325	padding-top: 40px;2326}2327.profile-left {2328	display: flex;2329	flex-direction: column;2330	gap: 16px;2331}2332.profile-identity-card,2333.profile-languages-bar {2334	padding: 20px 24px;2335	border: 1px solid var(--bg-elevated);2336	border-radius: 4px;2337}2338.profile-identity-bio {2339	margin: 0;2340	font-size: 0.875rem;2341	line-height: 1.5;2342	color: var(--text-muted);2343}2344.profile-identity-location {2345	margin: 6px 0 0;2346	font-family: var(--mono);2347	font-size: 0.8125rem;2348	color: var(--text-muted);2349}2350.profile-website-pill {2351	display: inline-block;2352	max-width: 100%;2353	margin-top: 10px;2354	padding: 3px 8px;2355	overflow: hidden;2356	text-overflow: ellipsis;2357	white-space: nowrap;2358	border: 1px solid var(--text-faint);2359	border-radius: 3px;2360	background: var(--bg-surface);2361	font-family: var(--mono);2362	font-size: 0.6875rem;2363	color: var(--accent);2364}2365.profile-website-pill:hover {2366	border-color: var(--accent);2367	text-decoration: none;2368}2369.profile-stats-grid {2370	display: grid;2371	grid-template-columns: 1fr 1fr;2372	border: 1px solid var(--bg-elevated);2373	border-radius: 4px;2374	overflow: hidden;2375}2376.profile-stat-tile {2377	padding: 16px;2378	border-right: 1px solid var(--bg-elevated);2379	border-bottom: 1px solid var(--bg-elevated);2380}2381.profile-stat-tile:nth-child(2n) {2382	border-right: none;2383}2384.profile-stat-tile:nth-last-child(-n + 2) {2385	border-bottom: none;2386}2387.profile-stat-number {2388	margin-bottom: 4px;2389	font-weight: 600;2390	font-size: 1.75rem;2391	line-height: 1;2392	color: var(--accent);2393}2394.profile-stat-label,2395.profile-section-label {2396	font-family: var(--mono);2397	font-size: 0.625rem;2398	text-transform: uppercase;2399	letter-spacing: 0.08em;2400	color: var(--text-faint);2401}2402.profile-lang-bar {2403	display: block;2404	width: 100%;2405	height: 6px;2406	margin-bottom: 8px;2407	border-radius: 3px;2408	background: var(--bg-surface);2409}2410.profile-lang-bar rect {2411	fill: var(--accent);2412	opacity: 0.6;2413}2414.profile-lang-bar rect:nth-child(2) {2415	fill: var(--accent-bright);2416}2417.profile-lang-bar rect:nth-child(3) {2418	fill: var(--accent-dim);2419}2420.profile-lang-bar rect:nth-child(4) {2421	fill: var(--text-muted);2422}2423.profile-lang-labels {2424	display: flex;2425	flex-wrap: wrap;2426	gap: 10px;2427	font-family: var(--mono);2428	font-size: 0.625rem;2429	color: var(--text-muted);2430}2431.profile-section-label {2432	margin-bottom: 16px;2433	letter-spacing: 0.2em;2434}2435.profile-timeline {2436	display: grid;2437	grid-auto-rows: 2.25rem;2438	max-height: 13.5rem;2439	overflow-y: auto;2440	scrollbar-width: thin;2441}2442.profile-event {2443	display: grid;2444	grid-template-columns: 96px 12px minmax(0, 1fr) auto;2445	gap: 10px;2446	align-items: baseline;2447	padding: 7px 0;2448	border-bottom: 1px solid var(--bg-surface);2449	font-family: var(--mono);2450	font-size: 0.6875rem;2451	animation: fadeUp 300ms ease both;2452}2453.profile-event-repo,2454.profile-event-message {2455	overflow: hidden;2456	text-overflow: ellipsis;2457	white-space: nowrap;2458}2459.profile-event-repo,2460.profile-event-glyph {2461	color: var(--accent);2462}2463.profile-event-glyph {2464	font-size: 0.625rem;2465}2466.profile-event-message {2467	color: var(--text-muted);2468}2469.profile-event-message:hover {2470	color: var(--text-heading);2471}2472.profile-event-time {2473	font-size: 0.625rem;2474	white-space: nowrap;2475	color: var(--text-faint);2476}2477.profile-empty-state {2478	font-style: italic;2479	font-size: 0.8125rem;2480	color: var(--text-faint);2481}2482.profile-repos-section {2483	margin-top: 40px;2484	padding-top: 40px;2485	border-top: 1px solid var(--bg-surface);2486}24872488/* ----- docs and support --------------------------------------------------- */24892490.admin-layout {2491	display: grid;2492	grid-template-columns: 160px minmax(0, 1fr);2493	gap: 48px;2494	min-height: 70vh;2495}2496.admin-sidebar {2497	position: sticky;2498	top: 24px;2499	align-self: start;2500	padding: 24px 0;2501	font-size: 0.75rem;2502}2503.admin-sidebar nav,2504.admin-sidebar-foot {2505	display: flex;2506	flex-direction: column;2507	gap: 16px;2508	margin-top: 20px;2509}2510.admin-sidebar a {2511	color: var(--text-secondary);2512}2513.admin-unread {2514	display: inline-block;2515	min-width: 1.5em;2516	padding: 0 5px;2517	border-radius: 999px;2518	background: var(--accent);2519	color: var(--bg);2520	font-size: 0.6875rem;2521	text-align: center;2522}2523.notification-unread {2524	box-shadow: inset 2px 0 0 var(--accent);2525	background: var(--accent-tint-04);2526}2527.notification-list .notification-unread {2528	border-left: 2px solid var(--accent);2529	padding-left: 12px;2530}25312532.admin-sidebar a[aria-current] {2533	color: var(--accent);2534	border-left: 2px solid var(--accent);2535	padding-left: 12px;2536}2537.admin-sidebar-foot {2538	border-top: 1px solid var(--border);2539	padding-top: 24px;2540	margin-top: 40px;2541}2542.admin-content {2543	min-width: 0;2544}2545.admin-heading {2546	border-bottom: 1px solid var(--border);2547	padding: 24px 0;2548	margin-bottom: 32px;2549}2550.admin-heading h1 {2551	font-size: 2rem;2552	font-weight: 400;2553	margin: 8px 0 0;2554	color: var(--text-heading);2555}2556.admin-intro {2557	color: var(--text-secondary);2558	margin-bottom: 24px;2559}2560.admin-notice {2561	color: var(--sage);2562	border-left: 2px solid var(--sage);2563	padding-left: 16px;2564}2565.admin-content .profile-signature {2566	max-width: 240px;2567	max-height: 120px;2568	object-fit: contain;2569}2570.admin-vitals {2571	display: flex;2572	flex-wrap: wrap;2573	gap: 24px 40px;2574	padding: 0 0 24px;2575	border-bottom: 1px solid var(--border);2576}2577.admin-vitals strong {2578	display: block;2579	font-size: 1.75rem;2580	font-weight: 400;2581	color: var(--accent);2582}2583.admin-days {2584	margin: 0;2585	padding: 0;2586	list-style: none;2587	font-size: 0.6875rem;2588}2589.admin-days li {2590	display: grid;2591	grid-template-columns: 11ch minmax(0, 1fr) 5ch;2592	gap: 12px;2593	align-items: center;2594	padding: 2px 0;2595}2596.admin-days meter {2597	appearance: none;2598	width: 100%;2599	height: 6px;2600	background: var(--border);2601	border: 0;2602}2603.admin-days meter::-webkit-meter-bar {2604	height: 6px;2605	background: var(--border);2606	border: 0;2607	border-radius: 0;2608}2609.admin-days meter::-webkit-meter-optimum-value {2610	background: var(--accent);2611}2612.admin-days meter::-moz-meter-bar {2613	background: var(--accent);2614}2615.admin-days li > span:last-child {2616	text-align: right;2617}2618.admin-select-row {2619	display: flex;2620	gap: 12px;2621	align-items: center;2622}2623.admin-select-row .issue-row {2624	flex: 1;2625	min-width: 0;2626}2627.admin-content form.issue-row {2628	align-items: center;2629}2630.admin-table {2631	width: 100%;2632	border-collapse: collapse;2633	font-size: 0.6875rem;2634}2635.admin-table th,2636.admin-table td {2637	padding: 6px 12px 6px 0;2638	border-bottom: 1px solid var(--border);2639	text-align: left;2640	font-weight: 400;2641	overflow-wrap: anywhere;2642}2643.admin-table th {2644	color: var(--text-muted);2645}2646.admin-releases {2647	margin: 12px 0 0;2648	padding: 0;2649	list-style: none;2650	font-size: 0.6875rem;2651}2652.admin-releases li {2653	padding: 4px 0;2654}2655.admin-repos-layout {2656	display: grid;2657	grid-template-columns: 140px minmax(0, 1fr);2658	gap: 24px;2659}2660.admin-repo-picker {2661	position: sticky;2662	top: 24px;2663	align-self: start;2664	display: flex;2665	flex-direction: column;2666	gap: 20px;2667	font-size: 0.75rem;2668}2669.admin-repo-picker nav {2670	display: flex;2671	flex-direction: column;2672	max-height: 50vh;2673	overflow-y: auto;2674	border-bottom: 1px solid var(--border);2675}2676.admin-repo-link {2677	padding: 12px 8px;2678	overflow-wrap: anywhere;2679	border-left: 2px solid transparent;2680	color: var(--text-secondary);2681}2682.admin-repo-link.active {2683	border-left-color: var(--accent);2684	background: var(--bg-surface);2685	color: var(--accent-bright);2686}2687.admin-repo-link span {2688	display: block;2689	font-size: 0.625rem;2690}2691.admin-repo-workspace {2692	min-width: 0;2693}2694#global-hide {2695	scroll-margin-top: 24px;2696}2697@media (max-width: 900px) {2698	.admin-repos-layout {2699		grid-template-columns: minmax(0, 1fr);2700	}2701	.admin-repo-picker {2702		position: static;2703	}2704	.admin-repo-picker nav {2705		max-height: 200px;2706	}2707}2708@media (max-width: 680px) {2709	.admin-layout {2710		grid-template-columns: minmax(0, 1fr);2711		gap: 0;2712	}2713	.admin-sidebar {2714		position: static;2715		padding: 8px 0;2716	}2717	.admin-sidebar nav,2718	.admin-sidebar-foot {2719		flex-flow: row wrap;2720		gap: 12px 20px;2721	}2722	.admin-sidebar-foot {2723		margin-top: 16px;2724		padding-top: 16px;2725	}2726}27272728.site-doc {2729	max-width: 72ch;2730	margin-top: 16px;2731}2732.site-doc h1 {2733	font-size: clamp(2rem, 5vw, 3rem);2734	font-weight: 400;2735	color: var(--text-heading);2736}2737.site-doc h2 {2738	margin-top: 2.4em;2739	scroll-margin-top: 24px;2740}2741.site-doc-layout {2742	display: grid;2743	grid-template-columns: 180px minmax(0, 72ch);2744	gap: 48px;2745}2746.site-doc-nav {2747	position: sticky;2748	top: 24px;2749	align-self: start;2750	display: flex;2751	flex-direction: column;2752	gap: 10px;2753	margin-top: 32px;2754	font-size: 0.8125rem;2755}2756.site-doc-nav a {2757	color: var(--text-secondary);2758	text-decoration: none;2759}2760.site-doc-nav a:hover {2761	color: var(--text-heading);2762}2763@media (max-width: 860px) {2764	.site-doc-layout {2765		grid-template-columns: minmax(0, 1fr);2766		gap: 0;2767	}2768	.site-doc-nav {2769		position: static;2770		flex-flow: row wrap;2771		gap: 8px 16px;2772		margin-top: 24px;2773	}2774}27752776@media (max-width: 860px) {2777	.headline,2778	.profile-portrait-section {2779		grid-template-columns: minmax(0, 1fr);2780	}2781	.headline {2782		gap: 8px;2783		padding-top: 48px;2784	}2785	.card-grid {2786		grid-template-columns: minmax(0, 1fr);2787	}2788}2789@media (max-width: 768px) {2790	.ticker {2791		height: 226px;2792		margin-top: -88px;2793		padding-top: 80px;2794	}2795	.profile-cover {2796		height: 280px;2797		margin-top: -16px;2798	}2799	.profile-identity {2800		bottom: 24px;2801		padding: 0 16px;2802	}2803	.profile-username {2804		font-size: 2.5rem;2805	}2806	.profile-event {2807		grid-template-columns: 72px 12px minmax(0, 1fr);2808	}2809	.profile-event-time {2810		display: none;2811	}2812}28132814/* ----- media in Markdown and the signed-in editor ------------------------- */28152816/* Sizes and places from an image's options (markdown.ts); classes, as the policy allows no inline2817   style. */2818.markdown .media {2819	display: block;2820	max-width: 100%;2821	height: auto;2822	margin: 12px auto;2823	border-radius: 3px;2824}2825.markdown .media-left {2826	margin-left: 0;2827}2828.markdown .media-right {2829	margin-right: 0;2830}2831.markdown .media-w25 {2832	width: 25%;2833}2834.markdown .media-w33 {2835	width: 33%;2836}2837.markdown .media-w50 {2838	width: 50%;2839}2840.markdown .media-w66 {2841	width: 66%;2842}2843.markdown .media-w75 {2844	width: 75%;2845}2846.markdown .media-w100 {2847	width: 100%;2848}2849.edit-btn {2850	margin-left: 12px;2851	padding: 1px 7px;2852	background: transparent;2853	border: 1px solid rgba(255, 173, 51, 0.2);2854	border-radius: 2px;2855	font-size: 0.625rem;2856	color: var(--text-faint);2857	cursor: pointer;2858	vertical-align: middle;2859}2860.repo-desc-editable:not(:has(.editor)) {2861	cursor: text;2862}2863.edit-btn:hover {2864	color: var(--accent);2865	border-color: var(--accent-dim);2866}2867.editor {2868	display: grid;2869	gap: 8px;2870	margin: 8px 0 16px;2871}2872.editor-toolbar,2873.editor-media,2874.editor-actions {2875	display: flex;2876	flex-wrap: wrap;2877	align-items: center;2878	gap: 4px;2879}2880.editor-media[hidden] {2881	display: none;2882}2883.editor-label,2884.editor-status {2885	margin: 0 6px;2886	font-size: 0.625rem;2887	color: var(--text-faint);2888}2889.editor-panes {2890	display: grid;2891	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);2892	gap: 12px;2893}2894@media (max-width: 768px) {2895	.editor-panes {2896		grid-template-columns: minmax(0, 1fr);2897	}2898}2899.editor-input {2900	width: 100%;2901	min-height: 4lh;2902	max-height: 70vh;2903	field-sizing: content;2904	resize: vertical;2905	padding: 10px 12px;2906	background: var(--bg-surface);2907	border: 1px solid var(--border);2908	border-radius: 3px;2909	color: var(--text);2910	font-size: 0.75rem;2911	line-height: 1.6;2912}2913.editor-input:focus {2914	outline: none;2915	border-color: var(--accent-dim);2916}2917.editor-preview {2918	min-width: 0;2919	max-height: 70vh;2920	overflow-y: auto;2921	padding: 0 4px;2922}2923.editor-preview:empty::before {2924	content: attr(data-empty);2925	font-family: var(--mono);2926	font-size: 0.625rem;2927	color: var(--text-faint);2928}29292930/* ----- file viewer (Kepr 2's Atlas modal) -------------------------------- */29312932body:has(> .fv-overlay) {2933	overflow: hidden;2934}2935.fv-overlay {2936	position: fixed;2937	inset: 0;2938	z-index: 2000;2939	display: flex;2940	flex-direction: column;2941	background: rgba(13, 8, 5, 0.97);2942	outline: none;2943	animation: fv-in 200ms ease both;2944}2945@keyframes fv-in {2946	from {2947		opacity: 0;2948		transform: translateY(6px) scale(0.97);2949	}2950}2951.fv-header {2952	display: flex;2953	align-items: center;2954	gap: 16px;2955	flex-shrink: 0;2956	height: 48px;2957	padding: 0 20px;2958	background: var(--bg);2959	border-bottom: 1px solid var(--bg-elevated);2960}2961.fv-close {2962	background: none;2963	border: 0;2964	padding: 0 4px;2965	font-size: 1.375rem;2966	line-height: 1;2967	color: var(--text-faint);2968	cursor: pointer;2969}2970.fv-close:hover {2971	color: var(--accent);2972}2973.fv-title {2974	display: flex;2975	align-items: baseline;2976	gap: 8px;2977	flex: 1;2978	min-width: 0;2979}2980.fv-name {2981	font-size: 1.25rem;2982	color: var(--text-heading);2983	white-space: nowrap;2984}2985.fv-path {2986	font-size: 0.625rem;2987	color: var(--text-faint);2988	white-space: nowrap;2989	overflow: hidden;2990	text-overflow: ellipsis;2991}2992.fv-controls,2993.fv-nav {2994	display: flex;2995	align-items: center;2996	gap: 4px;2997	flex-shrink: 0;2998}2999.fv-ctrl-btn {3000	background: transparent;3001	border: 1px solid rgba(255, 173, 51, 0.2);3002	border-radius: 2px;3003	padding: 3px 7px;3004	font: inherit;3005	font-size: 0.625rem;3006	color: var(--text-faint);3007	cursor: pointer;3008	transition:3009		color 100ms,3010		border-color 100ms;3011}3012.fv-ctrl-btn:hover:not(:disabled),3013.fv-ctrl-btn.active {3014	color: var(--accent);3015	border-color: rgba(255, 173, 51, 0.5);3016	text-decoration: none;3017}3018.fv-ctrl-btn:disabled {3019	opacity: 0.3;3020	cursor: default;3021}3022.fv-pos {3023	min-width: 48px;3024	text-align: center;3025	font-size: 0.625rem;3026	color: var(--text-faint);3027}3028.fv-body {3029	flex: 1;3030	min-height: 0;3031	display: grid;3032	grid-template-columns: minmax(0, 1fr) 280px;3033}3034.fv-source {3035	min-height: 0;3036	overflow: auto;3037	padding: 16px 28px 32px;3038	font-family: var(--mono);3039	font-size: 0.6875rem;3040	color: var(--text-faint);3041}3042.fv-source .file-view {3043	margin: -16px -28px 0;3044	border: 0;3045	background: none;3046	overflow: visible;3047}3048.fv-source .code {3049	font-size: var(--fv-size);3050	color: var(--text);3051}3052.fv-wrap .fv-source .lc {3053	white-space: pre-wrap;3054	overflow-wrap: anywhere;3055}3056.fv-source .file-markdown {3057	font-family: var(--sans);3058	font-size: calc(var(--fv-size) + 2px);3059	color: var(--text);3060}3061.fv-detail .atlas-info-desc {3062	font-size: 0.8125rem;3063}3064.fv-detail {3065	overflow-y: auto;3066	padding: 18px 20px 24px;3067	background: var(--bg);3068	border-left: 1px solid var(--bg-elevated);3069}3070/* After the viewer's own rules, which would otherwise win at equal specificity. */3071@media (max-width: 768px) {3072	.fv-overlay {3073		background: var(--bg);3074	}3075	.fv-header {3076		flex-wrap: wrap;3077		height: auto;3078		padding: 8px 12px;3079		gap: 8px 12px;3080	}3081	.fv-title {3082		flex-basis: calc(100% - 40px);3083	}3084	.fv-body {3085		grid-template-columns: minmax(0, 1fr);3086	}3087	.fv-detail {3088		display: none;3089	}3090	.fv-source {3091		padding: 12px 16px 24px;3092	}3093	.fv-source .file-view {3094		margin: -12px -16px 0;3095	}3096}30973098/* Last in the file, after every animation it stops, so it wins without !important. */3099@media (prefers-reduced-motion: reduce) {3100	.tri-outer,3101	.tri-inner,3102	.repo-name,3103	.repo-contributor,3104	.repo-desc,3105	.repo-homepage,3106	.repo-meta,3107	.repo-tabs,3108	.install-lines,3109	.repo-section,3110	.repo-details,3111	.save-message-head,3112	.ticker-row,3113	.ticker-track,3114	.hex-col,3115	.headline h1,3116	.headline-tagline,3117	.headline-cloud,3118	.repo-card,3119	.profile-username,3120	.profile-event,3121	.fv-overlay,3122	.repo-panel {3123		animation: none;3124	}3125	.nav-toggle span {3126		transition: none;3127	}3128	.hex-col {3129		opacity: 0.12;3130	}3131}31323133/* ----- fonts: served by Kepr itself; licences beside them in /static/fonts ----- */31343135/* latin */3136@font-face {3137	font-family: "Bellota";3138	font-style: normal;3139	font-weight: 700;3140	font-display: swap;3141	src: url(/static/fonts/bellota-latin-700-normal.woff2) format("woff2");3142	unicode-range:3143		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;3144}31453146/* cyrillic */3147@font-face {3148	font-family: "Bellota";3149	font-style: normal;3150	font-weight: 700;3151	font-display: swap;3152	src: url(/static/fonts/bellota-cyrillic-700-normal.woff2) format("woff2");3153	unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;3154}31553156/* latin-ext */3157@font-face {3158	font-family: "Bellota";3159	font-style: normal;3160	font-weight: 700;3161	font-display: swap;3162	src: url(/static/fonts/bellota-latin-ext-700-normal.woff2) format("woff2");3163	unicode-range:3164		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;3165}31663167/* vietnamese */3168@font-face {3169	font-family: "Bellota";3170	font-style: normal;3171	font-weight: 700;3172	font-display: swap;3173	src: url(/static/fonts/bellota-vietnamese-700-normal.woff2) format("woff2");3174	unicode-range:3175		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;3176}31773178/* greek */3179@font-face {3180	font-family: "Comfortaa";3181	font-style: normal;3182	font-weight: 700;3183	font-stretch: 100%;3184	font-display: swap;3185	src: url(/static/fonts/comfortaa-greek-700-normal.woff2) format("woff2");3186	unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;3187}31883189/* latin */3190@font-face {3191	font-family: "Comfortaa";3192	font-style: normal;3193	font-weight: 700;3194	font-stretch: 100%;3195	font-display: swap;3196	src: url(/static/fonts/comfortaa-latin-700-normal.woff2) format("woff2");3197	unicode-range:3198		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;3199}32003201/* cyrillic */3202@font-face {3203	font-family: "Comfortaa";3204	font-style: normal;3205	font-weight: 700;3206	font-stretch: 100%;3207	font-display: swap;3208	src: url(/static/fonts/comfortaa-cyrillic-700-normal.woff2) format("woff2");3209	unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;3210}32113212/* latin-ext */3213@font-face {3214	font-family: "Comfortaa";3215	font-style: normal;3216	font-weight: 700;3217	font-stretch: 100%;3218	font-display: swap;3219	src: url(/static/fonts/comfortaa-latin-ext-700-normal.woff2) format("woff2");3220	unicode-range:3221		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;3222}32233224/* vietnamese */3225@font-face {3226	font-family: "Comfortaa";3227	font-style: normal;3228	font-weight: 700;3229	font-stretch: 100%;3230	font-display: swap;3231	src: url(/static/fonts/comfortaa-vietnamese-700-normal.woff2) format("woff2");3232	unicode-range:3233		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;3234}32353236/* cyrillic-ext */3237@font-face {3238	font-family: "Comfortaa";3239	font-style: normal;3240	font-weight: 700;3241	font-stretch: 100%;3242	font-display: swap;3243	src: url(/static/fonts/comfortaa-cyrillic-ext-700-normal.woff2) format("woff2");3244	unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;3245}32463247/* latin */3248@font-face {3249	font-family: "Martian Mono";3250	font-style: normal;3251	font-weight: 400;3252	font-stretch: 100%;3253	font-display: swap;3254	src: url(/static/fonts/martian-mono-latin-400-normal.woff2) format("woff2");3255	unicode-range:3256		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;3257}32583259/* cyrillic */3260@font-face {3261	font-family: "Martian Mono";3262	font-style: normal;3263	font-weight: 400;3264	font-stretch: 100%;3265	font-display: swap;3266	src: url(/static/fonts/martian-mono-cyrillic-400-normal.woff2) format("woff2");3267	unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;3268}32693270/* latin-ext */3271@font-face {3272	font-family: "Martian Mono";3273	font-style: normal;3274	font-weight: 400;3275	font-stretch: 100%;3276	font-display: swap;3277	src: url(/static/fonts/martian-mono-latin-ext-400-normal.woff2) format("woff2");3278	unicode-range:3279		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;3280}32813282/* cyrillic-ext */3283@font-face {3284	font-family: "Martian Mono";3285	font-style: normal;3286	font-weight: 400;3287	font-stretch: 100%;3288	font-display: swap;3289	src: url(/static/fonts/martian-mono-cyrillic-ext-400-normal.woff2) format("woff2");3290	unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;3291}32923293/* latin */3294@font-face {3295	font-family: "Quicksand";3296	font-style: normal;3297	font-weight: 400;3298	font-stretch: 100%;3299	font-display: swap;3300	src: url(/static/fonts/quicksand-latin-400-normal.woff2) format("woff2");3301	unicode-range:3302		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;3303}33043305/* latin-ext */3306@font-face {3307	font-family: "Quicksand";3308	font-style: normal;3309	font-weight: 400;3310	font-stretch: 100%;3311	font-display: swap;3312	src: url(/static/fonts/quicksand-latin-ext-400-normal.woff2) format("woff2");3313	unicode-range:3314		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;3315}33163317/* vietnamese */3318@font-face {3319	font-family: "Quicksand";3320	font-style: normal;3321	font-weight: 400;3322	font-stretch: 100%;3323	font-display: swap;3324	src: url(/static/fonts/quicksand-vietnamese-400-normal.woff2) format("woff2");3325	unicode-range:3326		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;3327}33283329/* latin */3330@font-face {3331	font-family: "Quicksand";3332	font-style: normal;3333	font-weight: 600;3334	font-stretch: 100%;3335	font-display: swap;3336	src: url(/static/fonts/quicksand-latin-600-normal.woff2) format("woff2");3337	unicode-range:3338		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;3339}33403341/* latin-ext */3342@font-face {3343	font-family: "Quicksand";3344	font-style: normal;3345	font-weight: 600;3346	font-stretch: 100%;3347	font-display: swap;3348	src: url(/static/fonts/quicksand-latin-ext-600-normal.woff2) format("woff2");3349	unicode-range:3350		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;3351}33523353/* vietnamese */3354@font-face {3355	font-family: "Quicksand";3356	font-style: normal;3357	font-weight: 600;3358	font-stretch: 100%;3359	font-display: swap;3360	src: url(/static/fonts/quicksand-vietnamese-600-normal.woff2) format("woff2");3361	unicode-range:3362		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;3363}33643365/* latin */3366@font-face {3367	font-family: "Sacramento";3368	font-style: normal;3369	font-weight: 400;3370	font-display: swap;3371	src: url(/static/fonts/sacramento-latin-400-normal.woff2) format("woff2");3372	unicode-range:3373		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;3374}33753376/* latin-ext */3377@font-face {3378	font-family: "Sacramento";3379	font-style: normal;3380	font-weight: 400;3381	font-display: swap;3382	src: url(/static/fonts/sacramento-latin-ext-400-normal.woff2) format("woff2");3383	unicode-range:3384		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;3385}