kepr.css

61.7 KB · raw

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