Last active
January 13, 2023 23:32
-
-
Save fnky/4138a3610d5a53be6eaada083acd4be8 to your computer and use it in GitHub Desktop.
Stylus Dark theme for Hacker News
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:root { | |
--color-scale-black: hsl(0, 0%, 3.5%); | |
--color-scale-white: #ffffff; | |
--color-scale-gray-1: hsl(0, 0%, 8.5%); | |
--color-scale-gray-2: hsl(0, 0%, 11.0%); | |
--color-scale-gray-3: hsl(0, 0%, 13.6%); | |
--color-scale-gray-4: hsl(0, 0%, 15.8%); | |
--color-scale-gray-5: hsl(0, 0%, 17.9%); | |
--color-scale-gray-6: hsl(0, 0%, 20.5%); | |
--color-scale-gray-7: hsl(0, 0%, 24.3%); | |
--color-scale-gray-8: hsl(0, 0%, 31.2%); | |
--color-scale-gray-9: hsl(0, 0%, 43.9%); | |
--color-scale-gray-10: hsl(0, 0%, 49.4%); | |
--color-scale-gray-11: hsl(0, 0%, 62.8%); | |
--color-scale-gray-12: hsl(0, 0%, 93.0%); | |
--color-scale-blue-1: hsl(212, 35.0%, 9.2%); | |
--color-scale-blue-2: hsl(216, 50.0%, 11.8%); | |
--color-scale-blue-3: hsl(214, 59.4%, 15.3%); | |
--color-scale-blue-4: hsl(214, 65.8%, 17.9%); | |
--color-scale-blue-5: hsl(213, 71.2%, 20.2%); | |
--color-scale-blue-6: hsl(212, 77.4%, 23.1%); | |
--color-scale-blue-7: hsl(211, 85.1%, 27.4%); | |
--color-scale-blue-8: hsl(211, 89.7%, 34.1%); | |
--color-scale-blue-9: hsl(206, 100%, 50.0%); | |
--color-scale-blue-10: hsl(209, 100%, 60.6%); | |
--color-scale-blue-11: hsl(210, 100%, 66.1%); | |
--color-scale-blue-12: hsl(206, 98.0%, 95.8%); | |
--color-bg-default: var(--color-scale-gray-1); | |
--color-fg-default: var(--color-scale-gray-12); | |
--color-fg-muted: var(--color-scale-gray-9); | |
--color-fg-subtle: var(--color-scale-gray-11); | |
--color-page-header-bg: var(--color-scale-blue-1); | |
--color-input-text: var(--color-scale-gray-12); | |
--color-input-bg: var(--color-scale-gray-1); | |
--color-input-border: var(--color-scale-gray-5); | |
--color-input-focus-border: var(--color-scale-gray-7); | |
--color-btn-text: var(--color-scale-gray-11); | |
--color-btn-bg: var(--color-scale-gray-4); | |
--color-btn-border: var(--color-scale-gray-5); | |
--color-btn-shadow: 0 1px 0 rgba(27, 31, 36, 0.04); | |
--color-btn-inset-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); | |
--color-btn-hover-bg: var(--color-scale-gray-1); | |
--color-btn-hover-border: var(--color-scale-gray-2); | |
--color-btn-active-bg: var(--color-scale-gray-3); | |
--color-btn-active-border: var(--color-scale-gray-4); | |
--color-btn-selected-bg: hsla(220, 14%, 94%, 1); | |
--color-btn-focus-bg: var(--color-scale-gray-11); | |
--color-btn-focus-border: var(--color-scale-gray-7); | |
--color-btn-focus-shadow: 0 0 0 3px rgba(9, 105, 218, 0.3); | |
--color-btn-shadow-active: inset 0 0.15em 0.3em rgba(27, 31, 36, 0.15); | |
--color-btn-shadow-input-focus: 0 0 0 0.2em rgba(9, 105, 218, 0.3); | |
--color-text-list-number: var(--color-scale-gray-10); | |
--color-link-text: var(--color-scale-gray-12); | |
--color-link-visited-text: var(--color-scale-gray-10); | |
--color-link-hover-text: var(--color-scale-gray-11); | |
--color-subtext: var(--color-scale-gray-8); | |
--color-subtext-link-text: var(--color-scale-gray-10); | |
--color-subtext-link-visited-text: var(--color-scale-gray-8); | |
--color-subtext-link-hover-text: var(--color-scale-gray-10); | |
--body-font-size: 14px; | |
--caption1-font-size: 12px; | |
--default-transition: 150ms ease-in-out; | |
--subtle-transition: 80ms ease-in-out; | |
font-size: var(--body-font-size); | |
} | |
html { | |
color-scheme: dark; | |
} | |
body { | |
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; | |
font-size: var(--body-font-size, 14px); | |
line-height: 1.5; | |
color: var(--color-fg-default); | |
background-color: var(--color-bg-default); | |
width: min(120ch, 100vw - 1rem); | |
margin: 0 auto; | |
padding: 1rem 0; | |
} | |
/** | |
* Main container | |
*/ | |
#hnmain { | |
background-color: transparent; | |
min-width: auto; | |
padding: 0; | |
width: 100%; | |
} | |
/** | |
* Top-level selectors | |
*/ | |
td { | |
font: inherit; | |
font-size: var(--body-font-size); | |
color: var(--color-fg-muted); | |
} | |
.admin td { | |
font: inherit; | |
font-size: var(--body-font-size); | |
} | |
.subtext td { | |
font: inherit; | |
font-size: var(--caption1-font-size); | |
} | |
input { | |
font: inherit; | |
color: var(--color-input-text); | |
background-color: var(--color-input-bg); | |
border: 1px solid var(--color-input-border); | |
border-radius: 6px; | |
padding: 3px 6px; | |
transition: var(--subtle-transition); | |
transition-property: color, box-shadow, border-color; | |
outline: 0; | |
} | |
input:focus { | |
border-color: var(--color-input-focus-border); | |
box-shadow: var(--color-btn-focus-shadow); | |
} | |
input[type="submit"] { | |
font: inherit; | |
color: var(--color-btn-text); | |
background-color: var(--color-btn-bg); | |
border: 1px solid var(--color-btn-border); | |
} | |
input[type="submit"]:active { | |
background-color: var(--color-btn-active-bg); | |
border-color: var(--color-btn-active-border); | |
} | |
input[type="submit"]:focus { | |
background-color: var(--color-btn-focus-bg); | |
border-color: var(--color-btn-focus-border); | |
} | |
textarea { | |
font: inherit; | |
font-size: var(--body-font-size); | |
border: 1px solid var(--color-input-border); | |
background: var(--color-input-bg); | |
border-radius: 6px; | |
outline: none; | |
padding: 6px; | |
transition: var(--subtle-transition); | |
transition-property: color, box-shadow, border-color; | |
} | |
textarea:focus { | |
border-color: var(--color-input-focus-border); | |
box-shadow: var(--color-btn-focus-shadow); | |
} | |
/** | |
* Links | |
*/ | |
a:link { | |
color: var(--color-link-text); | |
text-decoration: none; | |
} | |
a:hover { | |
color: var(--color-link-hover-text); | |
} | |
a:visited { | |
color: var(--color-link-visited-text); | |
text-decoration: none; | |
} | |
.default { | |
font: inherit; | |
font-size: var(--body-font-size); | |
color: var(--color-fg-default); | |
} | |
.default p { | |
line-height: 1.75; | |
} | |
.admin { | |
font: inherit; | |
font-size: var(--body-font-size); | |
color: var(--color-fg-default); | |
} | |
/** | |
* Titles and title numbers. | |
*/ | |
.title { | |
font: inherit; | |
font-size: var(--body-font-size); | |
color: var(--color-text-list-number); | |
overflow: hidden; | |
} | |
.title a { | |
color: var(--color-link-text); | |
transition: var(--subtle-transition); | |
transition-property: color; | |
} | |
.title a:hover { | |
color: var(--color-link-hover-text); | |
} | |
.title a:visited { | |
color: var(--color-link-visited-text); | |
} | |
.rank { | |
font: inherit; | |
font-variant-numeric: tabular-nums; | |
} | |
.subtext { | |
font: inherit; | |
font-size: var(--caption1-font-size); | |
color: var(--color-fg-muted); | |
line-height: 1.5; | |
} | |
.yclinks { | |
font: inherit; | |
font-size: var(--body-font-size); | |
color: var(--color-fg-muted); | |
} | |
.yclinks a:link, | |
.yclinks a:visited { | |
color: var(--color-link-visited-text); | |
} | |
/** | |
* Page header | |
*/ | |
.pagetop { | |
font: inherit; | |
font-size: var(--body-font-size); | |
color: inherit; | |
line-height: 1.5; | |
} | |
.comment { | |
font: inherit; | |
font-size: var(--body-font-size); | |
line-height: 1.5; | |
} | |
.hnname { | |
margin-right: 5px; | |
} | |
.reply a { | |
font: inherit; | |
font-size: 13px; | |
text-decoration: none; | |
color: var(--color-btn-text) !important; | |
background-color: var(--color-btn-bg); | |
border: 1px solid var(--color-btn-border); | |
border-radius: 6px; | |
padding: 3px 6px; | |
transition: var(--subtle-transition); | |
transition-property: color, box-shadow, border-color; | |
outline: 0; | |
cursor: default; | |
user-select: none; | |
} | |
.reply a:active { | |
background-color: var(--color-btn-active-bg); | |
border-color: var(--color-btn-active-border); | |
} | |
.reply a:focus { | |
background-color: var(--color-btn-focus-bg); | |
border-color: var(--color-btn-focus-border); | |
} | |
.reply p { | |
line-height: 2 !important; | |
} | |
.reply u, .reply a { | |
text-decoration: none !important; | |
} | |
/** | |
* Comment styles | |
*/ | |
.c00, | |
.c00 a:link { | |
color: var(--color-fg-default); | |
} | |
.c00 a:visited { | |
color: var(--color-link-visited-text); | |
} | |
.c5a, | |
.c5a a:link, | |
.c5a a:visited { | |
color: #5a5a5a; | |
} | |
.c73, | |
.c73 a:link, | |
.c73 a:visited { | |
color: #737373; | |
} | |
.c82, | |
.c82 a:link, | |
.c82 a:visited { | |
color: #828282; | |
} | |
.c88, | |
.c88 a:link, | |
.c88 a:visited { | |
color: #888888; | |
} | |
.c9c, | |
.c9c a:link, | |
.c9c a:visited { | |
color: #9c9c9c; | |
} | |
.cae, | |
.cae a:link, | |
.cae a:visited { | |
color: #aeaeae; | |
} | |
.cbe, | |
.cbe a:link, | |
.cbe a:visited { | |
color: #bebebe; | |
} | |
.cce, | |
.cce a:link, | |
.cce a:visited { | |
color: #cecece; | |
} | |
.cdd, | |
.cdd a:link, | |
.cdd a:visited { | |
color: #dddddd; | |
} | |
.pagetop a:visited { | |
color: var(--color-link-visited-text); | |
} | |
.topsel a:link, | |
.topsel a:visited { | |
color: var(--color-link-text); | |
} | |
.subtext a:link, | |
.subtext a:visited { | |
color: var(--color-subtext-link-text); | |
} | |
.subtext a:hover { | |
text-decoration: underline; | |
} | |
/** | |
* Comment heads and braces `()` in domains within titles. | |
*/ | |
.comhead { | |
font: inherit; | |
font-size: var(--caption1-font-size); | |
color: var(--color-fg-subtle); | |
line-height: 1.5; | |
} | |
.comhead a:link { | |
color: var(--color-fg-subtle); | |
} | |
.comhead a:hover { | |
text-decoration: underline; | |
} | |
.hnmore { | |
text-decoration: underline; | |
} | |
.hnmore a:link, | |
a:visited { | |
color: var(--color-link-visited-text); | |
} | |
.hnmore a:hover { | |
color: var(--color-link-hover-text); | |
} | |
a.morelink:link, | |
a.morelink:visited { | |
color: var(--color-fg-muted); | |
} | |
a.morelink:hover { | |
color: var(--color-link-hover-text); | |
} | |
.default p { | |
margin-top: 8px; | |
margin-bottom: 0px; | |
line-height: 1.5; | |
} | |
.pagebreak { | |
page-break-before: always | |
} | |
pre { | |
overflow: auto; | |
padding: 2px; | |
white-space: pre-wrap; | |
overflow-wrap: anywhere; | |
font-family: "JetBrains Mono", Menlo, monospace; | |
font-size: 0.9375em; | |
line-height: 1.5; | |
} | |
pre:hover { | |
overflow: auto; | |
} | |
.votearrow { | |
width: 0px; | |
height: 0px; | |
border: 0px; | |
margin: 0; | |
background: none; | |
border-left: 6px solid transparent; | |
border-right: 6px solid transparent; | |
border-bottom: 12px solid var(--color-fg-muted); | |
transition: var(--subtle-transition); | |
transition-property: border-bottom-color; | |
} | |
.votelinks a:hover .votearrow { | |
border-bottom-color: var(--color-fg-subtle); | |
} | |
.votelinks a { | |
display: inline-block; | |
margin: 0 4px; | |
padding: 3px 4px; | |
} | |
.votelinks.nosee div.votearrow.rotate180 { | |
display: none; | |
} | |
table.padtab td { | |
padding: 0px 10px; | |
} | |
@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2) { | |
.votearrow { | |
background: none; | |
} | |
} | |
@media only screen and (min-width: 300px) and (max-width: 750px) { | |
.votelinks { | |
min-width: auto; | |
} | |
.votearrow { | |
transform: none; | |
} | |
} | |
/** | |
* Special: Ads, items without vote buttons | |
*/ | |
tr.athing:not(.comtr):has(img[src="s.gif"]), | |
tr.athing:not(.comtr):has(img[src="s.gif"]) + tr { | |
opacity: 0.15; | |
-webkit-user-select: none; | |
user-select: none; | |
pointer-events: none; | |
} | |
.spacer { | |
height: 8px !important; | |
} | |
.comment-tree, | |
.comment-tree table { | |
border-spacing: 0px; | |
border-collapse: separate; | |
} | |
.comtr { | |
position: relative; | |
transition: var(--subtle-transition); | |
transition-property: background-color; | |
} | |
.comtr:hover { | |
background-color: hsl(208deg, 40%, 11%); | |
} | |
.comtr > td { | |
position: relative; | |
padding: 0; | |
} | |
.comtr td:nth-child(3) { | |
padding: 2px 0; | |
} | |
.comtr .votelinks .votearrow { | |
transform: scale(0.9) translateY(2px); | |
} | |
.comtr .votelinks a { | |
margin: 0; | |
} | |
* { | |
-webkit-user-select: none; | |
user-select: none; | |
} | |
.commtext, | |
.commtext > i, | |
.commtext > p, | |
.commtext > a, | |
.commtext > p i, | |
.commtext > p a, | |
.commtext code, | |
.athing .title a, | |
.sitebit, | |
.sitebit .sitestr { | |
-webkit-user-select: text; | |
user-select: text; | |
} | |
/* | |
* TODO: Would love to be able to select the last .comtr | |
* in a thread to apply fading linear gradient to the lines | |
* | |
* Since all .comtr are on one level in the DOM, the only way | |
* I can think of to select them, would be to match against | |
* elements that :has a `.ind` with a certain [indent=""] attribute | |
* that is not followed by an element with an indent equal to or higher. | |
*/ | |
.comtr ~ .comtr .ind { | |
position: relative; | |
background-image: linear-gradient(to right, var(--color-scale-gray-6) 1px, transparent 1px), | |
linear-gradient(to bottom, var(--color-scale-gray-5) 1px, transparent 1px); | |
background-size: 40px 100%, 100% 100%; | |
background-position: 0 0; | |
} | |
.comtr:not(:first-child) { | |
background-image: linear-gradient(to bottom, var(--color-scale-gray-5) 1px, transparent 1px); | |
background-size: 100% 100%; | |
background-position: 0 0; | |
} | |
/* | |
.comtr:has(.ind[indent="0"]) { | |
background-color: rgba(0, 51, 102, 0.02); | |
} | |
.comtr:has(.ind[indent="1"]) { | |
background-color: rgba(0, 51, 102, 0.04); | |
} | |
.comtr:has(.ind[indent="2"]) { | |
background-color: rgba(0, 51, 102, 0.06); | |
} | |
.comtr:has(.ind[indent="3"]) { | |
background-color: rgba(0, 51, 102, 0.08); | |
} | |
.comtr:has(.ind[indent="4"]) { | |
background-color: rgba(0, 51, 102, 0.1); | |
} | |
.comtr:has(.ind[indent="5"]) { | |
background-color: rgba(0, 51, 102, 0.12); | |
} | |
.comtr:has(.ind[indent="6"]) { | |
background-color: rgba(0, 51, 102, 0.14); | |
} | |
.comtr:has(.ind[indent="7"]) { | |
background-color: rgba(0, 51, 102, 0.16); | |
} | |
.comtr:has(.ind[indent="8"]) { | |
background-color: rgba(0, 51, 102, 0.18); | |
} | |
.comtr:has(.ind[indent="9"]) { | |
background-color: rgba(0, 51, 102, 0.2); | |
} | |
.comtr:has(.ind[indent="10"]) { | |
background-color: rgba(0, 51, 102, 0.22); | |
} | |
.comtr:has(.ind[indent="11"]) { | |
background-color: rgba(0, 51, 102, 0.24); | |
} | |
.comtr:has(.ind[indent="12"]) { | |
background-color: rgba(0, 51, 102, 0.26); | |
} | |
.comtr:has(.ind[indent="13"]) { | |
background-color: rgba(0, 51, 102, 0.28); | |
} | |
.comtr:has(.ind[indent="14"]) { | |
background-color: rgba(0, 51, 102, 0.3); | |
} | |
.comtr:has(.ind[indent="15"]) { | |
background-color: rgba(0, 51, 102, 0.32); | |
} | |
*/ | |
.comtr .votelinks { | |
position: relative; | |
border-spacing: 0; | |
border-collapse: separate; | |
padding: 0; | |
margin: 0; | |
} | |
.comtr .votelinks a { | |
position: relative; | |
left: -9.5px; | |
top: 1px; | |
display: inline-block; | |
margin: 0; | |
padding: 4px 2px; | |
background-color: var(--color-bg-default); | |
} | |
.comtr:hover .votelinks a { | |
background-color: hsl(208deg, 40%, 11%); | |
} | |
/* .comtr ~ .comtr .ind::after, */ | |
/* .comtr ~ .comtr .ind::before, */ | |
.comtr .votelinks::before { | |
display: block; | |
position: absolute; | |
top: 0; | |
bottom: 0; | |
content: " "; | |
border-right: 1px solid var(--color-scale-gray-6); | |
} | |
.comtr .votelinks::before { | |
bottom: 0; | |
top: 24px; | |
left: -2px; | |
} | |
/** | |
* Page header | |
*/ | |
#hnmain > tbody > tr:first-child { | |
opacity: 0.5; | |
transition: var(--default-transition); | |
transition-property: opacity; | |
} | |
#hnmain > tbody > tr:first-child:hover { | |
opacity: 1; | |
} | |
#hnmain > tbody > tr:first-child > td { | |
background: none; | |
} | |
#hnmain > tbody > tr:first-child > td > table { | |
padding: 8px !important; | |
} | |
/** | |
* Footer | |
*/ | |
#hnmain > tbody > tr:not(:has(.fatitem)):last-child { | |
opacity: 0.5; | |
transition: var(--default-transition); | |
transition-property: opacity; | |
} | |
#hnmain > tbody > tr:not(:has(.fatitem)):last-child:hover { | |
opacity: 1; | |
} | |
/** | |
* Footer line | |
*/ | |
#hnmain > tbody > tr:not(:has(.fatitem)):last-child table { | |
display: none; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment