/* The common styles */ html { @media (prefers-color-scheme: light) { &:not([data-mode]), &[data-mode='light'] { @include light-scheme; } &[data-mode='dark'] { @include dark-scheme; } } @media (prefers-color-scheme: dark) { &:not([data-mode]), &[data-mode='dark'] { @include dark-scheme; } &[data-mode='light'] { @include light-scheme; } } font-size: 16px; } body { background: var(--main-bg); padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left); color: var(--text-color); -webkit-font-smoothing: antialiased; font-family: $font-family-base; } /* --- Typography --- */ @for $i from 1 through 5 { h#{$i} { @extend %heading; @if $i > 1 { @extend %section; @extend %anchor; } @if $i < 5 { $factor: 0.18rem; @if $i == 1 { $factor: 0.23rem; } font-size: 1rem + (5 - $i) * $factor; } @else { font-size: 1rem; } } } a { @extend %link-color; text-decoration: none; } img { max-width: 100%; height: auto; transition: all 0.35s ease-in-out; &[data-src] { &[data-lqip='true'] { &.lazyload, &.lazyloading { -webkit-filter: blur(20px); filter: blur(20px); } } &:not([data-lqip='true']) { &.lazyload, &.lazyloading { background: var(--img-bg); } &.lazyloaded { -webkit-animation: fade-in 0.35s ease-in; animation: fade-in 0.35s ease-in; } } &.shadow { -webkit-filter: drop-shadow(2px 4px 6px rgba(0, 0, 0, 0.08)); filter: drop-shadow(2px 4px 6px rgba(0, 0, 0, 0.08)); box-shadow: none !important; /* cover the Bootstrap 4.6.1 styles */ } @extend %img-caption; } @-webkit-keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } } blockquote { border-left: 5px solid var(--blockquote-border-color); padding-left: 1rem; color: var(--blockquote-text-color); &[class^='prompt-'] { border-left: 0; position: relative; padding: 1rem 1rem 1rem 3rem; color: var(--prompt-text-color); @extend %rounded; &::before { text-align: center; width: 3rem; position: absolute; left: 0.25rem; margin-top: 0.4rem; text-rendering: auto; -webkit-font-smoothing: antialiased; } > p:last-child { margin-bottom: 0; } } @include prompt('tip', '\f0eb', 'regular'); @include prompt('info', '\f06a'); @include prompt('warning', '\f06a'); @include prompt('danger', '\f071'); } kbd { font-family: inherit; display: inline-block; vertical-align: middle; line-height: 1.3rem; min-width: 1.75rem; text-align: center; margin: 0 0.3rem; padding-top: 0.1rem; color: var(--kbd-text-color); background-color: var(--kbd-bg-color); border-radius: 0.25rem; border: solid 1px var(--kbd-wrap-color); box-shadow: inset 0 -2px 0 var(--kbd-wrap-color); } footer { font-size: 0.8rem; background-color: var(--main-bg); div.d-flex { height: $footer-height; line-height: 1.2rem; padding-bottom: 1rem; border-top: 1px solid var(--main-border-color); flex-wrap: wrap; } a { @extend %text-color; &:hover { @extend %link-hover; } } p { width: 100%; text-align: center; margin-bottom: 0; } } /* fontawesome icons */ i { &.far, &.fas { @extend %no-cursor; } } /* --- Panels --- */ .access { top: 2rem; transition: top 0.2s ease-in-out; margin-top: 3rem; margin-bottom: 4rem; &:only-child { position: -webkit-sticky; position: sticky; } > div { padding-left: 1rem; border-left: 1px solid var(--main-border-color); &:not(:last-child) { margin-bottom: 4rem; } } .post-content { font-size: 0.9rem; } } #panel-wrapper { /* the headings */ .panel-heading { @include label(inherit); } .post-tag { line-height: 1.05rem; font-size: 0.85rem; border: 1px solid var(--btn-border-color); border-radius: 0.8rem; padding: 0.3rem 0.5rem; margin: 0 0.35rem 0.5rem 0; &:hover { transition: all 0.3s ease-in; } } } #access-lastmod { a { &:hover { @extend %link-hover; } @extend %no-bottom-border; color: inherit; } } .footnotes > ol { padding-left: 2rem; margin-top: 0.5rem; > li { &:not(:last-child) { margin-bottom: 0.3rem; } > p { margin-left: 0.25em; margin-top: 0; margin-bottom: 0; } /* [scroll-focus] added by `smooth-scroll.js` */ &:target:not([scroll-focus]), &[scroll-focus='true'] > p { background-color: var(--footnote-target-bg); width: -moz-fit-content; width: -webkit-fit-content; width: fit-content; transition: background-color 1.5s ease-in-out; } } } .footnote { @at-root a#{&} { @include ml-mr(1px); @include pl-pr(2px); border-bottom-style: none !important; transition: background-color 1.5s ease-in-out; } /* [scroll-focus] added by `smooth-scroll.js` */ @at-root sup:target:not([scroll-focus]), sup[scroll-focus='true'] > a#{&} { background-color: var(--footnote-target-bg); } } .reversefootnote { @at-root a#{&} { font-size: 0.6rem; line-height: 1; position: relative; bottom: 0.25em; margin-left: 0.25em; border-bottom-style: none !important; } } /* --- Begin of Markdown table style --- */ /* it will be created by Liquid */ .table-wrapper { overflow-x: auto; margin-bottom: 1.5rem; > table { min-width: 100%; overflow-x: auto; border-spacing: 0; thead { border-bottom: solid 2px rgba(210, 215, 217, 0.75); th { @extend %table-cell; } } tbody { tr { border-bottom: 1px solid var(--tb-border-color); &:nth-child(2n) { background-color: var(--tb-even-bg); } &:nth-child(2n + 1) { background-color: var(--tb-odd-bg); } td { @extend %table-cell; } } } /* tbody */ } /* table */ } /* --- post --- */ .post-preview { @extend %rounded; border: 0; background: var(--card-bg); box-shadow: var(--card-shadow); &::before { @extend %rounded; content: ''; width: 100%; height: 100%; position: absolute; background-color: var(--card-hovor-bg); opacity: 0; transition: opacity 0.35s ease-in-out; } &:hover { &::before { opacity: 0.3; } } } .post { h1 { margin-top: 2rem; margin-bottom: 1.5rem; } p { > img[data-src], > a.popup { &:not(.normal):not(.left):not(.right) { @include align-center; } } } } .pageviews .fa-spinner { font-size: 80%; } .post-meta { font-size: 0.85rem; a { &:not([class]):hover { @extend %link-hover; } } em { @extend %normal-font-style; } } .post-content { font-size: 1.08rem; margin-top: 2rem; overflow-wrap: break-word; a { &.popup { @extend %no-cursor; @extend %img-caption; @include mt-mb(0.5rem); cursor: zoom-in; } &:not(.img-link) { @extend %link-underline; &:hover { @extend %link-hover; } } } ol, ul { &:not([class]), &.task-list { -webkit-padding-start: 1.75rem; padding-inline-start: 1.75rem; li { margin: 0.25rem 0; padding-left: 0.25rem; } ol, ul { -webkit-padding-start: 1.25rem; padding-inline-start: 1.25rem; margin: 0.5rem 0; } } } ul.task-list { -webkit-padding-start: 1.25rem; padding-inline-start: 1.25rem; li { list-style-type: none; padding-left: 0; /* checkbox icon */ > i { width: 2rem; margin-left: -1.25rem; color: var(--checkbox-color); &.checked { color: var(--checkbox-checked-color); } } ul { -webkit-padding-start: 1.75rem; padding-inline-start: 1.75rem; } } input[type='checkbox'] { margin: 0 0.5rem 0.2rem -1.3rem; vertical-align: middle; } } /* ul */ dl > dd { margin-left: 1rem; } ::marker { color: var(--text-muted-color); } } /* .post-content */ .tag:hover { @extend %tag-hover; } .post-tag { display: inline-block; min-width: 2rem; text-align: center; border-radius: 0.3rem; padding: 0 0.4rem; color: inherit; line-height: 1.3rem; &:not(:last-child) { margin-right: 0.2rem; } } .rounded-10 { border-radius: 10px !important; } .img-link { color: transparent; display: inline-flex; } .shimmer { overflow: hidden; position: relative; background: var(--img-bg); &::before { content: ''; position: absolute; background: var(--shimmer-bg); height: 100%; width: 100%; -webkit-animation: shimmer 1s infinite; animation: shimmer 1s infinite; } @-webkit-keyframes shimmer { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } } @keyframes shimmer { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } } } .embed-video { width: 100%; height: 100%; margin-bottom: 1rem; @extend %rounded; &.youtube { aspect-ratio: 16 / 9; } &.twitch { aspect-ratio: 310 / 189; } } /* --- buttons --- */ .btn-lang { border: 1px solid !important; padding: 1px 3px; border-radius: 3px; color: var(--link-color); &:focus { box-shadow: none; } } /* --- Effects classes --- */ .loaded { display: block !important; @at-root .d-flex#{&} { display: flex !important; } } .unloaded { display: none !important; } .visible { visibility: visible !important; } .hidden { visibility: hidden !important; } .flex-grow-1 { flex-grow: 1 !important; } .btn-box-shadow { box-shadow: 0 0 8px 0 var(--btn-box-shadow) !important; } /* overwrite bootstrap muted */ .text-muted { color: var(--text-muted-color) !important; } /* Overwrite bootstrap tooltip */ .tooltip-inner { font-size: 0.7rem; max-width: 220px; text-align: left; } /* Overwrite bootstrap outline button */ .btn.btn-outline-primary { &:not(.disabled):hover { border-color: #007bff !important; } } .disabled { color: rgb(206, 196, 196); pointer-events: auto; cursor: not-allowed; } .hide-border-bottom { border-bottom: none !important; } .input-focus { box-shadow: none; border-color: var(--input-focus-border-color) !important; background: center !important; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; } .left { float: left; margin: 0.75rem 1rem 1rem 0 !important; } .right { float: right; margin: 0.75rem 0 1rem 1rem !important; } /* --- Overriding --- */ /* magnific-popup */ figure .mfp-title { text-align: center; padding-right: 0; margin-top: 0.5rem; } .mfp-img { transition: none; } /* mermaid */ .mermaid { text-align: center; } /* MathJax */ mjx-container { overflow-y: hidden; min-width: auto !important; } /* --- sidebar layout --- */ $sidebar-display: 'sidebar-display'; $btn-gap: 0.8rem; // for the bottom icons $btn-border-width: 3px; $btn-mb: 0.5rem; #sidebar { @include pl-pr(0); position: fixed; top: 0; left: 0; height: 100%; overflow-y: auto; width: $sidebar-width; z-index: 99; background: var(--sidebar-bg); /* Hide scrollbar for Chrome, Safari and Opera */ &::-webkit-scrollbar { display: none; } /* Hide scrollbar for IE, Edge and Firefox */ -ms-overflow-style: none; /* IE and Edge */ scrollbar-width: none; /* Firefox */ %sidebar-link-hover { &:hover { color: var(--sidebar-active-color); } } a { @extend %sidebar-links; } #avatar { display: block; width: 7rem; height: 7rem; overflow: hidden; box-shadow: var(--avatar-border-color) 0 0 0 2px; transform: translateZ(0); /* fixed the zoom in Safari */ img { transition: transform 0.5s; &:hover { transform: scale(1.2); } } } .profile-wrapper { @include mt-mb(2.5rem); @extend %clickable-transition; padding-left: 2.5rem; padding-right: 1.25rem; width: 100%; } .site-title { font-weight: 900; font-size: 1.75rem; line-height: 1.2; letter-spacing: 0.25px; color: rgba(134, 133, 133, 0.99); margin-top: 1.25rem; margin-bottom: 0.5rem; a { @extend %clickable-transition; @extend %sidebar-link-hover; } } .site-subtitle { font-size: 95%; color: var(--sidebar-muted-color); margin-top: 0.25rem; word-spacing: 1px; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } ul { margin-bottom: 2rem; li.nav-item { opacity: 0.9; width: 100%; padding-left: 1.5rem; padding-right: 1.5rem; a.nav-link { @include pt-pb(0.6rem); display: flex; align-items: center; border-radius: 0.75rem; font-weight: 600; &:hover { background-color: var(--sidebar-hover-bg); } i { font-size: 95%; opacity: 0.8; margin-right: 1.5rem; } span { font-size: 90%; letter-spacing: 0.2px; } } &.active { .nav-link { color: var(--sidebar-active-color); background-color: var(--sidebar-hover-bg); span { opacity: 1; } } } &:not(:first-child) { margin-top: 0.25rem; } } } .sidebar-bottom { @include pl-pr(2rem); margin-bottom: 1.5rem; %button { width: 1.75rem; height: 1.75rem; margin-bottom: $btn-mb; // multi line gap border-radius: 50%; color: var(--sidebar-btn-color); background-color: var(--sidebar-btn-bg); text-align: center; display: flex; align-items: center; justify-content: center; &:hover { background-color: var(--sidebar-hover-bg); } } a { @extend %button; @extend %sidebar-link-hover; @extend %clickable-transition; &:not(:last-child) { margin-right: $btn-gap; } } i { line-height: 1.75rem; } .mode-toggle { padding: 0; border: 0; @extend %button; @extend %sidebar-links; @extend %sidebar-link-hover; } .icon-border { @extend %no-cursor; @include ml-mr(calc(($btn-gap - $btn-border-width) / 2)); background-color: var(--sidebar-muted-color); content: ''; width: $btn-border-width; height: $btn-border-width; border-radius: 50%; margin-bottom: $btn-mb; } } /* .sidebar-bottom */ } /* #sidebar */ @media (hover: hover) { #sidebar ul > li:last-child::after { transition: top 0.5s ease; } .nav-link { transition: background-color 0.3s ease-in-out; } .post-preview { transition: background-color 0.35s ease-in-out; } } #search-result-wrapper { display: none; height: 100%; width: 100%; overflow: auto; .post-content { margin-top: 2rem; } } /* --- top-bar --- */ #topbar-wrapper { height: $topbar-height; background-color: var(--topbar-bg); } #topbar { /* icons */ i { color: #999999; } #breadcrumb { font-size: 1rem; color: gray; padding-left: 0.5rem; a:hover { @extend %link-hover; } span { &:not(:last-child) { &::after { content: '›'; padding: 0 0.3rem; } } } } } /* #topbar */ #sidebar-trigger, #search-trigger { display: none; } #search-wrapper { display: flex; width: 100%; border-radius: 1rem; border: 1px solid var(--search-wrapper-border-color); background: var(--main-bg); padding: 0 0.5rem; i { z-index: 2; font-size: 0.9rem; color: var(--search-icon-color); } } /* 'Cancel' link */ #search-cancel { color: var(--link-color); margin-left: 1rem; display: none; @extend %cursor-pointer; } #search-input { background: center; border: 0; border-radius: 0; padding: 0.18rem 0.3rem; color: var(--text-color); height: auto; &:focus { box-shadow: none; &.form-control { &::-moz-placeholder { @include input-placeholder; } &::-webkit-input-placeholder { @include input-placeholder; } &:-ms-input-placeholder { @include input-placeholder; } &::-ms-input-placeholder { @include input-placeholder; } &::placeholder { @include input-placeholder; } } } } #search-hints { padding: 0 1rem; h4 { margin-bottom: 1.5rem; } .post-tag { display: inline-block; line-height: 1rem; font-size: 1rem; background: var(--search-tag-bg); border: none; padding: 0.5rem; margin: 0 1.25rem 1rem 0; &::before { content: '#'; color: var(--text-muted-color); padding-right: 0.2rem; } @extend %link-color; } } #search-results { padding-bottom: 3rem; a { &:hover { @extend %link-hover; } @extend %link-color; @extend %no-bottom-border; @extend %heading; font-size: 1.4rem; line-height: 2.5rem; } > div { width: 100%; &:not(:last-child) { margin-bottom: 1rem; } /* icons */ i { color: #818182; margin-right: 0.15rem; font-size: 80%; } > p { overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; } } } /* #search-results */ #topbar-title { display: none; font-size: 1.1rem; font-weight: 600; font-family: sans-serif; color: var(--topbar-text-color); text-align: center; width: 70%; overflow: hidden; text-overflow: ellipsis; word-break: keep-all; white-space: nowrap; } #core-wrapper { line-height: 1.75; .categories, #tags, #archives { a:not(:hover) { @extend %no-bottom-border; } } } #mask { display: none; position: fixed; inset: 0 0 0 0; height: 100%; width: 100%; z-index: 1; @at-root [#{$sidebar-display}] & { display: block !important; } } /* --- main wrapper --- */ #main-wrapper { background-color: var(--main-bg); position: relative; min-height: calc(100vh - $footer-height-mobile); @include pl-pr(0); } #topbar-wrapper.row, #main > .row, #search-result-wrapper > .row { @include ml-mr(0); } /* --- button back-to-top --- */ #back-to-top { $size: 3rem; display: none; z-index: 1; cursor: pointer; position: fixed; right: 1rem; bottom: 2rem; background: var(--button-bg); color: var(--btn-backtotop-color); padding: 0; width: $size; height: $size; border-radius: 50%; border: 1px solid var(--btn-backtotop-border-color); transition: transform 0.2s ease-out; -webkit-transition: transform 0.2s ease-out; &:hover { transform: translate3d(0, -5px, 0); -webkit-transform: translate3d(0, -5px, 0); } i { line-height: $size; position: relative; bottom: 2px; } } #notification { @-webkit-keyframes popup { from { opacity: 0; bottom: 0; } } @keyframes popup { from { opacity: 0; bottom: 0; } } .toast-header { background: none; border-bottom: none; color: inherit; } .toast-body { font-family: Lato, sans-serif; line-height: 1.25rem; button { font-size: 90%; min-width: 4rem; } } &.toast { &.show { display: block; min-width: 20rem; border-radius: 0.5rem; -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); background-color: rgba(255, 255, 255, 0.5); color: #1b1b1eba; position: fixed; left: 50%; bottom: 20%; transform: translateX(-50%); -webkit-animation: popup 0.8s; animation: popup 0.8s; } } } /* Responsive Design: {sidebar, content, panel} >= 1200px screen width {sidebar, content} >= 850px screen width {content} <= 849px screen width */ @media all and (max-width: 576px) { #main-wrapper { min-height: calc(100vh - #{$footer-height-mobile}); } #core-wrapper { min-height: calc( 100vh - #{$topbar-height} - #{$footer-height-mobile} ) !important; .post-content { > blockquote[class^='prompt-'] { @include ml-mr(-1.25rem); border-radius: 0; max-width: none; } } } #avatar { width: 5rem; height: 5rem; } } @media all and (max-width: 768px) { %full-width { max-width: 100%; } #topbar { @extend %full-width; } #main { @extend %full-width; @include pl-pr(0); } } /* hide sidebar and panel */ @media all and (max-width: 849px) { @mixin slide($append: null) { $basic: transform 0.4s ease; @if $append { transition: $basic, $append; } @else { transition: $basic; } } html, body { overflow-x: hidden; } footer { @include slide; height: $footer-height-mobile; div.d-flex { padding: 1.5rem 0; line-height: 1.65; flex-wrap: wrap; } } [#{$sidebar-display}] { #sidebar { transform: translateX(0); } #main-wrapper, footer { transform: translateX(#{$sidebar-width}); } #back-to-top { visibility: hidden; } } #sidebar { @include slide; transform: translateX(-#{$sidebar-width}); /* hide */ -webkit-transform: translateX(-#{$sidebar-width}); } #main-wrapper { @include slide; } #topbar, #main, footer > .container { max-width: 100%; } #search-result-wrapper { width: 100%; } #breadcrumb, #search-wrapper { display: none; } #topbar-wrapper { @include slide(top 0.2s ease); left: 0; } #core-wrapper, #panel-wrapper { margin-top: 0; } #topbar-title, #sidebar-trigger, #search-trigger { display: block; } #search-result-wrapper .post-content { letter-spacing: 0; } #tags { justify-content: center !important; } h1.dynamic-title { display: none; ~ .post-content { margin-top: 2.5rem; } } } /* max-width: 849px */ /* Phone & Pad */ @media all and (min-width: 577px) and (max-width: 1199px) { footer .d-flex > div { width: 312px; } } /* Sidebar is visible */ @media all and (min-width: 850px) { /* Solved jumping scrollbar */ html { overflow-y: scroll; } #main-wrapper, footer { margin-left: $sidebar-width; } #main-wrapper { min-height: calc(100vh - $footer-height); } footer { p { width: auto; &:last-child { &::before { content: '-'; margin: 0 0.75rem; opacity: 0.8; } } } } #sidebar { .profile-wrapper { margin-top: 3rem; } } #search-hints { display: none; } #search-wrapper { max-width: $search-max-width; } #search-result-wrapper { max-width: $main-content-max-width; justify-content: start !important; } .post { h1 { margin-top: 3rem; } } div.post-content .table-wrapper > table { min-width: 70%; } /* button 'back-to-Top' position */ #back-to-top { bottom: 5.5rem; right: 5%; } #topbar-title { text-align: left; } } /* Pad horizontal */ @media all and (min-width: 992px) and (max-width: 1199px) { #main .col-lg-11 { flex: 0 0 96%; max-width: 96%; } } /* Compact icons in sidebar & panel hidden */ @media all and (min-width: 850px) and (max-width: 1199px) { #search-results > div { max-width: 700px; } #breadcrumb { width: 65%; overflow: hidden; text-overflow: ellipsis; word-break: keep-all; white-space: nowrap; } } /* panel hidden */ @media all and (max-width: 1199px) { #panel-wrapper { display: none; } #main > div.row { justify-content: center !important; } } /* --- desktop mode, both sidebar and panel are visible --- */ @media all and (min-width: 1200px) { #back-to-top { bottom: 6.5rem; } #search-wrapper { margin-right: 4rem; } #search-input { transition: all 0.3s ease-in-out; } #search-results > div { width: 46%; &:nth-child(odd) { margin-right: 1.5rem; } &:nth-child(even) { margin-left: 1.5rem; } &:last-child:nth-child(odd) { position: relative; right: 24.3%; } } .post-content { font-size: 1.03rem; } footer { div.d-felx { width: 85%; } } } @media all and (min-width: 1400px) { #back-to-top { right: calc((100vw - #{$sidebar-width} - 1140px) / 2 + 3rem); } } @media all and (min-width: 1650px) { $icon-gap: 1rem; #main-wrapper, footer { margin-left: $sidebar-width-large; } #topbar-wrapper { left: $sidebar-width-large; } #search-wrapper { margin-right: calc( #{$main-content-max-width} * 0.25 - #{$search-max-width} - 0.75rem ); } #main, footer > .container { max-width: $main-content-max-width; padding-left: 1.75rem !important; padding-right: 1.75rem !important; } #core-wrapper, #tail-wrapper { padding-right: 4.5rem !important; } #back-to-top { right: calc( (100vw - #{$sidebar-width-large} - #{$main-content-max-width}) / 2 + 2rem ); } #sidebar { width: $sidebar-width-large; $icon-gap: 1rem; // for the bottom icons .profile-wrapper { margin-top: 3.5rem; margin-bottom: 2.5rem; padding-left: 3.5rem; } ul { li.nav-item { @include pl-pr(2.75rem); } } .sidebar-bottom { padding-left: 2.75rem; margin-bottom: 1.75rem; a:not(:last-child) { margin-right: $icon-gap; } .icon-border { @include ml-mr(calc(($icon-gap - $btn-border-width) / 2)); } } } } /* min-width: 1650px */