assets/css/year-in-review.scss (509 lines of code) (raw):

/* Styles specific to Year in Review page */ :root { /* General */ --YIR-page-width: 1200px; --content-width: 520px; /* Timeline nav */ --timeline-active-text-width: 400px; /* YIR-nav-body width + longer white line width + active li padding + YIR-nav-wrapper padding + */ --timeline-total-width: calc(var(--timeline-active-text-width) + 35px + var(--feather-grid-medium) + 2 * var(--feather-grid-large)); --nav-body-text-height: 80px; --timeline-element-border-height: 100vh; /* Special font sizes */ --font-size-YIR-heading-text: 6rem; --line-height-YIR-heading-text: 5.6rem; --line-height-subheading: 1.9rem; --font-size-metric-count: 4.2rem; --line-height-metric-count: 4.8rem; --font-size-location: 2.5rem; --line-height-location: 2.7rem; } html { scroll-padding-top: 0rem; @media (prefers-reduced-motion: no-preference) { --scroll-behavior: smooth; scroll-behavior: smooth; } } a { color: white; } .YIR-wrapper { color: white; min-height: 100vh; position: relative; } .YIR-container { max-width: var(--YIR-page-width); margin: 0 auto; } .YIR-container-section { max-width: var(--YIR-page-width); margin: 0 auto; min-height: inherit; display: flex; flex-direction: column; justify-content: center; align-items: flex-end; padding: var(--feather-grid-large) 0; } p { margin: 0; } /* All content */ .inline-heading, .YIR-header, table, .locations, .metric-wrapper, .YIR-tweet-wrapper { width: var(--content-width); } .inline-heading { padding-bottom: var(--feather-grid-mega); } .inline-heading h1 { font-size: var(--font-size-xxjumbo); line-height: var(--line-height-xxjumbo); padding-bottom: var(--feather-grid-xsmall); } /* Sections */ section { min-height: 100vh; } section#welcome { background: var(--tw-color-blue-medium); } section#top10 { background: var(--tw-color-purple-medium); } section#locations { background: var(--tw-color-green-medium); } section#heat { background: var(--tw-color-orange-medium); } section#light { background: var(--tw-color-yellow-deep); } section#love { background: var(--tw-color-red-medium); } section#follow { background: var(--tw-color-blue-medium); } /* Top navigation */ nav { background-color: transparent; } .nav-title a { text-decoration: none; font-weight: var(--feather-font-weight-bold); } a.YIRnav-home-link { margin-left: var(--feather-grid-mega); margin-right: var(--feather-grid-micro); color: white; } a.YIRnav-home-link:hover { opacity: 0.6; } a.YIRnav-YIR-link { color: white; opacity: 0.6; font-weight: var(--feather-font-weight-bold); } a.YIRnav-YIR-link:hover { opacity: 1; } #nav-menu { display: none; } /* Timeline navigation */ /* Code from https://codepen.io/nailaahmad/pen/MyZXVE */ .YIR-nav-wrapper { position: fixed; height: 100%; padding: var(--feather-grid-large); display: flex; flex-flow: column nowrap; justify-content: center; } .nav { margin: 0; margin-left: var(--feather-grid-large); } .YIR-nav-title { font-size: var(--feather-font-size-jumbo); font-weight: var(--feather-font-weight-bold); @media (prefers-reduced-motion: no-preference) { transition: all 0.15s ease-out; } } .nav .section-description { width: var(--timeline-active-text-width); height: 0; overflow: hidden; opacity: 0; @media (prefers-reduced-motion: no-preference) { transition: height 0.3s ease-out, opacity 0.2s ease-out; } } .nav li { list-style: none; position: relative; margin-bottom: var(--feather-grid-medium); @media (prefers-reduced-motion: no-preference) { transition: all 0.3s ease-out; } } /* Shorter white lines */ .nav li:after { content: ''; display: block; border-left: 2px solid white; border-top: 2px solid white; position: absolute; height: var(--timeline-element-border-height); width: 20px; left: -30px; top: 12px; } .nav li a { display: block; padding: 0; color: white; @media (prefers-reduced-motion: no-preference) { transition: all 0.15s ease-out; } } .nav li a:hover { background-color: transparent; @media (prefers-reduced-motion: no-preference) { padding-left: 1em; } } .nav li a:focus { background-color: transparent; } /* Timeline navigation - active nav title */ .nav li.active { pointer-events: none; padding-left: var(--feather-grid-medium); } /* Longer white lines */ .nav li.active:after { height: var(--timeline-element-border-height); width: 35px; top: 35px; } .nav li.active .YIR-nav-title { font-size: var(--font-size-xxjumbo); line-height: var(--line-height-xxjumbo); } .nav li.active .section-description { margin: 0; margin-top: var(--feather-grid-xsmall); height: var(--nav-body-text-height); opacity: 1; overflow: visible; } /* Header */ h1.YIR-subheading { font-size: var(--font-size-mini-jumbo); line-height: var(--line-height-subheading); } h1#date-range { color: var( --tw-color-blue-faded); } h1#YIR-heading-text { font-size: var(--font-size-YIR-heading-text); line-height: var(--line-height-YIR-heading-text); padding: var(--feather-grid-large) 0; } h1#YIR-heading-text, .YIR-subheading { @media (prefers-reduced-motion: no-preference) { animation: fadein 1s; } } #YIR-header-inline-heading { padding: 0; } #YIR-header-inline-heading p { padding: 0; padding-top: var(--feather-grid-large); } /* Hardcoding height so header content doesn't move when text is typed in */ /* 3 lines of text */ h1#type { height: calc(3 * var(--line-height-subheading)); } /* Top 10 repos*/ table { font-weight: var(--feather-font-weight-bold); font-size: var(--font-size-xjumbo); } th { color: var(--tw-color-purple-faded); font-size: var(--feather-font-size-jumbo); padding-bottom: var(--feather-grid-xxsmall); text-align: right; } tr.content { height: var(--line-height-xjumbo); line-height: 0.9em; } td.num { color: var(--tw-color-purple-faded); text-align: right; padding-right: var(--feather-grid-xsmall); } td.commit-value { text-align: right; } td.repo a:link, td.repo a:visited { color: white; text-decoration: none; } td.repo a:hover, td.repo a:active { color: var(--tw-color-purple-faded); } /* Locations */ .locations { display: flex; flex-direction: column; font-size: var(--font-size-location); line-height: var(--line-height-location); font-weight: var(--feather-font-weight-bold); } .location-item { display: flex; justify-content: flex-start; padding: var(--feather-grid-micro) 0; } .location-item img { display: inline-block; height: var(--line-height-location); padding-right: var(--feather-grid-medium); } p.locations-disclaimer { font-size: var(--feather-font-size-large); font-weight: var(--feather-font-weight-normal); line-height: var(--feather-line-height-large); margin: 0; padding-top: var(--feather-grid-xxsmall); } /* Metrics */ div.metric { margin-top: var(--feather-grid-large); } span.metric-count { font-weight: var(--feather-font-weight-bold); font-size: var(--font-size-metric-count); line-height: var(--line-height-metric-count); } span.metric-name { font-weight: var(--feather-font-weight-bold); font-size: var(--font-size-mini-jumbo); line-height: var(--line-height-mini-jumbo); padding-left: var(--feather-grid-xxsmall); } /* Metrics SVGs */ .fire-st0 { fill: none; stroke: white; stroke-width: 1; stroke-miterlimit: 10; opacity: 1; stroke-dasharray: 155; stroke-dashoffset: 155; } .fire-st1 { fill: none; stroke: white; stroke-width: 1; stroke-miterlimit: 10; opacity: 1; stroke-dasharray: 85; stroke-dashoffset: 85; } .sun-st0 { fill: none; stroke: white; stroke-width: 1; stroke-miterlimit: 10; opacity: 1; stroke-dasharray: 65; stroke-dashoffset: 65; } .sun-st1, .sun-st2, .sun-st3, .sun-st4, .sun-st5, .sun-st6, .sun-st7, .sun-st8 { fill: none; stroke: white; stroke-width: 1; stroke-miterlimit: 10; opacity: 1; stroke-dasharray: 20; stroke-dashoffset: 20; } .heart-st0 { fill: none; stroke: white; stroke-width: 1; stroke-miterlimit: 10; opacity: 1; stroke-dasharray: 105; stroke-dashoffset: 105; } .heart-st1 { fill: none; stroke: white; stroke-width: 1; stroke-miterlimit: 10; opacity: 1; stroke-dasharray: 75; stroke-dashoffset: 75; } .in-view path { animation: stroke 0s forwards; @media (prefers-reduced-motion: no-preference) { animation: stroke 2s ease-in-out forwards; } } @keyframes stroke { to { fill: none; stroke-dashoffset: 0; } } /* Media queries */ /* Less than YIR-page-width + feather-grid-large */ @media (max-width: 1224px) { .YIR-container-section { margin: 0 var(--feather-grid-large); } } /* Hardcoded breakpoints for when window height is too small and causes content to overflow */ /* Header - when content overflows section */ @media (max-height: 544px) and (min-width: 1080px) { section#welcome { height: auto; padding: calc(var(--feather-grid-mega) * 1.5) 0; } } /* Top 10 repos - when content overflows section */ @media (max-height: 652px) and (min-width: 1080px) { section#top10 { height: auto; padding: calc(var(--feather-grid-mega) * 1.5) 0; } } /* Locations - when content overflows section */ @media (max-height: 772px) and (min-width: 1080px) { section#locations { height: auto; padding: calc(var(--feather-grid-mega) * 1.5) 0; } } /* Metrics - when content overflows section */ @media (max-height: 658px) and (min-width: 1080px) { section#heat, section#light, section#love { height: auto; padding: calc(var(--feather-grid-mega) * 1.5) 0; } } /* Tweet - when content overflows section */ @media (max-height: 721px) and (min-width: 1080px) { section#follow { height: auto; padding: calc(var(--feather-grid-mega) * 1.5) 0; } } /* Mobile - remove timeline, add mobile headings */ @media (max-width: 1080px) { .YIR-container { display: none; } .inline-heading { display: block; } section { height: auto; padding: calc(var(--feather-grid-mega) * 1.5) 0; } .YIR-container-section { flex-direction: column; align-items: center; } .YIR-header { padding-top: var(--feather-grid-mega); /* FIX - DELETE if i make top nav stick to top */ } html { scroll-padding-top: 2.5rem; } nav { background-color: var(--tw-color-blue-medium); } // Copied from main.css because mobile navigation is activated at a wider width on this page html:not(.no-js) #menu-toggle { display: block; } #nav-menu { display: none; height: 100vh; width: 100%; margin: 0; margin-top: calc(var(--feather-grid-mega) * 2); @media (prefers-reduced-motion: no-preference) { animation: fadein 1.5s; } li { display: block; font-weight: var(--feather-font-weight-bold); font-size: var(--feather-font-size-jumbo); line-height: var(--feather-line-height-jumbo); padding: var(--feather-grid-medium) 0; margin: 0; &:not(:last-child) { border-bottom: 1px solid var(--tw-color-blue-faded); } } } #nav-menu.active { display: block; } } /* Less than content-width + 2 * feather-grid-large */ @media (max-width: 568px) { .inline-heading, .YIR-header, table, .locations, .metric-wrapper, .YIR-tweet-wrapper { width: 100%; } section { padding: var(--feather-grid-mega) 0; } /* Decrease font sizes */ .inline-heading h1 { font-size: var(--font-size-mini-jumbo); line-height: var(--line-height-mini-jumbo); } /* Header */ h1.YIR-subheading { font-size: var(--feather-font-size-jumbo); line-height: var(--feather-line-height-jumbo); } h1#YIR-heading-text { font-size: var(--font-size-xxjumbo); line-height: calc(var(--line-height-xxjumbo) - 0.5rem); } h1#type { height: calc(2 * var(--feather-line-height-jumbo)); } /* Top 10 repos */ table { font-size: var(--feather-font-size-jumbo); } th { font-size: var(--feather-font-size-large); padding-bottom: 0; } tr.content { height: calc(var(--feather-line-height-jumbo) - 0.2rem); } td.num { padding-right: var(--feather-grid-xxsmall); } /* Locations */ .locations { font-size: var(--feather-font-size-jumbo); line-height: var(--feather-line-height-jumbo); } .location-item { text-transform: capitalize; padding: 0; } .location-item img { height: var(--feather-line-height-jumbo); padding-right: var(--feather-grid-small); } /* Metrics */ .metric-wrapper svg { padding-top: var(--feather-grid-xxsmall); } span.metric-count { font-size: var(--font-size-xxjumbo); line-height: var(--line-height-xxjumbo); } span.metric-name { font-size: var(--feather-font-size-jumbo); line-height: var(--feather-line-height-jumbo); padding-left: var(--feather-grid-micro); } } /* Adjusting height of typed text in subheading */ @media (max-width: 520px) { h1#type { height: calc(3 * var(--feather-line-height-jumbo)); } } @media (max-width: 384px) { h1#type { height: calc(4 * var(--feather-line-height-jumbo)); } }