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 .d0 {514	fill: var(--accent-dim);515	fill-opacity: 0.45;516}517.timeline .d1 {518	fill-opacity: 0.55;519}520.timeline .d2 {521	fill-opacity: 0.8;522}523.timeline .d3 {524	fill: var(--accent-bright);525	fill-opacity: 1;526}527.timeline-canvas {528	display: block;529	margin: 18px 0 4px;530	cursor: grab;531	touch-action: pan-y;532}533.timeline-tip {534	position: fixed;535	z-index: 200;536	max-width: 340px;537	padding: 0.45rem 0.7rem;538	background: #0f0c08;539	border: 1px solid var(--border);540	border-radius: 4px;541	pointer-events: none;542	line-height: 1.5;543}544.timeline-tip .tip-id {545	font-family: var(--mono);546	font-size: 12px;547	color: var(--accent);548}549.timeline-tip .tip-msg {550	margin-top: 3px;551	font-style: italic;552	font-size: 15px;553	color: var(--text-heading);554}555.timeline-tip .tip-meta {556	margin-top: 4px;557	font-family: var(--mono);558	font-size: 10px;559	color: var(--text-muted);560}561562/* ----- history ------------------------------------------------------------ */563564.history-row {565	position: relative;566	display: grid;567	grid-template-columns: 110px 1fr auto;568	align-items: baseline;569	gap: 0 10px;570	padding: 9px 8px;571	border-bottom: 1px solid var(--border);572	transition: background 100ms;573}574.history-row::before {575	content: "";576	position: absolute;577	left: 0;578	top: 0;579	bottom: 0;580	width: 2px;581	background: var(--accent);582	transform: scaleY(0);583	transition: transform 120ms ease;584}585.history-row:hover {586	background: var(--accent-tint-04);587	text-decoration: none;588}589.history-row:hover::before {590	transform: scaleY(1);591}592.history-id {593	font-family: var(--mono);594	font-size: 0.75rem;595	color: var(--text-secondary);596}597.history-msg {598	min-width: 0;599	line-height: 1.7;600	overflow: hidden;601	text-overflow: ellipsis;602	white-space: nowrap;603	transition: color 100ms;604}605.history-row:hover .history-msg {606	color: var(--accent);607}608.history-when {609	font-family: var(--mono);610	font-size: 0.6875rem;611	color: var(--text-muted);612	white-space: nowrap;613}614/* Kepr 2's history: four rows at a time, the rest a scroll away. */615.save-list {616	max-height: 180px;617	overflow-y: auto;618	scrollbar-width: thin;619	scrollbar-color: var(--border) transparent;620}621.pager {622	display: flex;623	justify-content: space-between;624	margin: 14px 0 0;625	font-size: 0.6875rem;626}627.pager a:last-child {628	margin-left: auto;629}630.pager a:hover {631	color: var(--accent);632}633634/* ----- atlas -------------------------------------------------------------- */635636.atlas-bar {637	display: flex;638	align-items: center;639	flex-wrap: wrap;640	gap: 8px 14px;641	margin: 10px 0 8px;642	font-size: 0.625rem;643}644.atlas-picker {645	position: relative;646}647/* Each section's fade-in makes it a stacking context, so the picker's popover would sit under the648   sections after it; the Atlas's section is lifted above them. */649#atlas {650	position: relative;651	z-index: 2;652}653.atlas-picker [hidden] {654	display: none;655}656.atlas-ref-tab {657	list-style: none;658	cursor: pointer;659	padding: 4px 8px;660	background: var(--bg);661	border: 1px solid rgba(200, 154, 90, 0.45);662	border-radius: 2px;663	font-size: 0.625rem;664	color: var(--accent);665}666.atlas-ref-tab::-webkit-details-marker {667	display: none;668}669.atlas-ref-tab:hover {670	color: var(--accent-dim);671}672.atlas-picker-popover {673	position: absolute;674	top: calc(100% + 6px);675	left: 0;676	z-index: 50;677	display: flex;678	flex-direction: column;679	width: min(420px, 90vw);680	max-height: 480px;681	background: var(--bg);682	border: 1px solid var(--text-faint);683	box-shadow: 0 18px 48px rgba(0, 0, 0, 0.48);684}685.atlas-picker-filter {686	padding: 8px 10px;687	background: var(--bg);688	border: 0;689	border-bottom: 1px solid var(--bg-elevated);690	outline: none;691	font-size: 0.6875rem;692	color: var(--text-heading);693}694.atlas-picker-filter::placeholder {695	color: var(--text-faint);696}697.atlas-picker-list {698	flex: 1 1 auto;699	min-height: 0;700	overflow: auto;701	scrollbar-width: thin;702	scrollbar-color: var(--border) transparent;703}704.atlas-picker-row {705	display: grid;706	grid-template-columns: 80px 1fr auto;707	align-items: center;708	gap: 8px;709	padding: 6px 10px;710	border-bottom: 1px solid rgba(42, 32, 24, 0.4);711	color: var(--text-muted);712}713.atlas-picker-row:hover {714	background: rgba(200, 154, 90, 0.06);715	text-decoration: none;716}717.atlas-picker-row.active {718	background: rgba(200, 154, 90, 0.1);719}720.atlas-picker-row:hover *,721.atlas-picker-row.active * {722	color: var(--accent);723}724.atlas-picker-id,725.atlas-picker-age {726	font-family: var(--mono);727	font-size: 0.5625rem;728	color: var(--text-faint);729	white-space: nowrap;730	overflow: hidden;731	text-overflow: ellipsis;732}733.atlas-picker-msg {734	font-size: 0.6875rem;735	white-space: nowrap;736	overflow: hidden;737	text-overflow: ellipsis;738}739.atlas-head-link {740	color: var(--accent);741}742.atlas-fold-btn {743	margin-left: auto;744}745.atlas-fold-btn,746.atlas-search-btn {747	padding: 4px 8px;748	background: transparent;749	border: 1px solid var(--border);750	border-radius: 2px;751	font: inherit;752	font-size: 0.625rem;753	color: var(--text-faint);754	cursor: pointer;755}756.atlas-fold-btn:hover,757.atlas-search-btn:hover {758	color: var(--accent);759	border-color: var(--accent-dim);760}761.atlas-fold-btn[hidden],762.atlas-search-btn[hidden],763.atlas-filter[hidden] {764	display: none;765}766.atlas-filter {767	width: 220px;768	max-width: 100%;769	padding: 5px 10px;770	background: transparent;771	border: 1px solid var(--border);772	border-radius: 3px;773	color: var(--text);774	font-size: 0.6875rem;775}776.atlas-filter:focus {777	outline: none;778	border-color: var(--accent-dim);779}780.atlas-filter::placeholder {781	color: var(--text-faint);782}783/* kepr.js fixes the height at the closed tree's, at most Kepr 2's 520px, and the tree and panel784   scroll inside it; without it, the whole box scrolls. */785.atlas {786	display: grid;787	grid-template-columns: minmax(0, 1fr);788	grid-template-rows: minmax(0, 1fr);789	gap: 0 20px;790	max-height: 520px;791	overflow-y: auto;792	border-top: 1px solid var(--bg-elevated);793	border-bottom: 1px solid var(--bg-elevated);794}795.atlas-tree,796.atlas-panel {797	min-height: 0;798	overflow-y: auto;799	scrollbar-width: thin;800	scrollbar-color: var(--border) transparent;801}802.atlas:has(> .atlas-panel:not([hidden])) {803	grid-template-columns: minmax(0, 1.25fr) minmax(0, 0.75fr);804}805.atlas [hidden] {806	display: none;807}808.atlas-folder > summary {809	list-style: none;810}811.atlas-folder > summary::-webkit-details-marker {812	display: none;813}814.atlas-children {815	padding-left: 14px;816	border-left: 1px solid var(--border);817	margin-left: 6px;818}819.atlas-row {820	position: relative;821	display: grid;822	grid-template-columns: minmax(90px, auto) 1fr auto;823	align-items: baseline;824	gap: 0 12px;825	padding: 6px 8px;826	border-bottom: 1px solid rgba(42, 32, 24, 0.62);827	cursor: pointer;828	transition: background 100ms;829}830.atlas-row:hover,831.atlas-row:focus-visible,832.atlas-row.selected {833	outline: none;834	background: var(--accent-tint-04);835	text-decoration: none;836}837.atlas-row.selected {838	box-shadow: inset 2px 0 0 var(--accent);839}840.atlas-name {841	color: var(--text-heading);842	font-size: 0.875rem;843	white-space: nowrap;844}845.atlas-folder > summary .atlas-name {846	color: var(--accent);847}848.atlas-desc {849	min-width: 0;850	color: var(--text-muted);851	font-size: 0.8125rem;852	overflow: hidden;853	text-overflow: ellipsis;854	white-space: nowrap;855}856.atlas-meta {857	font-size: 0.625rem;858	color: var(--text-faint);859	white-space: nowrap;860}861.atlas-panel {862	padding: 12px 0 12px 16px;863	border-left: 1px solid var(--border);864}865.atlas-hint {866	margin: 0;867	font-size: 0.625rem;868	color: var(--text-faint);869}870.atlas-info-name {871	margin: 0;872	font-weight: 400;873	font-size: 1.375rem;874	color: var(--text-heading);875	overflow-wrap: anywhere;876}877.atlas-info-path {878	margin: 0 0 12px;879	font-size: 0.625rem;880	color: var(--text-faint);881	overflow-wrap: anywhere;882}883.atlas-facts {884	display: grid;885	grid-template-columns: auto 1fr;886	gap: 3px 12px;887	margin: 0 0 12px;888	font-size: 0.625rem;889}890.atlas-facts dt {891	color: var(--text-faint);892}893.atlas-facts dd {894	margin: 0;895	color: var(--text);896}897.atlas-facts a {898	color: var(--accent);899}900.atlas-info-desc {901	font-size: 0.8125rem;902	color: var(--text-muted);903}904/* ----- README and rendered Markdown --------------------------------------- */905906.repo-details {907	margin: 36px 0 0;908	animation: fadeIn 320ms 80ms ease both;909}910.repo-details-toggle {911	border-bottom: 1px solid var(--border);912	padding-bottom: 24px;913}914.repo-details-head {915	display: flex;916	align-items: center;917	gap: 6px;918	padding: 8px 0;919	font-family: var(--mono);920	font-size: 0.6875rem;921	letter-spacing: 0.12em;922	color: var(--text-secondary);923	text-transform: uppercase;924}925.markdown {926	font-size: 1.05rem;927	line-height: 1.7;928	overflow-wrap: break-word;929}930.markdown h1,931.markdown h2,932.markdown h3,933.markdown h4 {934	font-weight: 400;935	margin: 1.4em 0 0.4em;936	color: var(--text-heading);937}938.markdown h1 {939	font-size: 1.5rem;940}941.markdown h2 {942	font-size: 1.3rem;943}944.markdown h3 {945	font-size: 1.15rem;946}947.markdown p {948	margin: 0.8em 0;949}950.markdown ul,951.markdown ol {952	margin: 0.8em 0 0.8em 1.5em;953	padding: 0;954}955.markdown a {956	color: var(--accent);957}958.markdown code {959	font-family: var(--mono);960	font-size: 0.82em;961	color: var(--accent);962	background: var(--bg-surface);963	padding: 0.15em 0.35em;964	border-radius: 3px;965}966.markdown pre {967	background: var(--bg-surface);968	border-radius: 4px;969	padding: 1em 1.2em;970	overflow-x: auto;971	margin: 1em 0;972}973.markdown pre code {974	background: none;975	padding: 0;976	color: var(--text);977	font-size: 0.85em;978}979.markdown blockquote {980	border-left: 3px solid var(--border);981	margin: 1em 0;982	padding: 0.1em 1em;983	color: var(--text-secondary);984}985.markdown hr {986	border: none;987	border-top: 1px solid var(--border);988	margin: 1.5em 0;989}990.markdown img {991	max-width: 100%;992}993.markdown table {994	border-collapse: collapse;995	display: block;996	overflow-x: auto;997}998.markdown th,999.markdown td {1000	border: 1px solid var(--border);1001	padding: 4px 10px;1002}10031004/* ----- file viewer -------------------------------------------------------- */10051006.breadcrumb {1007	margin: 0 0 4px;1008	font-size: 0.75rem;1009	overflow-wrap: anywhere;1010}1011.breadcrumb a:hover {1012	color: var(--accent);1013}1014.file-page-title {1015	font-size: 1.75rem;1016	font-weight: 400;1017	margin: 4px 0 12px;1018	overflow-wrap: anywhere;1019}1020.file-meta,1021.file-toggle {1022	margin: 0 0 12px;1023	font-size: 0.6875rem;1024}1025.file-meta a,1026.file-toggle a.active {1027	color: var(--accent);1028}1029.file-image img {1030	max-width: 100%;1031	background: var(--bg-surface);1032	border: 1px solid var(--border);1033}1034.file-view {1035	border: 1px solid var(--border);1036	background: var(--bg-surface);1037	overflow-x: auto;1038}1039.code {1040	margin: 0;1041	padding: 16px 0;1042	font-family: var(--mono);1043	font-size: 0.8125rem;1044	line-height: 1.65;1045	tab-size: 4;1046}1047/* A grid, so tab stops count from the start of the code rather than the line number. */1048.code .line {1049	display: grid;1050	grid-template-columns: 6em 1fr;1051	padding-right: 24px;1052	scroll-margin-top: 40vh;1053}1054.code .line:target,1055.code .line.hl {1056	background: var(--accent-tint-12);1057}1058.code .lc {1059	white-space: pre;1060}1061.code .ln {1062	padding-right: 1.5em;1063	text-align: right;1064	color: var(--text-faint);1065	user-select: none;1066}1067.code .ln:hover {1068	color: var(--accent);1069	text-decoration: none;1070}10711072/* Shiki's CSS-variables theme roles, in Kepr 2's highlight.js colours. */1073.tk-comment {1074	color: var(--text-muted);1075	font-style: italic;1076}1077.tk-keyword {1078	color: var(--accent);1079}1080.tk-string,1081.tk-string-expression {1082	color: var(--sage);1083}1084.tk-constant {1085	color: var(--accent-bright);1086}1087.tk-function {1088	color: var(--accent);1089}1090.tk-parameter {1091	color: var(--text);1092}1093.tk-punctuation {1094	color: var(--text-secondary);1095}1096.tk-link {1097	color: var(--accent);1098	text-decoration: underline;1099}1100.tk-inserted {1101	color: var(--sage);1102}1103.tk-deleted {1104	color: #c45c5c;1105}1106.tk-i {1107	font-style: italic;1108}11091110/* ----- save page ---------------------------------------------------------- */11111112.save-id {1113	margin: 12px 0 0;1114	font-size: 0.75rem;1115	color: var(--text-secondary);1116}1117.save-flag {1118	margin: 12px 0 0;1119	padding: 8px 12px;1120	border: 1px solid #6a3a2a;1121	border-left: 2px solid #c45c5c;1122	background: rgba(196, 92, 92, 0.08);1123	color: var(--text-heading);1124}1125.save-flag-label {1126	margin-right: 8px;1127	font-size: 0.625rem;1128	letter-spacing: 0.12em;1129	text-transform: uppercase;1130	color: #c45c5c;1131}1132.save-message-head {1133	font-size: 2.25rem;1134	font-weight: 400;1135	line-height: 1.3;1136	margin: 12px 0 8px;1137	color: var(--text-heading);1138	overflow-wrap: anywhere;1139	animation: fadeUp 280ms ease both;1140}1141.save-message-body {1142	margin: 0 0 12px;1143	white-space: pre-wrap;1144	color: var(--text-secondary);1145}1146.save-facts {1147	display: grid;1148	grid-template-columns: max-content 1fr;1149	gap: 2px 16px;1150	margin: 16px 0;1151	font-size: 0.75rem;1152}1153.save-facts dt {1154	color: var(--text-faint);1155}1156.save-facts dd {1157	margin: 0;1158	overflow-wrap: anywhere;1159}1160.save-facts a,1161.save-links a,1162.diff-view a {1163	color: var(--accent);1164}1165.save-links {1166	display: flex;1167	flex-wrap: wrap;1168	gap: 8px 20px;1169	margin: 0;1170	font-size: 0.75rem;1171}1172.save-empty {1173	font-size: 0.75rem;1174}1175.change-row,1176.diff-head {1177	display: grid;1178	grid-template-columns: 1fr auto;1179	gap: 12px;1180	padding: 7px 8px;1181	border-bottom: 1px solid var(--border);1182	font-family: var(--mono);1183	font-size: 0.8125rem;1184}1185.change-row:hover {1186	background: var(--accent-tint-04);1187	text-decoration: none;1188}1189.change-path {1190	min-width: 0;1191	overflow-wrap: anywhere;1192}1193.change-added .change-path {1194	color: var(--sage);1195}1196.change-removed .change-path {1197	color: var(--text-muted);1198	text-decoration: line-through;1199}1200.change-modified .change-path {1201	color: var(--accent-bright);1202}1203.change-stat {1204	font-size: 0.75rem;1205	white-space: nowrap;1206}1207.diff-add {1208	color: var(--sage);1209}1210.diff-del {1211	color: #c45c5c;1212}1213.diff-note {1214	color: var(--text-faint);1215	font-size: 0.6875rem;1216}1217.diff-file {1218	margin: 0 0 20px;1219}1220.diff-head {1221	cursor: pointer;1222	list-style: none;1223	border: 1px solid var(--border);1224	background: var(--bg-surface);1225}1226.diff-head::-webkit-details-marker {1227	display: none;1228}1229.diff-file > .file-view {1230	border-top: 0;1231}1232.diff-file > .diff-note,1233.diff-view {1234	margin: 8px 0 0;1235	font-size: 0.6875rem;1236}1237.code.diff {1238	padding: 4px 0;1239}1240.diff .dl {1241	display: grid;1242	grid-template-columns: 3.5em 3.5em 1.5em 1fr;1243	padding-right: 24px;1244}1245.diff .dh {1246	display: block;1247	padding: 4px 1em;1248	color: var(--text-faint);1249	background: var(--bg-elevated);1250}1251.diff .ln {1252	padding-right: 0.75em;1253	text-align: right;1254	color: var(--text-faint);1255	user-select: none;1256}1257.diff .ds {1258	text-align: center;1259	color: var(--text-faint);1260	user-select: none;1261}1262.diff .dl-add {1263	background: rgba(122, 154, 104, 0.1);1264}1265.diff .dl-add .ds {1266	color: var(--sage);1267}1268.diff .dl-del {1269	background: rgba(196, 92, 92, 0.08);1270}1271.diff .dl-del .ds {1272	color: #c45c5c;1273}12741275/* ----- archives ----------------------------------------------------------- */12761277.archive-row {1278	padding: 12px 8px;1279	border-bottom: 1px solid var(--border);1280}1281.archive-save {1282	display: flex;1283	flex-wrap: wrap;1284	align-items: baseline;1285	gap: 0 10px;1286	margin: 0;1287}1288.archive-save .history-id {1289	flex: 0 0 110px;1290}1291.archive-msg {1292	flex: 1;1293}1294.archive-head {1295	font-size: 0.625rem;1296	letter-spacing: 0.08em;1297	color: var(--accent);1298	border: 1px solid var(--accent-dim);1299	border-radius: 2px;1300	padding: 0 6px;1301}1302.archive-save .history-id:hover {1303	color: var(--accent);1304}1305.archive-links {1306	display: flex;1307	flex-wrap: wrap;1308	align-items: center;1309	gap: 12px;1310	margin: 6px 0;1311	font-size: 0.75rem;1312}1313.archive-links a {1314	color: var(--accent);1315}1316.archive-row .install-line {1317	justify-content: space-between;1318}1319.archive-row--head {1320	background: var(--accent-tint-04);1321	border-top: 1px solid var(--accent-dim);1322}13231324/* ----- phone -------------------------------------------------------------- */13251326@media (max-width: 768px) {1327	body > nav {1328		padding: 20px 16px;1329	}1330	/* Without the menu script the links wrap in the bar instead of running off it. */1331	.nav-links {1332		flex-wrap: wrap;1333		justify-content: flex-end;1334		gap: 8px 18px;1335		min-width: 0;1336	}1337	.nav--menu {1338		position: relative;1339	}1340	.nav--menu .nav-toggle {1341		display: flex;1342		flex-direction: column;1343		justify-content: center;1344		gap: 4px;1345		width: 36px;1346		height: 36px;1347		margin: -8px -8px -8px auto;1348		padding: 8px;1349		border: 0;1350		background: none;1351		color: var(--text-secondary);1352		cursor: pointer;1353	}1354	.nav-toggle span {1355		height: 1.5px;1356		background: currentColor;1357		transition:1358			transform 0.2s ease,1359			opacity 0.2s ease;1360	}1361	.nav--open .nav-toggle {1362		color: var(--accent);1363	}1364	.nav--open .nav-toggle span:nth-child(1) {1365		transform: translateY(5.5px) rotate(45deg);1366	}1367	.nav--open .nav-toggle span:nth-child(2) {1368		opacity: 0;1369	}1370	.nav--open .nav-toggle span:nth-child(3) {1371		transform: translateY(-5.5px) rotate(-45deg);1372	}1373	.nav--menu .nav-links {1374		display: none;1375	}1376	.nav--menu.nav--open .nav-links {1377		position: absolute;1378		top: 100%;1379		left: 0;1380		right: 0;1381		z-index: 10;1382		display: flex;1383		flex-direction: column;1384		gap: 0;1385		padding: 0 16px 8px;1386		background: var(--bg);1387		border-bottom: 1px solid var(--border);1388		font-size: 0.8125rem;1389	}1390	.nav--open .nav-links > * {1391		padding: 14px 0;1392		border-top: 1px solid var(--border);1393	}1394	main {1395		padding: 16px 16px 80px;1396	}1397	.repo-name {1398		font-size: 2.75rem;1399	}1400	.install-lines {1401		align-items: stretch;1402		margin-left: 0;1403		width: 100%;1404	}1405	.history-row {1406		grid-template-columns: 1fr auto;1407	}1408	.history-id {1409		grid-column: 1 / -1;1410	}1411	.atlas-row {1412		grid-template-columns: 1fr auto;1413	}1414	.atlas-desc {1415		grid-column: 1 / -1;1416		grid-row: 2;1417	}1418	.atlas:has(> .atlas-panel:not([hidden])) {1419		grid-template-columns: minmax(0, 1fr);1420	}1421	.atlas-panel {1422		display: none;1423	}1424	.code .line {1425		grid-template-columns: 4.5em 1fr;1426	}1427	.save-message-head {1428		font-size: 1.625rem;1429	}1430	.archive-msg {1431		flex-basis: 100%;1432		order: 1;1433	}1434	.diff .dl {1435		grid-template-columns: 2.75em 2.75em 1.25em 1fr;1436	}1437	.code .ln {1438		padding-right: 1em;1439	}1440}14411442/* ----- builds ------------------------------------------------------------- */14431444.release {1445	padding: 20px 8px 24px;1446	border-bottom: 1px solid var(--border);1447}1448.release-head {1449	display: flex;1450	flex-wrap: wrap;1451	align-items: baseline;1452	gap: 0 14px;1453	margin: 0 0 8px;1454}1455.release-version {1456	font-family: "Martian Mono", monospace;1457	font-size: 1rem;1458	color: var(--accent);1459}1460.release-latest .release-version {1461	font-size: clamp(2rem, 5vw, 3.5rem);1462	letter-spacing: -0.06em;1463}1464.release-latest > p {1465	font-size: 0.6875rem;1466	margin: 16px 8px 0;1467}1468.release-older > summary {1469	padding: 16px 8px;1470	font-size: 0.75rem;1471	color: var(--text-muted);1472	cursor: pointer;1473	border-bottom: 1px solid var(--border);1474}1475.release-head .history-id:hover {1476	color: var(--accent);1477}1478.release-notes {1479	margin-bottom: 14px;1480}1481.release-file {1482	padding: 10px 0;1483	border-top: 1px solid var(--border);1484}1485.release-file-head {1486	display: flex;1487	flex-wrap: wrap;1488	align-items: baseline;1489	gap: 4px 14px;1490	margin: 0;1491}1492.release-platform {1493	flex: 0 0 180px;1494}1495.release-download {1496	flex: 1;1497	font-size: 0.75rem;1498	color: var(--accent);1499	overflow-wrap: anywhere;1500}1501.release-meta,1502.release-sha {1503	font-size: 0.6875rem;1504	color: var(--text-muted);1505}1506.release-sha {1507	margin: 4px 0 0;1508	overflow-wrap: anywhere;1509}1510.release-hint {1511	margin: 4px 0 0;1512	font-size: 0.8125rem;1513}15141515/* ----- issues ------------------------------------------------------------- */15161517.issues-bar {1518	display: flex;1519	flex-wrap: wrap;1520	align-items: center;1521	gap: 8px 12px;1522	font-size: 0.75rem;1523	padding-bottom: 14px;1524	border-bottom: 1px solid var(--bg-elevated);1525}1526.issues-tab {1527	color: var(--text-faint);1528	border: 1px solid transparent;1529	border-radius: 999px;1530	padding: 4px 10px;1531}1532button.issues-tab {1533	font: inherit;1534	background: none;1535	cursor: pointer;1536}1537.issues-tab.active {1538	color: var(--accent);1539	border-color: var(--accent-tint-12);1540}1541.issues-new {1542	margin-left: auto;1543	color: var(--text-muted);1544}1545.issue-row {1546	display: grid;1547	grid-template-columns: auto minmax(0, 1fr) auto;1548	align-items: baseline;1549	gap: 2px 10px;1550	padding: 16px 8px;1551	border-bottom: 1px solid var(--border);1552}1553.issue-row:hover {1554	text-decoration: none;1555	background: var(--accent-tint-04);1556}1557.issue-title {1558	grid-column: 2 / -1;1559	overflow-wrap: anywhere;1560	color: var(--text-heading);1561}1562.issues-new:hover,1563.issue-row:hover .issue-title {1564	color: var(--accent);1565}1566.issue-meta,1567.issue-post-head {1568	font-size: 0.6875rem;1569	color: var(--text-muted);1570}1571.issue-symbol--open {1572	color: var(--accent);1573}1574.issue-symbol--closed {1575	color: var(--text-faint);1576}1577.issue-row .issue-meta {1578	grid-column: 2;1579}1580.issue-reporter {1581	font-size: 0.6875rem;1582	color: var(--text-muted);1583	overflow-wrap: anywhere;1584}1585.issues-filter {1586	display: flex;1587	flex-wrap: wrap;1588	gap: 8px;1589	margin-bottom: 16px;1590}1591.issue-post {1592	margin: 18px 0;1593	padding: 14px 18px;1594	border: 1px solid var(--border);1595	border-radius: 6px;1596	background: var(--bg-surface);1597}1598.issue-post--operator {1599	border-color: var(--accent-dim);1600}1601.issue-post-head {1602	display: flex;1603	flex-wrap: wrap;1604	gap: 4px 12px;1605	margin: 0 0 8px;1606}1607.issue-author {1608	color: var(--text);1609}1610.issue-badge {1611	color: var(--accent);1612	text-transform: uppercase;1613	letter-spacing: 0.08em;1614}1615.issue-text {1616	white-space: pre-wrap;1617	overflow-wrap: anywhere;1618}1619.issue-link {1620	font-size: 0.75rem;1621	overflow-wrap: anywhere;1622	color: var(--accent);1623}1624.issues-form {1625	display: flex;1626	flex-direction: column;1627	gap: 6px;1628	max-width: 640px;1629	margin-top: 18px;1630}1631.issues-label {1632	font-family: var(--mono);1633	font-size: 0.6875rem;1634	margin-top: 6px;1635	opacity: 0.8;1636}1637.issues-input,1638.issues-textarea {1639	font-family: var(--mono);1640	font-size: 0.75rem;1641	width: 100%;1642	padding: 6px 8px;1643	color: var(--text);1644	background: var(--bg);1645	border: 1px solid var(--border);1646	border-radius: 4px;1647	resize: vertical;1648}1649.issues-input:focus,1650.issues-textarea:focus {1651	outline: none;1652	border-color: var(--accent);1653}1654.issues-filter .issues-input {1655	width: auto;1656	min-width: 0;1657	flex: 1 1 140px;1658}1659.issues-submit {1660	align-self: flex-start;1661	margin-top: 10px;1662	padding: 6px 14px;1663	font-family: var(--mono);1664	font-size: 0.75rem;1665	color: var(--bg);1666	background: var(--accent);1667	border: none;1668	border-radius: 4px;1669	cursor: pointer;1670}1671.issues-submit:hover {1672	opacity: 0.85;1673}1674.issues-submit:disabled {1675	opacity: 0.4;1676	cursor: not-allowed;1677}1678.issues-actions {1679	display: flex;1680	align-items: center;1681	gap: 16px;1682	margin: 10px 0 0;1683}1684.issues-actions .issues-submit {1685	align-self: auto;1686	margin-top: 0;1687}1688.issues-cancel {1689	font-size: 0.75rem;1690	color: var(--text-muted);1691}1692.issues-cancel:hover {1693	color: var(--accent);1694}1695button.issues-cancel {1696	padding: 0;1697	border: 0;1698	background: none;1699	cursor: pointer;1700}1701.issues-error {1702	font-size: 0.75rem;1703	color: #c86a5a;1704}1705/* The honeypot: off-screen for people, still in the form for bots. */1706.issues-hp {1707	position: absolute;1708	left: -9999px;1709	height: 0;1710	overflow: hidden;1711	opacity: 0;1712}17131714/* ----- front page --------------------------------------------------------- */17151716/* Kepr 2's hero band, full width, reaching up behind the nav (32px mark + 48px padding). */1717body > nav {1718	position: relative;1719	z-index: 1;1720}1721.ticker {1722	position: relative;1723	height: 304px;1724	margin: -104px calc(50% - 50vw) 0;1725	padding: 96px 0 20px;1726	display: flex;1727	flex-direction: column;1728	justify-content: space-evenly;1729	overflow: hidden;1730	pointer-events: none;1731	user-select: none;1732	border-bottom: 1px solid var(--border);1733	font-family: var(--mono);1734	color: var(--text-secondary);1735	mask-image: linear-gradient(1736		to right,1737		transparent,1738		#000 48px,1739		#000 calc(100% - 48px),1740		transparent1741	);1742}1743.ticker-row {1744	white-space: nowrap;1745	line-height: 1.2;1746	opacity: var(--o);1747	animation: ticker-glow 83s var(--glow-at) ease-in-out infinite;1748}1749/* The drift's duration is set by kepr.js from the track's width, so every row keeps Kepr 2's1750   pace in px/s (--speed) however long its messages are; this is the no-JavaScript fallback. */1751.ticker-track {1752	display: inline-flex;1753	gap: 64px;1754	padding-right: 64px;1755	animation: ticker-drift 1500s linear infinite;1756}1757/* Kepr 2's depth bands: nearer rows are larger, brighter and faster. Each row takes its turn at1758   the glow, a few seconds out of every 83, spaced so one or two glow at a time. */1759.ticker-row:nth-child(1) {1760	font-size: 9px;1761	--o: 0.05;1762	--speed: 12;1763	--glow-at: -5s;1764}1765.ticker-row:nth-child(2) {1766	font-size: 18px;1767	--o: 0.1;1768	--speed: 23;1769	--glow-at: -41s;1770}1771.ticker-row:nth-child(3) {1772	font-size: 7px;1773	--o: 0.04;1774	--speed: 9;1775	--glow-at: -77s;1776}1777.ticker-row:nth-child(4) {1778	font-size: 13px;1779	--o: 0.07;1780	--speed: 17;1781	--glow-at: -29s;1782}1783.ticker-row:nth-child(5) {1784	font-size: 22px;1785	--o: 0.12;1786	--speed: 29;1787	--glow-at: -65s;1788}1789.ticker-row:nth-child(6) {1790	font-size: 8px;1791	--o: 0.045;1792	--speed: 10;1793	--glow-at: -17s;1794}1795.ticker-row:nth-child(7) {1796	font-size: 15px;1797	--o: 0.08;1798	--speed: 20;1799	--glow-at: -53s;1800}1801@keyframes ticker-drift {1802	to {1803		transform: translateX(-50%);1804	}1805}1806@keyframes ticker-glow {1807	0%,1808	10%,1809	100% {1810		color: var(--text-secondary);1811		opacity: var(--o);1812		text-shadow: none;1813	}1814	5% {1815		color: var(--accent);1816		opacity: calc(var(--o) * 3.5);1817		text-shadow: 0 0 3px var(--accent-tint-12);1818	}1819}18201821.headline {1822	display: grid;1823	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);1824	gap: 48px;1825	align-items: center;1826	padding: 56px 0 40px;1827}1828.headline h1 {1829	font-size: clamp(2rem, 5vw, 3.5rem);1830	font-weight: 400;1831	line-height: 1.15;1832	color: var(--text-heading);1833	margin: 0 0 20px;1834	animation: fadeUp 480ms ease both;1835}1836.headline-tagline {1837	margin: 0;1838	font-size: 0.9375rem;1839	line-height: 1.7;1840	color: var(--text-secondary);1841	animation: fadeUp 480ms 80ms ease both;1842}1843.headline-cloud {1844	display: flex;1845	flex-wrap: wrap;1846	justify-content: center;1847	align-items: center;1848	gap: 10px 22px;1849	padding: 20px;1850	animation: fadeIn 600ms 160ms ease both;1851}1852.tc-tag {1853	font-family: var(--mono);1854	letter-spacing: 0.03em;1855	white-space: nowrap;1856	color: var(--accent-dim);1857	transition:1858		color 0.2s,1859		opacity 0.2s,1860		text-shadow 0.2s;1861}1862.tc-tag:hover {1863	color: var(--accent);1864	opacity: 1;1865	text-shadow: 0 0 14px var(--accent-tint-12);1866}1867.tc-1 {1868	font-size: 10px;1869	opacity: 0.42;1870}1871.tc-2 {1872	font-size: 12px;1873	opacity: 0.56;1874}1875.tc-3 {1876	font-size: 15px;1877	opacity: 0.7;1878}1879.tc-4 {1880	font-size: 18px;1881	opacity: 0.85;1882	font-weight: 500;1883}1884.tc-5 {1885	font-size: 23px;1886	opacity: 1;1887	font-weight: 500;1888}18891890.featured-label {1891	font-size: 0.6875rem;1892	font-weight: 400;1893	letter-spacing: 0.08em;1894	text-transform: uppercase;1895	color: var(--text-secondary);1896	margin: 0 0 12px;1897}1898.landing-self-host {1899	margin: 32px 0 0;1900	font-size: 0.75rem;1901}1902.landing-self-host a {1903	color: var(--text-secondary);1904}19051906/* ----- repo cards (front page, browse, profile) --------------------------- */19071908.card-grid {1909	display: grid;1910	grid-template-columns: repeat(2, minmax(0, 1fr));1911	gap: 16px;1912}1913.repo-card {1914	display: flex;1915	flex-direction: column;1916	padding: 20px 22px 16px;1917	border: 1px solid var(--bg-elevated);1918	border-radius: 4px;1919	background: var(--bg);1920	transition:1921		border-color 120ms,1922		background 120ms;1923	animation: fadeUp 350ms ease both;1924}1925.repo-card:hover {1926	text-decoration: none;1927	border-color: var(--text-faint);1928	background: var(--accent-tint-04);1929}1930.repo-card-head {1931	display: flex;1932	align-items: baseline;1933	justify-content: space-between;1934	gap: 12px;1935}1936.repo-card-name {1937	font-size: 1.375rem;1938	line-height: 1.1;1939	color: var(--accent);1940	overflow: hidden;1941	text-overflow: ellipsis;1942	white-space: nowrap;1943}1944.repo-card-saves {1945	font-size: 0.6875rem;1946	white-space: nowrap;1947}1948.repo-card-desc {1949	margin: 8px 0 0;1950	font-size: 0.8125rem;1951	line-height: 1.5;1952	color: var(--text-secondary);1953	display: -webkit-box;1954	-webkit-line-clamp: 2;1955	-webkit-box-orient: vertical;1956	overflow: hidden;1957}1958.repo-card-cat {1959	margin: 10px 0 0;1960	font-size: 0.9375rem;1961	color: var(--text);1962}19631964/* ----- profile ------------------------------------------------------------ */19651966/* The cover runs the full width of the window while the page keeps its column. */1967.profile-cover {1968	position: relative;1969	height: 380px;1970	margin: -24px calc(50% - 50vw) 0;1971	overflow: hidden;1972	border-bottom: 1px solid var(--bg-surface);1973}1974.hex-backdrop {1975	position: absolute;1976	inset: 0;1977	display: flex;1978	flex-direction: row-reverse;1979	justify-content: center;1980	align-items: center;1981	gap: 13px;1982	pointer-events: none;1983	user-select: none;1984	font-family: var(--mono);1985	font-size: 13px;1986	line-height: 16px;1987	color: var(--accent-dim);1988}1989/* Characters top to bottom, columns right to left, each breathing on its own clock. */1990.hex-col {1991	writing-mode: vertical-rl;1992	text-orientation: upright;1993	letter-spacing: 3px;1994	opacity: 0.05;1995	animation: hex-breathe 17s ease-in-out infinite;1996	transition:1997		color 1.6s ease,1998		text-shadow 1.6s ease;1999}2000.hex-col:nth-child(3n) {2001	color: var(--accent);2002	animation-duration: 23s;2003	animation-delay: -7s;2004}2005.hex-col:nth-child(4n + 1) {2006	animation-duration: 29s;2007	animation-delay: -13s;2008}2009.hex-col:nth-child(5n + 2) {2010	animation-duration: 19s;2011	animation-delay: -3s;2012}2013.hex-col:nth-child(7n) {2014	animation-delay: -21s;2015}2016.hex-col.glow {2017	color: var(--accent-bright);2018	text-shadow: 0 0 6px var(--accent-tint-12);2019}2020@keyframes hex-breathe {2021	0%,2022	100% {2023		opacity: 0.05;2024	}2025	50% {2026		opacity: 0.22;2027	}2028}2029.profile-cover-fade {2030	position: absolute;2031	left: 0;2032	right: 0;2033	bottom: 0;2034	height: 55%;2035	background: linear-gradient(to bottom, transparent, var(--bg));2036	pointer-events: none;2037}2038.profile-identity {2039	position: absolute;2040	bottom: 40px;2041	left: 0;2042	right: 0;2043	max-width: 980px;2044	margin: 0 auto;2045	padding: 0 48px;2046}2047.profile-username {2048	margin: 0 0 8px;2049	font-family: "Sacramento", cursive;2050	font-weight: 400;2051	font-size: 3.625rem;2052	line-height: 1;2053	letter-spacing: -0.02em;2054	text-transform: lowercase;2055	color: var(--text-heading);2056	user-select: none;2057	animation: fadeUp 500ms ease both;2058}2059.profile-signature {2060	display: block;2061	max-height: 96px;2062	max-width: min(360px, 100%);2063}2064.profile-tagline {2065	margin: 0 0 6px;2066	font-family: var(--mono);2067	font-size: 0.75rem;2068	letter-spacing: 0.15em;2069	color: var(--text-faint);2070}2071.profile-op-badge {2072	display: block;2073	font-size: 0.6875rem;2074	letter-spacing: 0.18em;2075	color: var(--accent);2076}20772078.profile-portrait-section {2079	display: grid;2080	grid-template-columns: 320px minmax(0, 1fr);2081	gap: 40px;2082	align-items: start;2083	padding-top: 40px;2084}2085.profile-left {2086	display: flex;2087	flex-direction: column;2088	gap: 16px;2089}2090.profile-identity-card,2091.profile-languages-bar {2092	padding: 20px 24px;2093	border: 1px solid var(--bg-elevated);2094	border-radius: 4px;2095}2096.profile-identity-bio {2097	margin: 0;2098	font-size: 0.875rem;2099	line-height: 1.5;2100	color: var(--text-muted);2101}2102.profile-identity-location {2103	margin: 6px 0 0;2104	font-family: var(--mono);2105	font-size: 0.8125rem;2106	color: var(--text-muted);2107}2108.profile-website-pill {2109	display: inline-block;2110	max-width: 100%;2111	margin-top: 10px;2112	padding: 3px 8px;2113	overflow: hidden;2114	text-overflow: ellipsis;2115	white-space: nowrap;2116	border: 1px solid var(--text-faint);2117	border-radius: 3px;2118	background: var(--bg-surface);2119	font-family: var(--mono);2120	font-size: 0.6875rem;2121	color: var(--accent);2122}2123.profile-website-pill:hover {2124	border-color: var(--accent);2125	text-decoration: none;2126}2127.profile-stats-grid {2128	display: grid;2129	grid-template-columns: 1fr 1fr;2130	border: 1px solid var(--bg-elevated);2131	border-radius: 4px;2132	overflow: hidden;2133}2134.profile-stat-tile {2135	padding: 16px;2136	border-right: 1px solid var(--bg-elevated);2137	border-bottom: 1px solid var(--bg-elevated);2138}2139.profile-stat-tile:nth-child(2n) {2140	border-right: none;2141}2142.profile-stat-tile:nth-last-child(-n + 2) {2143	border-bottom: none;2144}2145.profile-stat-number {2146	margin-bottom: 4px;2147	font-weight: 600;2148	font-size: 1.75rem;2149	line-height: 1;2150	color: var(--accent);2151}2152.profile-stat-label,2153.profile-section-label {2154	font-family: var(--mono);2155	font-size: 0.625rem;2156	text-transform: uppercase;2157	letter-spacing: 0.08em;2158	color: var(--text-faint);2159}2160.profile-lang-bar {2161	display: block;2162	width: 100%;2163	height: 6px;2164	margin-bottom: 8px;2165	border-radius: 3px;2166	background: var(--bg-surface);2167}2168.profile-lang-bar rect {2169	fill: var(--accent);2170	opacity: 0.6;2171}2172.profile-lang-bar rect:nth-child(2) {2173	fill: var(--sage);2174}2175.profile-lang-bar rect:nth-child(3) {2176	fill: var(--accent-flash);2177	opacity: 0.45;2178}2179.profile-lang-bar rect:nth-child(4) {2180	fill: var(--accent-dim);2181}2182.profile-lang-labels {2183	display: flex;2184	flex-wrap: wrap;2185	gap: 10px;2186	font-family: var(--mono);2187	font-size: 0.625rem;2188	color: var(--text-muted);2189}2190.profile-section-label {2191	margin-bottom: 16px;2192	letter-spacing: 0.2em;2193}2194.profile-timeline {2195	display: grid;2196	grid-auto-rows: 2.25rem;2197	max-height: 13.5rem;2198	overflow-y: auto;2199	scrollbar-width: thin;2200}2201.profile-event {2202	display: grid;2203	grid-template-columns: 96px 12px minmax(0, 1fr) auto;2204	gap: 10px;2205	align-items: baseline;2206	padding: 7px 0;2207	border-bottom: 1px solid var(--bg-surface);2208	font-family: var(--mono);2209	font-size: 0.6875rem;2210	animation: fadeUp 300ms ease both;2211}2212.profile-event-repo,2213.profile-event-message {2214	overflow: hidden;2215	text-overflow: ellipsis;2216	white-space: nowrap;2217}2218.profile-event-repo,2219.profile-event-glyph {2220	color: var(--accent);2221}2222.profile-event-glyph {2223	font-size: 0.625rem;2224}2225.profile-event-message {2226	color: var(--text-muted);2227}2228.profile-event-message:hover {2229	color: var(--text-heading);2230}2231.profile-event-time {2232	font-size: 0.625rem;2233	white-space: nowrap;2234	color: var(--text-faint);2235}2236.profile-empty-state {2237	font-style: italic;2238	font-size: 0.8125rem;2239	color: var(--text-faint);2240}2241.profile-repos-section {2242	margin-top: 40px;2243	padding-top: 40px;2244	border-top: 1px solid var(--bg-surface);2245}22462247/* ----- docs and support --------------------------------------------------- */22482249.admin-layout {2250	display: grid;2251	grid-template-columns: 160px minmax(0, 1fr);2252	gap: 48px;2253	min-height: 70vh;2254}2255.admin-sidebar {2256	position: sticky;2257	top: 24px;2258	align-self: start;2259	padding: 24px 0;2260	font-size: 0.75rem;2261}2262.admin-sidebar nav,2263.admin-sidebar-foot {2264	display: flex;2265	flex-direction: column;2266	gap: 16px;2267	margin-top: 20px;2268}2269.admin-sidebar a {2270	color: var(--text-secondary);2271}2272.admin-unread {2273	display: inline-block;2274	min-width: 1.5em;2275	padding: 0 5px;2276	border-radius: 999px;2277	background: var(--accent);2278	color: var(--bg);2279	font-size: 0.6875rem;2280	text-align: center;2281}2282.notification-unread {2283	box-shadow: inset 2px 0 0 var(--accent);2284	background: var(--accent-tint-04);2285}2286.notification-list .notification-unread {2287	border-left: 2px solid var(--accent);2288	padding-left: 12px;2289}22902291.admin-sidebar a[aria-current] {2292	color: var(--accent);2293	border-left: 2px solid var(--accent);2294	padding-left: 12px;2295}2296.admin-sidebar-foot {2297	border-top: 1px solid var(--border);2298	padding-top: 24px;2299	margin-top: 40px;2300}2301.admin-content {2302	min-width: 0;2303}2304.admin-heading {2305	border-bottom: 1px solid var(--border);2306	padding: 24px 0;2307	margin-bottom: 32px;2308}2309.admin-heading h1 {2310	font-size: 2rem;2311	font-weight: 400;2312	margin: 8px 0 0;2313	color: var(--text-heading);2314}2315.admin-intro {2316	color: var(--text-secondary);2317	margin-bottom: 24px;2318}2319.admin-notice {2320	color: var(--sage);2321	border-left: 2px solid var(--sage);2322	padding-left: 16px;2323}2324.admin-content .profile-signature {2325	max-width: 240px;2326	max-height: 120px;2327	object-fit: contain;2328}2329.admin-vitals {2330	display: flex;2331	flex-wrap: wrap;2332	gap: 24px 40px;2333	padding: 0 0 24px;2334	border-bottom: 1px solid var(--border);2335}2336.admin-vitals strong {2337	display: block;2338	font-size: 1.75rem;2339	font-weight: 400;2340	color: var(--accent);2341}2342.admin-days {2343	margin: 0;2344	padding: 0;2345	list-style: none;2346	font-size: 0.6875rem;2347}2348.admin-days li {2349	display: grid;2350	grid-template-columns: 11ch minmax(0, 1fr) 5ch;2351	gap: 12px;2352	align-items: center;2353	padding: 2px 0;2354}2355.admin-days meter {2356	appearance: none;2357	width: 100%;2358	height: 6px;2359	background: var(--border);2360	border: 0;2361}2362.admin-days meter::-webkit-meter-bar {2363	height: 6px;2364	background: var(--border);2365	border: 0;2366	border-radius: 0;2367}2368.admin-days meter::-webkit-meter-optimum-value {2369	background: var(--accent);2370}2371.admin-days meter::-moz-meter-bar {2372	background: var(--accent);2373}2374.admin-days li > span:last-child {2375	text-align: right;2376}2377.admin-select-row {2378	display: flex;2379	gap: 12px;2380	align-items: center;2381}2382.admin-select-row .issue-row {2383	flex: 1;2384	min-width: 0;2385}2386.admin-content form.issue-row {2387	align-items: center;2388}2389.admin-table {2390	width: 100%;2391	border-collapse: collapse;2392	font-size: 0.6875rem;2393}2394.admin-table th,2395.admin-table td {2396	padding: 6px 12px 6px 0;2397	border-bottom: 1px solid var(--border);2398	text-align: left;2399	font-weight: 400;2400	overflow-wrap: anywhere;2401}2402.admin-table th {2403	color: var(--text-muted);2404}2405.admin-releases {2406	margin: 12px 0 0;2407	padding: 0;2408	list-style: none;2409	font-size: 0.6875rem;2410}2411.admin-releases li {2412	padding: 4px 0;2413}2414.admin-repos-layout {2415	display: grid;2416	grid-template-columns: 140px minmax(0, 1fr);2417	gap: 24px;2418}2419.admin-repo-picker {2420	position: sticky;2421	top: 24px;2422	align-self: start;2423	display: flex;2424	flex-direction: column;2425	gap: 20px;2426	font-size: 0.75rem;2427}2428.admin-repo-picker nav {2429	display: flex;2430	flex-direction: column;2431	max-height: 50vh;2432	overflow-y: auto;2433	border-bottom: 1px solid var(--border);2434}2435.admin-repo-link {2436	padding: 12px 8px;2437	overflow-wrap: anywhere;2438	border-left: 2px solid transparent;2439	color: var(--text-secondary);2440}2441.admin-repo-link.active {2442	border-left-color: var(--accent);2443	background: var(--bg-surface);2444	color: var(--accent-bright);2445}2446.admin-repo-link span {2447	display: block;2448	font-size: 0.625rem;2449}2450.admin-repo-workspace {2451	min-width: 0;2452}2453#global-hide {2454	scroll-margin-top: 24px;2455}2456@media (max-width: 900px) {2457	.admin-repos-layout {2458		grid-template-columns: minmax(0, 1fr);2459	}2460	.admin-repo-picker {2461		position: static;2462	}2463	.admin-repo-picker nav {2464		max-height: 200px;2465	}2466}2467@media (max-width: 680px) {2468	.admin-layout {2469		grid-template-columns: minmax(0, 1fr);2470		gap: 0;2471	}2472	.admin-sidebar {2473		position: static;2474		padding: 8px 0;2475	}2476	.admin-sidebar nav,2477	.admin-sidebar-foot {2478		flex-flow: row wrap;2479		gap: 12px 20px;2480	}2481	.admin-sidebar-foot {2482		margin-top: 16px;2483		padding-top: 16px;2484	}2485}24862487.site-doc {2488	max-width: 72ch;2489	margin-top: 16px;2490}2491.site-doc h1 {2492	font-size: clamp(2rem, 5vw, 3rem);2493	font-weight: 400;2494	color: var(--text-heading);2495}2496.site-doc h2 {2497	margin-top: 2.4em;2498	scroll-margin-top: 24px;2499}2500.site-doc-layout {2501	display: grid;2502	grid-template-columns: 180px minmax(0, 72ch);2503	gap: 48px;2504}2505.site-doc-nav {2506	position: sticky;2507	top: 24px;2508	align-self: start;2509	display: flex;2510	flex-direction: column;2511	gap: 10px;2512	margin-top: 32px;2513	font-size: 0.8125rem;2514}2515.site-doc-nav a {2516	color: var(--text-secondary);2517	text-decoration: none;2518}2519.site-doc-nav a:hover {2520	color: var(--text-heading);2521}2522@media (max-width: 860px) {2523	.site-doc-layout {2524		grid-template-columns: minmax(0, 1fr);2525		gap: 0;2526	}2527	.site-doc-nav {2528		position: static;2529		flex-flow: row wrap;2530		gap: 8px 16px;2531		margin-top: 24px;2532	}2533}25342535@media (max-width: 860px) {2536	.headline,2537	.profile-portrait-section {2538		grid-template-columns: minmax(0, 1fr);2539	}2540	.headline {2541		gap: 8px;2542		padding-top: 48px;2543	}2544	.card-grid {2545		grid-template-columns: minmax(0, 1fr);2546	}2547}2548@media (max-width: 768px) {2549	.ticker {2550		height: 226px;2551		margin-top: -88px;2552		padding-top: 80px;2553	}2554	.profile-cover {2555		height: 280px;2556		margin-top: -16px;2557	}2558	.profile-identity {2559		bottom: 24px;2560		padding: 0 16px;2561	}2562	.profile-username {2563		font-size: 2.5rem;2564	}2565	.profile-event {2566		grid-template-columns: 72px 12px minmax(0, 1fr);2567	}2568	.profile-event-time {2569		display: none;2570	}2571}25722573/* ----- media in Markdown and the signed-in editor ------------------------- */25742575/* Sizes and places from an image's options (markdown.ts); classes, as the policy allows no inline2576   style. */2577.markdown .media {2578	display: block;2579	max-width: 100%;2580	height: auto;2581	margin: 12px auto;2582	border-radius: 3px;2583}2584.markdown .media-left {2585	margin-left: 0;2586}2587.markdown .media-right {2588	margin-right: 0;2589}2590.markdown .media-w25 {2591	width: 25%;2592}2593.markdown .media-w33 {2594	width: 33%;2595}2596.markdown .media-w50 {2597	width: 50%;2598}2599.markdown .media-w66 {2600	width: 66%;2601}2602.markdown .media-w75 {2603	width: 75%;2604}2605.markdown .media-w100 {2606	width: 100%;2607}2608.edit-btn {2609	margin-left: 12px;2610	padding: 1px 7px;2611	background: transparent;2612	border: 1px solid rgba(200, 154, 90, 0.2);2613	border-radius: 2px;2614	font-size: 0.625rem;2615	color: var(--text-faint);2616	cursor: pointer;2617	vertical-align: middle;2618}2619.repo-desc-editable:not(:has(.editor)) {2620	cursor: text;2621}2622.edit-btn:hover {2623	color: var(--accent);2624	border-color: var(--accent-dim);2625}2626.editor {2627	display: grid;2628	gap: 8px;2629	margin: 8px 0 16px;2630}2631.editor-toolbar,2632.editor-media,2633.editor-actions {2634	display: flex;2635	flex-wrap: wrap;2636	align-items: center;2637	gap: 4px;2638}2639.editor-media[hidden] {2640	display: none;2641}2642.editor-label,2643.editor-status {2644	margin: 0 6px;2645	font-size: 0.625rem;2646	color: var(--text-faint);2647}2648.editor-panes {2649	display: grid;2650	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);2651	gap: 12px;2652}2653@media (max-width: 768px) {2654	.editor-panes {2655		grid-template-columns: minmax(0, 1fr);2656	}2657}2658.editor-input {2659	width: 100%;2660	min-height: 4lh;2661	max-height: 70vh;2662	field-sizing: content;2663	resize: vertical;2664	padding: 10px 12px;2665	background: var(--bg-surface);2666	border: 1px solid var(--border);2667	border-radius: 3px;2668	color: var(--text);2669	font-size: 0.75rem;2670	line-height: 1.6;2671}2672.editor-input:focus {2673	outline: none;2674	border-color: var(--accent-dim);2675}2676.editor-preview {2677	min-width: 0;2678	max-height: 70vh;2679	overflow-y: auto;2680	padding: 0 4px;2681}2682.editor-preview:empty::before {2683	content: attr(data-empty);2684	font-family: var(--mono);2685	font-size: 0.625rem;2686	color: var(--text-faint);2687}26882689/* ----- file viewer (Kepr 2's Atlas modal) -------------------------------- */26902691body:has(> .fv-overlay) {2692	overflow: hidden;2693}2694.fv-overlay {2695	position: fixed;2696	inset: 0;2697	z-index: 2000;2698	display: flex;2699	flex-direction: column;2700	background: rgba(8, 7, 5, 0.97);2701	outline: none;2702	animation: fv-in 200ms ease both;2703}2704@keyframes fv-in {2705	from {2706		opacity: 0;2707		transform: translateY(6px) scale(0.97);2708	}2709}2710.fv-header {2711	display: flex;2712	align-items: center;2713	gap: 16px;2714	flex-shrink: 0;2715	height: 48px;2716	padding: 0 20px;2717	background: var(--bg);2718	border-bottom: 1px solid var(--bg-elevated);2719}2720.fv-close {2721	background: none;2722	border: 0;2723	padding: 0 4px;2724	font-size: 1.375rem;2725	line-height: 1;2726	color: var(--text-faint);2727	cursor: pointer;2728}2729.fv-close:hover {2730	color: var(--accent);2731}2732.fv-title {2733	display: flex;2734	align-items: baseline;2735	gap: 8px;2736	flex: 1;2737	min-width: 0;2738}2739.fv-name {2740	font-size: 1.25rem;2741	color: var(--text-heading);2742	white-space: nowrap;2743}2744.fv-path {2745	font-size: 0.625rem;2746	color: var(--text-faint);2747	white-space: nowrap;2748	overflow: hidden;2749	text-overflow: ellipsis;2750}2751.fv-controls,2752.fv-nav {2753	display: flex;2754	align-items: center;2755	gap: 4px;2756	flex-shrink: 0;2757}2758.fv-ctrl-btn {2759	background: transparent;2760	border: 1px solid rgba(200, 154, 90, 0.2);2761	border-radius: 2px;2762	padding: 3px 7px;2763	font: inherit;2764	font-size: 0.625rem;2765	color: var(--text-faint);2766	cursor: pointer;2767	transition:2768		color 100ms,2769		border-color 100ms;2770}2771.fv-ctrl-btn:hover:not(:disabled),2772.fv-ctrl-btn.active {2773	color: var(--accent);2774	border-color: rgba(200, 154, 90, 0.5);2775	text-decoration: none;2776}2777.fv-ctrl-btn:disabled {2778	opacity: 0.3;2779	cursor: default;2780}2781.fv-pos {2782	min-width: 48px;2783	text-align: center;2784	font-size: 0.625rem;2785	color: var(--text-faint);2786}2787.fv-body {2788	flex: 1;2789	min-height: 0;2790	display: grid;2791	grid-template-columns: minmax(0, 1fr) 280px;2792}2793.fv-source {2794	min-height: 0;2795	overflow: auto;2796	padding: 16px 28px 32px;2797	font-family: var(--mono);2798	font-size: 0.6875rem;2799	color: var(--text-faint);2800}2801.fv-source .file-view {2802	margin: -16px -28px 0;2803	border: 0;2804	background: none;2805	overflow: visible;2806}2807.fv-source .code {2808	font-size: var(--fv-size);2809	color: var(--text);2810}2811.fv-wrap .fv-source .lc {2812	white-space: pre-wrap;2813	overflow-wrap: anywhere;2814}2815.fv-source .file-markdown {2816	font-family: var(--sans);2817	font-size: calc(var(--fv-size) + 2px);2818	color: var(--text);2819}2820.fv-detail .atlas-info-desc {2821	font-size: 0.8125rem;2822}2823.fv-detail {2824	overflow-y: auto;2825	padding: 18px 20px 24px;2826	background: var(--bg);2827	border-left: 1px solid var(--bg-elevated);2828}2829/* After the viewer's own rules, which would otherwise win at equal specificity. */2830@media (max-width: 768px) {2831	.fv-overlay {2832		background: var(--bg);2833	}2834	.fv-header {2835		flex-wrap: wrap;2836		height: auto;2837		padding: 8px 12px;2838		gap: 8px 12px;2839	}2840	.fv-title {2841		flex-basis: calc(100% - 40px);2842	}2843	.fv-body {2844		grid-template-columns: minmax(0, 1fr);2845	}2846	.fv-detail {2847		display: none;2848	}2849	.fv-source {2850		padding: 12px 16px 24px;2851	}2852	.fv-source .file-view {2853		margin: -12px -16px 0;2854	}2855}28562857/* Last in the file, after every animation it stops, so it wins without !important. */2858@media (prefers-reduced-motion: reduce) {2859	.tri-outer,2860	.tri-inner,2861	.repo-name,2862	.repo-contributor,2863	.repo-desc,2864	.repo-homepage,2865	.repo-meta,2866	.repo-tabs,2867	.install-lines,2868	.repo-section,2869	.repo-details,2870	.save-message-head,2871	.ticker-row,2872	.ticker-track,2873	.hex-col,2874	.headline h1,2875	.headline-tagline,2876	.headline-cloud,2877	.repo-card,2878	.profile-username,2879	.profile-event,2880	.fv-overlay,2881	.repo-panel {2882		animation: none;2883	}2884	.nav-toggle span {2885		transition: none;2886	}2887	.hex-col {2888		opacity: 0.12;2889	}2890}28912892/* ----- fonts: served by Kepr itself; licences beside them in /static/fonts ----- */28932894/* latin */2895@font-face {2896	font-family: "Bellota";2897	font-style: normal;2898	font-weight: 700;2899	font-display: swap;2900	src: url(/static/fonts/bellota-latin-700-normal.woff2) format("woff2");2901	unicode-range:2902		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;2903}29042905/* cyrillic */2906@font-face {2907	font-family: "Bellota";2908	font-style: normal;2909	font-weight: 700;2910	font-display: swap;2911	src: url(/static/fonts/bellota-cyrillic-700-normal.woff2) format("woff2");2912	unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;2913}29142915/* latin-ext */2916@font-face {2917	font-family: "Bellota";2918	font-style: normal;2919	font-weight: 700;2920	font-display: swap;2921	src: url(/static/fonts/bellota-latin-ext-700-normal.woff2) format("woff2");2922	unicode-range:2923		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;2924}29252926/* vietnamese */2927@font-face {2928	font-family: "Bellota";2929	font-style: normal;2930	font-weight: 700;2931	font-display: swap;2932	src: url(/static/fonts/bellota-vietnamese-700-normal.woff2) format("woff2");2933	unicode-range:2934		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;2935}29362937/* greek */2938@font-face {2939	font-family: "Comfortaa";2940	font-style: normal;2941	font-weight: 700;2942	font-stretch: 100%;2943	font-display: swap;2944	src: url(/static/fonts/comfortaa-greek-700-normal.woff2) format("woff2");2945	unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;2946}29472948/* latin */2949@font-face {2950	font-family: "Comfortaa";2951	font-style: normal;2952	font-weight: 700;2953	font-stretch: 100%;2954	font-display: swap;2955	src: url(/static/fonts/comfortaa-latin-700-normal.woff2) format("woff2");2956	unicode-range:2957		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;2958}29592960/* cyrillic */2961@font-face {2962	font-family: "Comfortaa";2963	font-style: normal;2964	font-weight: 700;2965	font-stretch: 100%;2966	font-display: swap;2967	src: url(/static/fonts/comfortaa-cyrillic-700-normal.woff2) format("woff2");2968	unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;2969}29702971/* latin-ext */2972@font-face {2973	font-family: "Comfortaa";2974	font-style: normal;2975	font-weight: 700;2976	font-stretch: 100%;2977	font-display: swap;2978	src: url(/static/fonts/comfortaa-latin-ext-700-normal.woff2) format("woff2");2979	unicode-range:2980		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;2981}29822983/* vietnamese */2984@font-face {2985	font-family: "Comfortaa";2986	font-style: normal;2987	font-weight: 700;2988	font-stretch: 100%;2989	font-display: swap;2990	src: url(/static/fonts/comfortaa-vietnamese-700-normal.woff2) format("woff2");2991	unicode-range:2992		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;2993}29942995/* cyrillic-ext */2996@font-face {2997	font-family: "Comfortaa";2998	font-style: normal;2999	font-weight: 700;3000	font-stretch: 100%;3001	font-display: swap;3002	src: url(/static/fonts/comfortaa-cyrillic-ext-700-normal.woff2) format("woff2");3003	unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;3004}30053006/* latin */3007@font-face {3008	font-family: "Martian Mono";3009	font-style: normal;3010	font-weight: 400;3011	font-stretch: 100%;3012	font-display: swap;3013	src: url(/static/fonts/martian-mono-latin-400-normal.woff2) format("woff2");3014	unicode-range:3015		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;3016}30173018/* cyrillic */3019@font-face {3020	font-family: "Martian Mono";3021	font-style: normal;3022	font-weight: 400;3023	font-stretch: 100%;3024	font-display: swap;3025	src: url(/static/fonts/martian-mono-cyrillic-400-normal.woff2) format("woff2");3026	unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;3027}30283029/* latin-ext */3030@font-face {3031	font-family: "Martian Mono";3032	font-style: normal;3033	font-weight: 400;3034	font-stretch: 100%;3035	font-display: swap;3036	src: url(/static/fonts/martian-mono-latin-ext-400-normal.woff2) format("woff2");3037	unicode-range:3038		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;3039}30403041/* cyrillic-ext */3042@font-face {3043	font-family: "Martian Mono";3044	font-style: normal;3045	font-weight: 400;3046	font-stretch: 100%;3047	font-display: swap;3048	src: url(/static/fonts/martian-mono-cyrillic-ext-400-normal.woff2) format("woff2");3049	unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;3050}30513052/* latin */3053@font-face {3054	font-family: "Quicksand";3055	font-style: normal;3056	font-weight: 400;3057	font-stretch: 100%;3058	font-display: swap;3059	src: url(/static/fonts/quicksand-latin-400-normal.woff2) format("woff2");3060	unicode-range:3061		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;3062}30633064/* latin-ext */3065@font-face {3066	font-family: "Quicksand";3067	font-style: normal;3068	font-weight: 400;3069	font-stretch: 100%;3070	font-display: swap;3071	src: url(/static/fonts/quicksand-latin-ext-400-normal.woff2) format("woff2");3072	unicode-range:3073		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;3074}30753076/* vietnamese */3077@font-face {3078	font-family: "Quicksand";3079	font-style: normal;3080	font-weight: 400;3081	font-stretch: 100%;3082	font-display: swap;3083	src: url(/static/fonts/quicksand-vietnamese-400-normal.woff2) format("woff2");3084	unicode-range:3085		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;3086}30873088/* latin */3089@font-face {3090	font-family: "Quicksand";3091	font-style: normal;3092	font-weight: 600;3093	font-stretch: 100%;3094	font-display: swap;3095	src: url(/static/fonts/quicksand-latin-600-normal.woff2) format("woff2");3096	unicode-range:3097		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;3098}30993100/* latin-ext */3101@font-face {3102	font-family: "Quicksand";3103	font-style: normal;3104	font-weight: 600;3105	font-stretch: 100%;3106	font-display: swap;3107	src: url(/static/fonts/quicksand-latin-ext-600-normal.woff2) format("woff2");3108	unicode-range:3109		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;3110}31113112/* vietnamese */3113@font-face {3114	font-family: "Quicksand";3115	font-style: normal;3116	font-weight: 600;3117	font-stretch: 100%;3118	font-display: swap;3119	src: url(/static/fonts/quicksand-vietnamese-600-normal.woff2) format("woff2");3120	unicode-range:3121		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;3122}31233124/* latin */3125@font-face {3126	font-family: "Sacramento";3127	font-style: normal;3128	font-weight: 400;3129	font-display: swap;3130	src: url(/static/fonts/sacramento-latin-400-normal.woff2) format("woff2");3131	unicode-range:3132		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;3133}31343135/* latin-ext */3136@font-face {3137	font-family: "Sacramento";3138	font-style: normal;3139	font-weight: 400;3140	font-display: swap;3141	src: url(/static/fonts/sacramento-latin-ext-400-normal.woff2) format("woff2");3142	unicode-range:3143		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;3144}