kepr.css

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