// importing as scss vars @use 'abstracts' as *; /////////////////////////////////////////////////////////////// // TYPOGRAPHY /////////////////////////////////////////////////////////////// @include font('Montserrat', 'Italic', 'Light', 'Regular', 'SemiBold', 'Bold'); @include font('NunitoSans', 'Italic', 'Light', 'Regular', 'SemiBold', 'Bold'); /////////////////////////////////////////////////////////////// // RESET RULES /////////////////////////////////////////////////////////////// html { scroll-behavior: smooth; font-size: 62.5%; @include bp(bp-350) { font-size: 55%; } } *, *::before, *::after { margin: 0; padding: 0; box-sizing: inherit; text-rendering: optimizeLegibility; // transition: all 0.2s ease; } body { box-sizing: border-box; font-size: 1.6rem; background-color: var(--clr-base-bg); } //////////////////////////////////////////////////////////////// // BASE STYLES //////////////////////////////////////////////////////////////// // initally declaring light-mode variables :root { @include misc-css-variables; @include themed-css-variables(light); // dark mode declaration &[theme='dark'] { @include themed-css-variables(dark); } } .page { min-height: 100vh; display: grid; grid-template-rows: min-content 1fr min-content; background-color: var(--clr-base-bg); color: var(--clr-base-text); font-family: var(--ff-base); } //////////////////////////////////////////////////////////////// // VANITY //////////////////////////////////////////////////////////////// // selection ::selection { background-color: var(--clr-selection-bg); color: var(--clr-selection-text); } // scrollbar @supports (scrollbar-width: auto) { * { scrollbar-width: auto; scrollbar-color: var(--clr-scrollbar-thumb) var(--clr-scrollbar-track); // scrollba } } @supports not (scrollbar-width: auto) { ::-webkit-scrollbar { width: 1rem; // for vertical scrollbars height: 1rem; // horizontal scrollbars border-radius: 100rem; } ::-webkit-scrollbar-track { background-color: var(--clr-scrollbar-track); // border-radius: 100vw; // margin-block: 5px; } ::-webkit-scrollbar-thumb { background-color: var(--clr-scrollbar-thumb); border-radius: 100vw; // margin: 2px; border: 2px solid transparent; background-clip: padding-box; &:hover { background-color: var(--clr-scrollbar-thumb-hover); } } } //////////////////////////////////////////////////////////////// // THEME SWITCHER //////////////////////////////////////////////////////////////// .theme-switcher { &__input { position: absolute; clip-path: circle(1px); z-index: -1; } &__label { display: grid; place-content: center; border-radius: 50%; } &__icon { border-radius: 50%; cursor: pointer; height: var(--fs-200); width: var(--fs-200); fill: var(--clr-theme-switcher-unchecked); transform: rotateZ(var(--theme-swticher-rotation-unchecked)); transition: all 0.2s ease; @include bp(bp-400) { height: var(--fs-160); width: var(--fs-160); } } // new selector, same as writing: // &__label:hover, &__input:focus ~ .page &__label :is(&__label:hover, &__input:focus ~ .page &__label) { box-shadow: 0px 0px 1rem currentColor, 0px 0px 1.5rem currentColor; } &__input:checked ~ .page &__icon { fill: var(--clr-theme-switcher-checked); transform: rotateZ(var(--theme-swticher-rotation-checked)); } } // if js is disabled, applying vars from on .page instead of on body. // progressive degradement i guess :root:not([js='enabled']) { // when user checks the theme-switcher, replacing root styles(light) with dark styles(on the .page) .theme-switcher__input:checked ~ .page { @include themed-css-variables(dark); } // if the user prefers the dark scheme, then using dark styles on root @media (prefers-color-scheme: dark) { @include themed-css-variables(dark); // and when user checks the theme-switcher, applying light styles on .page .theme-switcher { &__input:checked ~ .page { @include themed-css-variables(light); } &__input:checked ~ .page &__icon { fill: var(--clr-theme-switcher-checked); transform: rotateZ(var(--theme-swticher-rotation-checked)); } } } }