kepr.css

61.0 KB · raw

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