kepr.css

68.5 KB · raw

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