@font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 400; font-display: swap; src: url('fonts/JetBrainsMono-Regular.woff2') format('woff2'); } :root { font-size: 10px; --scheme: ; --bgh: 240; --bgs: 8%; --bgl: 9%; --bghs: var(--bgh), var(--bgs); --cm: 1; --tsm: 1; --widget-gap: 25px; --widget-content-vertical-padding: 15px; --widget-content-horizontal-padding: 17px; --widget-content-padding: var(--widget-content-vertical-padding) var(--widget-content-horizontal-padding); --content-bounds-padding: 15px; --border-radius: 5px; --mobile-navigation-height: 50px; --color-primary: hsl(43, 50%, 70%); --color-positive: var(--color-primary); --color-negative: hsl(0, 70%, 70%); --color-background: hsl(var(--bghs), var(--bgl)); --color-widget-background-hsl-values: var(--bghs), calc(var(--bgl) + 1%); --color-widget-background: hsl(var(--color-widget-background-hsl-values)); --color-separator: hsl(var(--bghs), calc(var(--scheme) ((var(--scheme) var(--bgl)) + 4% * var(--cm)))); --color-widget-content-border: hsl(var(--bghs), calc(var(--scheme) (var(--scheme) var(--bgl) + 4%))); --ths: var(--bgh), calc(var(--bgs) * var(--tsm)); --color-text-base: hsl(var(--ths), calc(var(--scheme) var(--cm) * 58%)); --color-text-highlight: hsl(var(--ths), calc(var(--scheme) var(--cm) * 85%)); --color-text-subdue: hsl(var(--ths), calc(var(--scheme) var(--cm) * 35%)); --font-size-h1: 1.7rem; --font-size-h2: 1.6rem; --font-size-h3: 1.5rem; --font-size-h4: 1.4rem; --font-size-base: 1.3rem; --font-size-h5: 1.2rem; --font-size-h6: 1.1rem; } .light-scheme { --scheme: 100% -; } .size-title-dynamic { font-size: var(--font-size-h4); } .page-column-full .size-title-dynamic { font-size: var(--font-size-h3); } .color-primary-if-not-visited:not(:visited) { color: var(--color-primary); } .text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .text-truncate-3-lines { overflow: hidden; text-overflow: ellipsis; -webkit-line-clamp: 3; display: -webkit-box; -webkit-box-orient: vertical; } .visited-indicator:not(.text-truncate)::after, .visited-indicator.text-truncate::before, .bookmarks-link::after { content: '↗'; margin-left: 0.5em; display: inline-block; position: relative; top: 0.15em; color: var(--color-text-base); } .visited-indicator.text-truncate { direction: rtl; text-align: left; } .visited-indicator:not(:visited)::before, .visited-indicator:not(:visited)::after { color: var(--color-primary); } .list { --list-half-gap: 0rem; } .list-gap-2 { --list-half-gap: 0.1rem; } .list-gap-4 { --list-half-gap: 0.2rem; } .list-gap-14 { --list-half-gap: 0.7rem; } .list-gap-20 { --list-half-gap: 1rem; } .list-gap-24 { --list-half-gap: 1.2rem; } .list > *:not(:first-child) { margin-top: calc(var(--list-half-gap) * 2 + 1px); } .list-with-separator > *:not(:first-child) { margin-top: var(--list-half-gap); border-top: 1px solid var(--color-separator); padding-top: var(--list-half-gap); } @keyframes listItemReveal { from { opacity: 0; transform: translateY(10px); } } .list-collapsible-item { display: none; animation: listItemReveal 0.3s backwards; animation-delay: var(--animation-delay); } .list-collapsible-label { display: flex; align-items: center; gap: 1rem; padding: var(--widget-content-vertical-padding) 0; background: var(--color-widget-background); } .list-collapsible-label:has(.list-collapsible-input:checked) { position: sticky; bottom: 0; } .list-collapsible:has(+ .list-collapsible-label > .list-collapsible-input:checked) .list-collapsible-item { display: block; } .list-collapsible-input { display: none; } .list-collapsible-label::before, .list-collapsible-label::after { cursor: pointer; display: block; } .list-collapsible-label::before { content: 'SHOW MORE'; font-size: var(--font-size-h4); } .list-collapsible-label:has(.list-collapsible-input:checked)::before { content: 'SHOW LESS'; } .list-collapsible-label::after { content: ''; font-size: 0.8rem; transform: rotate(90deg); line-height: 1; transition: transform 0.3s; } .list-collapsible-label:has(.list-collapsible-input:checked)::after { transform: rotate(-90deg); } .widget-content:has(.list-collapsible-label:last-child) { padding-bottom: 0; } ::selection { background-color: hsl(var(--bghs), calc(var(--scheme) (var(--scheme) var(--bgl) + 20%))); color: var(--color-text-highlight); } ::-webkit-scrollbar-thumb { background: var(--color-text-subdue); border-radius: var(--border-radius); } ::-webkit-scrollbar { background: var(--color-background); height: 5px; width: 10px; } *, *::before, *::after { box-sizing: border-box; } * { padding: 0; margin: 0; } img, svg { display: block; max-width: 100%; } html { scrollbar-color: var(--color-text-subdue) transparent; scroll-behavior: smooth; } a { text-decoration: none; color: inherit; } ul { list-style: none; } body { font-size: 1.3rem; font-family: 'JetBrains Mono', monospace; font-variant-ligatures: none; line-height: 1.6; color: var(--color-text-base); background-color: var(--color-background); overflow-y: scroll; } .page-column-small { width: 300px; flex-shrink: 0; } .page-column-full { width: 100%; min-width: 0; } .page-columns { display: flex; gap: var(--widget-gap); margin: var(--widget-gap) 0; animation: pageColumnsEntrance .3s cubic-bezier(0.25, 1, 0.5, 1) backwards; } @keyframes pageColumnsEntrance { from { opacity: 0; transform: translateY(10px); } } .page-loading-container { margin: 50px auto; width: fit-content; animation: loadingContainerEntrance 200ms backwards; animation-delay: 150ms; font-size: 2rem; } @keyframes loadingContainerEntrance { from { opacity: 0; } } .loading-icon { min-width: 1.5em; width: 1.5em; height: 1.5em; border: 0.25em solid hsl(var(--bghs), calc(var(--scheme) ((var(--scheme) var(--bgl)) + 12%))); border-top-color: hsl(var(--bghs), calc(var(--scheme) ((var(--scheme) var(--bgl)) + 40%))); border-radius: 50%; animation: loadingIconSpin 800ms infinite linear; } @keyframes loadingIconSpin { to { transform: rotate(360deg); } } @keyframes loadingIconSpin { to { transform: rotate(360deg); } } .notice-icon { width: 0.7rem; height: 0.7rem; border-radius: 50%; } .notice-icon-major { background: var(--color-negative); } .notice-icon-minor { border: 1px solid var(--color-negative); } .content-bounds { max-width: 1600px; margin-inline: auto; padding: 0 var(--content-bounds-padding); } .cards-vertical { flex-direction: column; } .cards-horizontal { --cards-per-row: 6.5; } .cards-grid { --cards-per-row: 6; } .cards-horizontal, .cards-vertical, .cards-grid { --cards-gap: calc(var(--widget-content-vertical-padding) * 0.7); display: flex; gap: var(--cards-gap); } .cards-horizontal { overflow-x: auto; padding-bottom: 1rem; } .cards-grid { flex-wrap: wrap; } @container widget (max-width: 1300px) { .cards-horizontal { --cards-per-row: 5.5; } } @container widget (max-width: 1100px) { .cards-horizontal { --cards-per-row: 4.5; } } @container widget (max-width: 850px) { .cards-horizontal { --cards-per-row: 3.5; } } @container widget (max-width: 750px) { .cards-horizontal { --cards-per-row: 3.5; } } @container widget (max-width: 650px) { .cards-horizontal { --cards-per-row: 2.2; } } @container widget (max-width: 1300px) { .cards-grid { --cards-per-row: 5; } } @container widget (max-width: 1100px) { .cards-grid { --cards-per-row: 4; } } @container widget (max-width: 850px) { .cards-grid { --cards-per-row: 3; } } @container widget (max-width: 750px) { .cards-grid { --cards-per-row: 3; } } @container widget (max-width: 650px) { .cards-grid { --cards-per-row: 2; } } .card { flex-shrink: 0; width: calc(100% / var(--cards-per-row) - var(--cards-gap) * (var(--cards-per-row) - 1) / var(--cards-per-row)); display: flex; flex-direction: column; } .widget-error-header { display: flex; align-items: center; justify-content: space-between; position: relative; margin-bottom: 1.8rem; } .widget-error-header::before { content: ''; position: absolute; inset: calc(0rem - (var(--widget-content-vertical-padding) / 2)) calc(0rem - (var(--widget-content-horizontal-padding) / 2)); background: var(--color-negative); opacity: 0.05; border-radius: var(--border-radius); z-index: -1; } .widget-error-icon { width: 2.4rem; height: 2.4rem; border: 0.2rem solid var(--color-negative); border-radius: 50%; text-align: center; line-height: 2rem; flex-shrink: 0; opacity: 0.6; } .widget-error-icon::before { content: '!'; color: var(--color-text-highlight); } .widget-content { container-type: inline-size; container-name: widget; } .widget-content:not(.widget-content-frameless) { padding: var(--widget-content-padding); } .widget-content:not(.widget-content-frameless), .widget-content-frame { background: var(--color-widget-background); border-radius: var(--border-radius); border: 1px solid var(--color-widget-content-border); box-shadow: 0px 3px 0px 0px hsl(var(--bghs), calc(var(--scheme) (var(--scheme) var(--bgl)) - 0.5%)); } .padding-widget { padding: var(--widget-content-padding); } .margin-bottom-widget { margin-bottom: var(--widget-content-vertical-padding); } .padding-block-widget { padding-block: var(--widget-content-vertical-padding); } .padding-inline-widget { padding-inline: var(--widget-content-horizontal-padding); } .widget-header { padding: 0 calc(var(--widget-content-horizontal-padding) + 1px); font-size: var(--font-size-h4); margin-bottom: 1rem; display: flex; align-items: center; gap: 1rem; } .widget + .widget { margin-top: var(--widget-gap); } .list-horizontal-text { display: flex; list-style: none; flex-wrap: wrap; align-items: center; } .list-horizontal-text > *:not(:last-child)::after { content: '•'; color: var(--color-text-subdue); margin: 0 0.5rem; position: relative; top: 0.1rem; } .header-container { margin-top: calc(var(--widget-gap) / 2); --header-height: 45px; --header-items-gap: 2.5rem; } .header { display: flex; height: var(--header-height); gap: var(--header-items-gap); } .logo { height: 100%; line-height: var(--header-height); font-size: 2rem; color: var(--color-text-highlight); border-right: 1px solid var(--color-widget-content-border); padding-right: var(--widget-content-horizontal-padding); } .nav { height: 100%; gap: var(--header-items-gap); } .nav .nav-item { line-height: var(--header-height); } .footer { margin-block: calc(var(--widget-gap) * 1.5); animation: loadingContainerEntrance 200ms backwards; animation-delay: 150ms; } .mobile-navigation { display: none; } .nav-item { display: block; height: 100%; border-bottom: 2px solid transparent; transition: color .3s, border-color .3s; font-size: var(--font-size-h3); } .nav-item:not(.nav-item-current):hover { border-bottom-color: var(--color-text-subdue); color: var(--color-text-highlight); } .nav-item.nav-item-current { border-bottom-color: var(--color-primary); color: var(--color-text-highlight); } .stock-chart { margin-left: auto; width: 6.5rem; } .stock-values { min-width: 8rem; } .carousel-container { position: relative; } .carousel-container::before, .carousel-container::after { content: ''; position: absolute; width: 2rem; top: 0; bottom: 1rem; z-index: 10; opacity: 0; pointer-events: none; transition-duration: 0.2s; } .carousel-container::before { left: 0; background: linear-gradient(to right, var(--color-background), transparent); } .carousel-container::after { right: 0; background: linear-gradient(to left, var(--color-background), transparent); } .carousel-container.show-left-cutoff::before, .carousel-container.show-right-cutoff::after { opacity: 1; } .video-thumbnail { width: 100%; aspect-ratio: 16 / 9; object-fit: cover; border-radius: var(--border-radius) var(--border-radius) 0 0; } .video-title { margin-bottom: auto; overflow: hidden; display: block; text-overflow: ellipsis; -webkit-line-clamp: 2; display: -webkit-box; -webkit-box-orient: vertical; } .forum-post-list-item { display: flex; gap: 1.2rem; } .forum-post-list-thumbnail { flex-shrink: 0; width: 6rem; height: 4rem; border-radius: var(--border-radius); object-fit: cover; border: 1px solid var(--color-separator); margin-top: 0.2rem; } .bookmarks-group { --bookmarks-group-color: var(--color-primary); } .bookmarks-group-title { color: var(--bookmarks-group-color); } .bookmarks-link::after { color: var(--bookmarks-group-color); } .calendar-day { width: calc(100% / 7); text-align: center; padding: 0.6rem 0; } .calendar-day-today { border-radius: var(--border-radius); background-color: hsl(var(--bghs), calc(var(--scheme) (var(--scheme) (var(--bgl)) + 6%))); color: var(--color-text-highlight); } .weather-column { position: relative; display: flex; align-items: center; justify-content: end; flex-direction: column; width: calc(100% / 12); padding-top: 3px; max-width: 3.5rem; } .weather-column-value, .weather-columns:hover .weather-column-value { font-size: 13px; color: var(--color-text-highlight); letter-spacing: -0.1rem; margin-right: 0.1rem; position: relative; margin-bottom: 0.3rem; opacity: 0; transform: translateY(0.5rem); transition: opacity .2s, transform .2s; user-select: none; } .weather-column-current .weather-column-value, .weather-column:hover .weather-column-value { opacity: 1; transform: translateY(0); } .weather-column-value::after { position: absolute; content: '°'; left: 100%; color: var(--color-text-subdue); } .weather-column-value.weather-column-value-negative::before { position: absolute; content: '-'; right: 100%; } .weather-bar, .weather-columns:hover .weather-bar { height: calc(20px + var(--weather-bar-height) * 40px); width: 6px; background-color: hsl(var(--ths), calc(var(--scheme) ((var(--scheme) var(--bgl)) + 18%))); border: 1px solid hsl(var(--ths), calc(var(--scheme) ((var(--scheme) var(--bgl)) + 24%))); border-bottom: 0; border-radius: 6px 6px 0 0; mask-image: linear-gradient(0deg, transparent 0, #000 10px); -webkit-mask-image: linear-gradient(0deg, transparent 0, #000 10px); transition: background-color .2s, border-color .2s, width .2s; } .weather-column-current .weather-bar, .weather-column:hover .weather-bar { width: 10px; background-color: hsl(var(--ths), calc(var(--scheme) ((var(--scheme) var(--bgl)) + 40%))); border: 1px solid hsl(var(--ths), calc(var(--scheme) ((var(--scheme) var(--bgl)) + 50%))); } .weather-column-rain { position: absolute; inset: 0; bottom: 20%; overflow: hidden; mask-image: linear-gradient(0deg, transparent 40%, #000); -webkit-mask-image: linear-gradient(0deg, transparent 40%, #000); z-index: -1; } .weather-column-rain::before { content: ''; position: absolute; /* TODO: figure out a way to make it look continuous between columns, right now depending on the width of the page the rain inside two columns next to each other can overlap and look bad */ background: radial-gradient(circle at 4px 4px, hsl(200, 90%, 70%, 0.4) 1px, transparent 0); background-size: 8px 8px; transform: rotate(45deg) translate(-50%, 25%); height: 130%; aspect-ratio: 1; left: 55%; } .weather-column:nth-child(3) .weather-column-time, .weather-column:nth-child(7) .weather-column-time, .weather-column:nth-child(11) .weather-column-time { opacity: 1; transform: translateY(0); } .weather-column-time, .weather-columns:hover .weather-column-time { margin-top: 0.3rem; font-size: var(--font-size-h6); opacity: 0; transform: translateY(-0.5rem); transition: opacity .2s, transform .2s; user-select: none; } .weather-column:hover .weather-column-time { opacity: 1; transform: translateY(0); } .weather-column-daylight { position: absolute; inset: 0; background: linear-gradient(0deg, transparent 30px, hsl(50, 50%, 30%, 0.2)); } .weather-column-daylight-sunrise { border-radius: 20px 0 0 0; } .weather-column-daylight-sunset { border-radius: 0 20px 0 0; } .location-icon { width: 0.8em; height: 0.8em; border-radius: 0 50% 50% 50%; background-color: currentColor; transform: rotate(225deg) translate(.1em, .1em); position: relative; flex-shrink: 0; } .location-icon::after { content: ''; position: absolute; z-index: 2; width: .4em; height: .4em; border-radius: 50%; background-color: var(--color-widget-background); top: 50%; left: 50%; transform: translate(-50%, -50%); } .monitor-site-icon { display: block; opacity: 0.8; filter: grayscale(0.4); object-fit: contain; aspect-ratio: 1 / 1; width: 3.2rem; position: relative; top: -0.1rem; transition: filter 0.3s, opacity 0.3s; } .monitor-site:hover .monitor-site-icon { filter: grayscale(0); opacity: 1; } .monitor-site-status-icon { margin-left: auto; width: 2rem; height: 2rem; } .thumbnail { filter: grayscale(0.2) contrast(0.9); transition: all 0.2s; opacity: 0.8; } .thumbnail-container:hover .thumbnail { opacity: 1; filter: none; } .rss-card-image { height: 10rem; object-fit: cover; border-radius: var(--border-radius) var(--border-radius) 0 0; } .twitch-category-thumbnail { width: 5rem; border-radius: var(--border-radius); } .twitch-channel-avatar { aspect-ratio: 1; border-radius: 50%; } .twitch-channel-avatar-container { width: 4.4rem; height: 4.4rem; border: 2px solid var(--color-text-subdue); padding: 2px; border-radius: 50%; position: relative; flex-shrink: 0; } .twitch-channel-live .twitch-channel-avatar-container { border: 2px solid var(--color-positive); margin-bottom: 1rem; } .twitch-channel-live .twitch-channel-avatar-container::after { content: 'LIVE'; position: absolute; background: var(--color-positive); color: var(--color-widget-background); font-size: var(--font-size-h6); left: 50%; bottom: -35%; border-radius: var(--border-radius); padding-inline: 0.3rem; transform: translate(-50%); border: 2px solid var(--color-widget-background); } .reddit-card-thumbnail { width: 100%; height: 100%; object-fit: cover; object-position: 0% 20%; opacity: 0.15; filter: blur(1px); } .reddit-card-thumbnail-container { position: absolute; inset: 0; overflow: hidden; border-radius: var(--border-radius); } .reddit-card-thumbnail-container::after { content: ''; position: absolute; inset: 0; background: linear-gradient(0deg, var(--color-widget-background) 10%, transparent); } @media (max-width: 1190px) { .header-container { display: none; } .page-column-full .size-title-dynamic { font-size: var(--font-size-h3); } .page-column-small { width: 100%; flex-shrink: 1; } .page-column { display: none; animation: columnEntrance 0s cubic-bezier(0.25, 1, 0.5, 1) backwards; } .animate-element-transition .page-column { animation-duration: .3s; } @keyframes columnEntrance { from { opacity: 0; transform: scaleX(0.95); } } body { padding-bottom: calc(var(--mobile-navigation-height) + var(--content-bounds-padding)); } .mobile-navigation { display: block; position: fixed; bottom: 0; transform: translateY(calc(100% - var(--mobile-navigation-height))); left: var(--content-bounds-padding); right: var(--content-bounds-padding); z-index: 10; background-color: var(--color-widget-background); border: 1px solid var(--color-widget-content-border); border-bottom: 0; border-radius: var(--border-radius) var(--border-radius) 0 0; transition: transform .3s; } .mobile-navigation:has(.mobile-navigation-page-links-input:checked) .hamburger-icon { --spacing: 7px; color: var(--color-primary); height: 2px; } .mobile-navigation:has(.mobile-navigation-page-links-input:checked) { transform: translateY(0); } .mobile-navigation-page-links { border-top: 1px solid var(--color-widget-content-border); padding: 15px var(--content-bounds-padding); display: flex; align-items: center; overflow-x: scroll; gap: 2.5rem; } .mobile-navigation-icons { display: flex; justify-content: space-around; align-items: center; } body:has(.mobile-navigation-input[value="0"]:checked) .page-columns > :nth-child(1), body:has(.mobile-navigation-input[value="1"]:checked) .page-columns > :nth-child(2), body:has(.mobile-navigation-input[value="2"]:checked) .page-columns > :nth-child(3) { display: block; } .mobile-navigation-label { display: flex; flex: 1; max-width: 50px; height: var(--mobile-navigation-height); justify-content: center; align-items: center; cursor: pointer; font-size: 15px; line-height: var(--mobile-navigation-height); } .mobile-navigation-pill { display: block; background: var(--color-text-base); height: 10px; width: 10px; border-radius: 10px; transition: width .3s, background-color .3s; } .mobile-navigation-label:hover > .mobile-navigation-pill { background-color: var(--color-text-highlight); } .mobile-navigation-label:hover { color: var(--color-text-highlight); } .mobile-navigation-input:checked + .mobile-navigation-pill { background: var(--color-primary); width: 30px; } .mobile-navigation-input, .mobile-navigation-page-links-input { display: none; } .hamburger-icon { --spacing: 4px; width: 1em; height: 1px; background-color: currentColor; transition: color .3s, box-shadow .3s; box-shadow: 0 calc(var(--spacing) * -1) 0 0 currentColor, 0 var(--spacing) 0 0 currentColor; } .list-collapsible-label:has(.list-collapsible-input:checked) { bottom: var(--mobile-navigation-height); } } @media (max-width: 550px) { :root { font-size: 9px; --widget-gap: 15px; --widget-content-vertical-padding: 10px; --widget-content-horizontal-padding: 10px; --content-bounds-padding: 10px; } .forum-post-list-item { flex-flow: row-reverse; } svg.forum-post-list-thumbnail { display: none } } .size-h1 { font-size: var(--font-size-h1); } .size-h2 { font-size: var(--font-size-h2); } .size-h3 { font-size: var(--font-size-h3); } .size-h4 { font-size: var(--font-size-h4); } .size-base { font-size: var(--font-size-base); } .size-h5 { font-size: var(--font-size-h5); } .size-h6 { font-size: var(--font-size-h6); } .color-highlight { color: var(--color-text-highlight); } .color-base { color: var(--color-text-base); } .color-subdue { color: var(--color-text-subdue); } .color-negative { color: var(--color-negative); } .color-positive { color: var(--color-positive); } .color-primary { color: var(--color-primary); } .break-all { word-break: break-all; } .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } .rtl { direction: rtl; } .shrink { flex-shrink: 1; } .shrink-0 { flex-shrink: 0; } .min-width-0 { min-width: 0; } .block { display: block; } .overflow-hidden { overflow: hidden; } .relative { position: relative; } .flex { display: flex; } .flex-wrap { flex-wrap: wrap; } .flex-nowrap { flex-wrap: nowrap; } .justify-between { justify-content: space-between; } .justify-stretch { justify-content: stretch; } .justify-center { justify-content: center; } .justify-end { justify-content: end; } .uppercase { text-transform: uppercase; } .grow { flex-grow: 1; } .flex-column { flex-direction: column; } .items-center { align-items: center; } .items-start { align-items: start; } .gap-5 { gap: 0.5rem; } .gap-7 { gap: 0.7rem; } .gap-10 { gap: 1rem; } .gap-15 { gap: 1.5rem; } .margin-top-3 { margin-top: 0.3rem; } .margin-top-5 { margin-top: 0.5rem; } .margin-top-7 { margin-top: 0.7rem; } .margin-top-10 { margin-top: 1rem; } .margin-top-15 { margin-top: 1.5rem; } .margin-bottom-3 { margin-bottom: 0.3rem; } .margin-bottom-5 { margin-bottom: 0.5rem; } .margin-bottom-7 { margin-bottom: 0.7rem; } .margin-bottom-10 { margin-bottom: 1rem; } .margin-bottom-15 { margin-bottom: 1.5rem; } .margin-bottom-auto { margin-bottom: auto; }