kepr.css

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