/* OS Component Website ==================== shamelessly stolen CSS from systemd https://github.com/systemd/systemd/tree/main/docs */ /* GNOME Color Palette */ :root { --rounded-corner: 12px; --blue1: rgb(153, 193, 241); --blue2: rgb(98, 160, 234); --blue3: rgb(53, 132, 228); --blue4: rgb(28, 113, 216); --blue5: rgb(26, 95, 180); --green1: rgb(143, 240, 164); --green2: rgb(87, 227, 137); --green3: rgb(51, 209, 122); --green4: rgb(46, 194, 126); --green5: rgb(38, 162, 105); --yellow1: rgb(249, 240, 107); --yellow2: rgb(248, 228, 92); --yellow3: rgb(246, 211, 45); --yellow4: rgb(245, 194, 17); --yellow5: rgb(229, 165, 10); --orange1: rgb(255, 190, 111); --orange2: rgb(255, 163, 72); --orange3: rgb(255, 120, 0); --orange4: rgb(230, 97, 0); --orange5: rgb(198, 70, 0); --red1: rgb(246, 97, 81); --red2: rgb(237, 51, 59); --red3: rgb(224, 27, 36); --red4: rgb(192, 28, 40); --red5: rgb(165, 29, 45); --purple1: rgb(220, 138, 221); --purple2: rgb(192, 97, 203); --purple3: rgb(145, 65, 172); --purple4: rgb(129, 61, 156); --purple5: rgb(97, 53, 131); --brown1: rgb(205, 171, 143); --brown2: rgb(181, 131, 90); --brown3: rgb(152, 106, 68); --brown4: rgb(134, 94, 60); --brown5: rgb(99, 69, 44); --light1: rgb(255, 255, 255); --light2: rgb(246, 245, 244); --light3: rgb(222, 221, 218); --light4: rgb(192, 191, 188); --light5: rgb(154, 153, 150); --dark1: rgb(119, 118, 123); --dark2: rgb(94, 92, 100); --dark3: rgb(61, 56, 70); --dark4: rgb(36, 31, 49); --dark5: rgb(0, 0, 0); --primary-color: var(--purple2); /* Set your project color */ --borders: var(--light3); --dark-op05: rgba(0, 0, 0, 0.05); --dark-op07: rgba(0, 0, 0, 0.07); --dark-op09: rgba(0, 0, 0, 0.09); --dark-op40: rgba(0, 0, 0, 0.4); --dark-op50: rgba(0, 0, 0, 0.5); } /* Typography */ @font-face { font-family: "InterVar"; font-weight: 100 900; font-display: swap; font-style: oblique italic 0deg 10deg; src: url("fonts/Inter.var.woff2?v=4.0") format("woff2"); } * { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } html, body { margin: 0; padding: 0; font-size: 16px; font-family: "InterVar", sans-serif; font-weight: 400; line-height: 1.6; scroll-behavior: smooth; } body { color: var(--dark4); background-color: var(--light2); /* ⇩⇩ put footer at the bottom for short pages, such as the 404 ⇩⇩ */ display: grid; min-height: 100vh; grid-template-rows: auto minmax(auto, 1fr) auto; /* header, stuff, footer */ } h1, h2, h3, h4, h5, h6 { margin: 3rem 0 1rem; font-weight: 600; line-height: 1.25; font-variation-settings: "wght" 600; /* needed for webkit */ } h1 { font-size: 1.5rem; font-weight: 100; font-style: normal; margin: 3rem 0 1rem; } @media screen and (min-width: 650px) { h1 { font-size: 1.6rem; } } h2 { font-size: 1.2rem; } @media (prefers-color-scheme: dark) { body { filter: invert(100%) hue-rotate(180deg); } html { background-color: var(--dark5); } img, video, iframe { filter: invert(100%) hue-rotate(180deg); } } a { font-weight: 600; text-decoration: none; color: var(--primary-color); cursor: pointer; font-variation-settings: "wght" 600; /* needed for webkit */ } a:hover { text-decoration: underline; } b { font-weight: 600; } small { color: var(--dark-op50); } dl { padding: 0; } dl dt { padding: 0; margin-top: 1rem; font-size: 1rem; font-weight: bold; } dl dd { padding: 0; margin-bottom: 1rem; } hr { margin: 3rem auto 4rem; width: 40%; opacity: 40%; } img { display: block; margin: 2rem auto; max-width: 100%; } img.full { width: 100%; } img.pixels { image-rendering: crisp-edges; /* older firefox browsers */ image-rendering: pixelated; } blockquote { padding: 0 1rem; margin-left: 0; color: var(--dark-op40); border-left: 0.3rem solid var(--dark-op07); } blockquote > :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } .ascii { line-height: normal; max-width: 100%; overflow-x: auto; padding: 1rem 1rem; transition: 800ms; background: linear-gradient( to top, rgba(36, 31, 49, 1) 0%, rgba(36, 31, 49, 0) 100% ); background-clip: text; -webkit-background-clip: text; -moz-background-clip: text; -webkit-text-fill-color: transparent; -moz-text-fill-color: transparent; } .ascii:hover { -webkit-text-fill-color: var(--dark4); -moz-text-fill-color: var(--dark4); text-shadow: var(--purple2) -6px 0 12px, var(--blue2) 6px 0 12px; } @media only screen and (max-device-width: 480px) { /*mobile*/ .ascii { max-width: 90vw; } } kbd { background-color: var(--dark-op05); border: 1px solid var(--dark-op07); border-radius: 4px; box-shadow: inset 0 -1px 0 var(--dark-op09); color: var(--dark4); display: inline-block; font-size: 11px; line-height: 10px; padding: 3px 5px; vertical-align: middle; cursor: pointer; user-select: none; -webkit-user-select: none; } kbd:active { box-shadow: inset 0 0px 0 var(--dark-op09); vertical-align: bottom; filter: contrast(0.2); } /* Layout */ .container { width: 80%; margin-left: auto; margin-right: auto; max-width: 720px; } @media only screen and (max-device-width: 480px) { /*mobile*/ .container { width: 90%; } } /* Singletons */ #logo { display: block; width: 130px; height: 26px; background: url("assets/page-logo.svg") no-repeat center; padding: 5rem 0 3rem; margin: 0 auto; position: relative; } #logo a { display: block; position: absolute; top: 0; left: 0; right: 0; bottom: 0; color: rgba(0, 0, 0, 0); /* make text transparent */ cursor: pointer; } .page-logo > img { margin: 0 auto; } @media (prefers-color-scheme: dark) { #logo { filter: invert(100%) hue-rotate(180deg); /* uninvert */ background-image: url("assets/page-logo-i.svg"); } } .brand-white { background-color: #fff; } .brand-green { background-color: #30d475; } .brand-black { background-color: #201a26; color: white; } .page-link::after { content: " →"; } .site-link::after { content: " ↗"; } /* Footer */ footer { text-align: center; padding: 3em 0 3em; font-size: 1em; margin-top: 4rem; } /* Table */ table { border-collapse: collapse; border-spacing: 0; } table { display: block; width: 100%; overflow: auto; word-break: normal; word-break: keep-all; -webkit-overflow-scrolling: touch; } table th { font-weight: bold; } table th, table td { padding: 0.5rem 1rem; border: 1px solid var(--dark-op05); } td, th { padding: 0; } /* Make tables vertically aligned to the top */ tbody td { vertical-align: top; } /* Github Code Highlighting */ .highlight table td { padding: 5px; } .highlight table pre { margin: 0; } .highlight .cm { color: #999988; font-style: italic; } .highlight .cp { color: #999999; font-weight: bold; } .highlight .c1 { color: #999988; font-style: italic; } .highlight .cs { color: #999999; font-weight: bold; font-style: italic; } .highlight .c, .highlight .cd { color: #999988; font-style: italic; } .highlight .err { color: #a61717; background-color: #e3d2d2; } .highlight .gd { color: #000000; background-color: #ffdddd; } .highlight .ge { color: #000000; font-style: italic; } .highlight .gr { color: #aa0000; } .highlight .gh { color: #999999; } .highlight .gi { color: #000000; background-color: #ddffdd; } .highlight .go { color: #888888; } .highlight .gp { color: #555555; } .highlight .gs { font-weight: bold; } .highlight .gu { color: #aaaaaa; } .highlight .gt { color: #aa0000; } .highlight .kc { color: #000000; font-weight: bold; } .highlight .kd { color: #000000; font-weight: bold; } .highlight .kn { color: #000000; font-weight: bold; } .highlight .kp { color: #000000; font-weight: bold; } .highlight .kr { color: #000000; font-weight: bold; } .highlight .kt { color: #445588; font-weight: bold; } .highlight .k, .highlight .kv { color: #000000; font-weight: bold; } .highlight .mf { color: #009999; } .highlight .mh { color: #009999; } .highlight .il { color: #009999; } .highlight .mi { color: #009999; } .highlight .mo { color: #009999; } .highlight .m, .highlight .mb, .highlight .mx { color: #009999; } .highlight .sb { color: #d14; } .highlight .sc { color: #d14; } .highlight .sd { color: #d14; } .highlight .s2 { color: #d14; } .highlight .se { color: #d14; } .highlight .sh { color: #d14; } .highlight .si { color: #d14; } .highlight .sx { color: #d14; } .highlight .sr { color: #009926; } .highlight .s1 { color: #d14; } .highlight .ss { color: #990073; } .highlight .s { color: #d14; } .highlight .na { color: #008080; } .highlight .bp { color: #999999; } .highlight .nb { color: #0086b3; } .highlight .nc { color: #445588; font-weight: bold; } .highlight .no { color: #008080; } .highlight .nd { color: #3c5d5d; font-weight: bold; } .highlight .ni { color: #800080; } .highlight .ne { color: #990000; font-weight: bold; } .highlight .nf { color: #990000; font-weight: bold; } .highlight .nl { color: #990000; font-weight: bold; } .highlight .nn { color: #555555; } .highlight .nt { color: #000080; } .highlight .vc { color: #008080; } .highlight .vg { color: #008080; } .highlight .vi { color: #008080; } .highlight .nv { color: #008080; } .highlight .ow { color: #000000; font-weight: bold; } .highlight .o { color: #000000; font-weight: bold; } .highlight .w { color: #bbbbbb; } .highlight { background-color: #f8f8f8; } /* Code Blocks */ .highlighter-rouge { line-height: normal; margin: 1rem 0 1rem; padding: 2px 1rem; border-radius: 8px; background-color: var(--light1); max-width: 100%; overflow-x: auto; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.03), 0 1px 3px 1px rgba(0, 0, 0, 0.07), 0 2px 6px 2px rgba(0, 0, 0, 0.03); } @media only screen and (max-device-width: 480px) { /*mobile*/ .highlighter-rouge { max-width: 90vw; } } .highlighter-rouge * { background-color: var(--light1); } /* Inline Code */ code.highlighter-rouge { padding: 2px 6px; background-color: var(--dark-op07); box-shadow: none; } /* Buttons */ .dialog-buttons { display: flex; flex-direction: row; align-items: baseline; justify-content: space-between; margin-top: 6rem; } .inline-button { display: inline-block; font-weight: 900; font-size: 90%; padding: 0.4rem 1rem; border-radius: var(--rounded-corner); background-color: var(--dark-op05); color: var(--dark5); } /* Comments */ .avatar { background-position: center; background-size: cover; border-radius: var(--rounded-corner); box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.03), 0 1px 3px 1px rgba(0, 0, 0, 0.07), 0 2px 6px 2px rgba(0, 0, 0, 0.03); margin: 0; overflow: hidden; } .avatar img { height: 100%; width: 100%; } section#comments .comment time, section#comments .comment footer { text-align: unset; padding: unset; font-size: smaller; opacity: 0.9; } section#comments .comment { display: grid; column-gap: 1rem; grid-template-areas: "avatar name" "avatar time" "avatar post" "...... card" "...... interactions"; grid-template-columns: min-content; justify-items: start; margin: 2em auto 2em -1em; padding: 1em; } section#comments .comment .avatar-link { grid-area: avatar; height: 4rem; position: relative; width: 4rem; } section#comments .comment .avatar-link .avatar { height: 100%; width: 100%; } section#comments .comment .avatar-link.op::after { background-color: var(--purple3); border-radius: 50%; bottom: -0.25rem; color: var(--light2); content: "✓"; display: block; font-size: 1.25rem; font-weight: bold; height: 1.5rem; line-height: 1.5rem; position: absolute; right: -0.25rem; text-align: center; width: 1.5rem; } section#comments .comment .author { align-items: center; cursor: default; display: flex; font-weight: bold; gap: 0.5em; grid-area: name; } section#comments .comment .author img { margin: unset; max-width: unset; } section#comments .comment .author .instance { background-color: var(--light3); border-radius: 9999px; color: var(--dark4); font-size: smaller; font-weight: normal; padding: 0.2em 0.8em; } section#comments .comment .author .instance:hover { opacity: 0.8; text-decoration: none; } section#comments .comment .author .instance.op { background-color: var(--purple2); color: var(--light2); } section#comments .comment .author .instance.op::before { content: "✓"; font-weight: bold; margin-inline-end: 0.25em; margin-inline-start: -0.25em; } section#comments .comment time { grid-area: time; line-height: 1.5rem; } section#comments .comment time.edited::after { content: " *"; } section#comments .comment main { grid-area: post; justify-self: stretch; } section#comments .comment main p:first-child { margin-top: 0.25em; } section#comments .comment main p:last-child { margin-bottom: 0; } section#comments .comment .card, section#comments .comment .qr, section#comments .comment .app-badge, section#comments .comment .products .product, .products section#comments .comment .product { color: inherit; grid-area: card; max-width: 400px; } section#comments .comment .card:hover, section#comments .comment .qr:hover, section#comments .comment .app-badge:hover, section#comments .comment .products .product:hover, .products section#comments .comment .product:hover { text-decoration: none; } section#comments .comment .card figure, section#comments .comment .qr figure, section#comments .comment .app-badge figure, section#comments .comment .products .product figure, .products section#comments .comment .product figure { border-radius: inherit; overflow: hidden; } section#comments .comment .card figure { background-color: var(--light1); border-radius: var(--rounded-corner); margin-left: 0; margin-right: 0; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.03), 0 1px 3px 1px rgba(0, 0, 0, 0.07), 0 2px 6px 2px rgba(0, 0, 0, 0.03); } section#comments .comment .card figure img { margin: unset; } section#comments .comment .card figcaption, section#comments .comment .qr figcaption, section#comments .comment .app-badge figcaption, section#comments .comment .products .product figcaption, .products section#comments .comment .product figcaption { display: grid; gap: 0.5em; margin: 0; padding: 1em; text-align: left; } section#comments .comment .card figcaption *, section#comments .comment .qr figcaption *, section#comments .comment .app-badge figcaption *, section#comments .comment .products .product figcaption *, .products section#comments .comment .product figcaption * { display: -webkit-box; line-height: 1.25; margin: 0; overflow: hidden; padding: 0; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } section#comments .comment:first-of-type .card, section#comments .comment:first-of-type .qr, section#comments .comment:first-of-type .app-badge, section#comments .comment:first-of-type .products .product, .products section#comments .comment:first-of-type .product { display: none; } section#comments .comment footer { display: flex; gap: 1.25em; grid-area: interactions; margin-top: 0.925rem; } section#comments .comment footer .faves { cursor: default; } section#comments .comment footer .faves::before { color: var(--red2); content: "❤️"; margin-inline-end: 0.25em; } section#comments .comment footer .boosts { cursor: default; } section#comments .comment footer .boosts::before { color: var(--orange2); content: "🔁"; margin-inline-end: 0.25em; } section#comments .comment .emoji { display: inline; height: 1.25em; vertical-align: middle; width: 1.25em; } section#comments .comment .invisible { display: none; } section#comments .comment .ellipsis::after { content: "…"; } section#comments .comment details summary { background-image: linear-gradient( 90deg, transparent, transparent 0.4rem, var(--light1) 0.4rem, var(--light1) calc(100% - 0.4rem), transparent calc(100% - 0.4rem), transparent ), repeating-linear-gradient( 45deg, var(--dark4), var(--dark4) 0.3rem, var(--purple2) 0.3rem, var(--purple2) 0.6rem ); border-radius: 5px; color: inherit; cursor: default; margin-top: 0.925rem; padding: 1em; } /* Navbar */ .nav-container { display: block; width: 80%; margin-left: auto; margin-right: auto; max-width: 720px; } .nav { /* background: linear-gradient(90deg, var(--purple2) 0%, var(--blue2) 100%); box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.03), 0 1px 3px 1px rgba(0, 0, 0, 0.07), 0 2px 6px 2px rgba(0, 0, 0, 0.03); */ overflow: auto; } .nav-container { margin: 1rem auto; position: relative; text-align: center; } .nav-title { color: var(--dark-op50); display: inline-block; margin: 0; padding-right: 0.2rem; } .nav-title:hover, .nav-title:focus { text-decoration: underline; } .nav ul { list-style-type: none; margin: 1rem 0 0; padding: 0; text-align: center; } .nav li { color: var(--dark-op50); display: inline-block; padding: 0 1rem 0 0; } .nav li:last-child { padding-right: 0; } .nav a { display: inline-block; font-weight: 900; font-size: 90%; padding: 0.4rem 1rem; border-radius: var(--rounded-corner); background-color: transparent; color: var(--dark-op50); /* transition: 200ms; */ } .nav a:hover { background-color: var(--dark-op05); /* box-shadow: var(--purple2) -6px 0 12px, var(--blue2) 6px 0 12px; */ } .nav svg { transform: translateY(0.125em); fill: var(--dark-op50); } @media (min-width: 650px) { .nav-container { text-align: left; } .nav ul { bottom: 0; position: absolute; right: 0; } }