/*!
 * "Joem Elias Sanez CV and Work Samples (Developed For The Web)"
 * designed and built by Joem Elias Sanez
 * as part of Milestone Project One
 * with Code Institute
 * on User-Centric Front-End Development
 * first released on x/x/2020
 * contact author via index.html
 * fork the repo: (https://github.com/israelias)
 */

/*
* Prefixed by https://autoprefixer.github.io
* PostCSS: v7.0.29,
* Autoprefixer: v9.7.6
* Browsers: last 4 version
*/

@import url("https://use.typekit.net/qyv7gbn.css");

/* ==========================================================================
   Core configs
   ========================================================================== */

:root {

    /* Signature colors */

    --matte: #D5D6D1;
    --obsidian: #2E2C2E;
    --raisin: #3E223D;
    --slate: #929181;
    --grey: #B7B1A8;
    --ruby: #89413D;
    --red: #B84A30;
    --denim: #37455C;
    --blue: #1D49B8;
    --canary: #D27511;
    --yellow: #B8A922;
    --moss: #213128;
    --green: #234D3E;
    --white: #FAFAFA;
    --pearl: #F4F4F4;
    --powder: #F5F4F2;
    --paper: #F2F1EF;
    --deep-1: #4f4f4f;
    --deep-2: #707070;
    --deep-3: #95989A;
    --deep-4: #B0b0b0;

    /* External link colors */

    --link-linkedin: #EAB1A5;
    --link-github: #97A792;
    --link-dev: #a48297;
    --link-folio: #EEC034;
    --cta-download: #83B8DD;
    --cta-email: #A0B6CC;
    --cta-call: #A0B6CC;

    /* Signature radii */

    --radius-1: .75rem;
    --radius-2: .6rem;
    --radius-3: .5rem;
    --radius-4: .4rem;
    --radius-5: .3rem;

    /* Signature gradients */

    --gradient-1: linear-gradient(45deg, rgba(255, 255, 255, 0.2), rgba(0, 0, 0, 0.1));
    --gradient-2: linear-gradient(-45deg, rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.2));
    --gradient-3: linear-gradient(145deg, rgba(100, 100, 100, 0.1), rgba(255, 255, 255, 0.2));
    --gradient-4: linear-gradient(180deg, rgba(250, 250, 250, .7), rgba(0, 0, 0, .1));

    /* Anim/Trans Timing function variables */

    /*!
     * 'glide' is a refined variation of 'ease-in-out':
     * a smooth slow start with an equally smooth slow end https://cubic-bezier.com/#.45,.02,.51,.95
     */
    --glide: cubic-bezier(0.455, 0.03, 0.515, 0.955);

    /*!
     * 'breeze' is an 'ease' with a heightened overbound:
     * a rapid start with a slow arrival and discreet bounce https://cubic-bezier.com/#.23,-0.09,.18,1.25
     */
    --breeze: cubic-bezier(.23, -0.09, .18, 1.25);

    /*!
     * 'zip' is a 'linear' progression with a surprise bounce:
     * a consistent speed with an interrupted end https://cubic-bezier.com/#1,1.4,.41,1.01
     */
    --zip: cubic-bezier(1, 1.4, 0.41, 1.01);

    /*!
     * 'swoop' is an 'ease-in-out' with a late and steep progression:
     * an extra slow start with a rapid progression before a relaxed end https://cubic-bezier.com/#1,0,.41,1.01
     */
    --swoop: cubic-bezier(1, 0, 0.41, 1.01);

    /* Anim/Trans Duration variables */

    --passing: 1s;
    --dashing: 0.75s;
    --bustling: 0.65s;
    --fleeting: 0.55s;
    --flashing: 0.3s;

    /* Anim/Trans Time Delay variables */

    --late: 0.36s;
    --short: 0.2s;
    --prompt: 0.05s;
    --early: 0s;

    /* Desired width variable (out of 12) */
    --of-twelve: 11;

    /* Resulting width property as percentage */
    --width: calc(var(--of-twelve) / 12 * 100%);

    /* Remaining balance of desired width as percentage */
    --offset: calc((12 - var(--of-twelve)) / 12 * 100%);

    /* Responsive margin property as a function of half the balance of the desired width */
    --margin: calc(var(--offset) / 2);

    /* X dimension tolerance helper property */
    --gutter-x: 1.5rem;

    /* Padding property as half of X tolerance */
    --padding: calc(var(--gutter-x) / 2);

    /* Apply margins for typical .row in a fluid .container to :root */
    display: flex;
    justify-content: center;
}

/* Achieve a centered 'col-*' without '.container.row.col' wrapper divs */
/* If --of-twelve: 11; then --width: 91.66667% is given to children of :root (in this case, the <body>) */

:root > * {
    width: var(--width);
    margin-left: var(--margin);
    margin-right: var(--margin);
    background-color: var(--paper);
}

/* Fill 100% of width on mobile screens */

@media (max-width: 575.98px) {
    :root {
        --of-twelve: 12;
        --gutter-x: 0;
    }
}

.row {
    margin-left: 0;
    margin-right: 0;
}

/* ==========================================================================
   Type configs
   ========================================================================== */

body {
    text-rendering: optimizeLegibility;
    color: var(--deep-1);
}

p, small, .footer-item {
    font-family: attribute-text, sans-serif;
    font-weight: 400;
    font-style: normal;
    -webkit-font-feature-settings: 'c2sc';
            font-feature-settings: 'c2sc';

    text-shadow: var(--white) 0 .3px 0, #D4D6D6 0 -.3px 0;
    -webkit-font-smoothing: antialiased;
}

p {
    color: #262626;
}

small {
    color: var(--deep-2);
}

p strong {
    font-weight: 500;
}

/* Text content keywords */

b {
    font-weight: 400;
}

a {
    font-weight: 400;
    color: slategray;
}

a:hover {
    text-decoration: underline;
}

h1,
h2,
h3,
h4,
h5,
h6 {
    text-shadow: #fff 0 1px 0, #D7D7D6 0 -1px 0;
    -webkit-font-smoothing: antialiased;
}

p,
i,
ion-icon {
    text-shadow: #fff 0 1px 0;
    -webkit-font-smoothing: antialiased;
}

i,
ion-icon {
    color: #B6B6B6;
}

ion-icon {
    font-size: 1.5rem;
}

@media (min-width: 576px) {
    ion-icon {
        font-size: 1.25rem;
    }
}

/* ==========================================================================
   Headings
   ========================================================================== */

/* Landing headings. See `.ribboneto-trial` class */

h1,
h2 {
    font-family: monotalic, sans-serif;
}

/* Header button headings */

h3 {
    font-family: attribute-mono, sans-serif;
}

/* Section lead heading */

h4 {
    font-family: din-2014, sans-serif;
    font-weight: 400;
    font-style: normal;
    font-size: calc(1.0625rem + 1.5vw);
    line-height: calc(1.6875rem + 1vw);
    color: var(--white);
    text-shadow: #fff 0 .5px 0, #D7D7D6 0 -.5px 0;
    -webkit-font-smoothing: antialiased;
}

/* Section sub headings */

h5 {
    font-family: attribute-mono, sans-serif;
    font-weight: 400;
    font-style: normal;
    font-size: 1.125rem;
    line-height: 1.6875rem;
    letter-spacing: .07rem;
    text-transform: uppercase;
}

/* Media content headings */

h6 {
    font-family: attribute-mono, sans-serif;
    font-weight: 400;
    font-style: normal;
}

/* ==========================================================================
   Layout configs
   ========================================================================== */

/* Note:
 *
 * This is how the stack contracts from its center axis as opposed to "flexing"
 * from the top or the bottom of a flex container. See #resumeStack transitions
 * scope.
 */

.root-body > * {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
}

.body-main {
    --blur-xs: 0px;
    --blur-sm: 0px;
    --blur-md: 0px;

    position: fixed;
    overflow: hidden;

    top: 0;
    right: 0;
    bottom: 0;
    left: 0;

    padding-left: var(--margin);
    padding-right: var(--margin);

    margin: 0 auto;

    padding-top: 3.375rem;
    padding-bottom: 3.375rem;
}

@media (max-width: 767.98px) {
    .body-main {
        position: static;
        -webkit-box-flex: 1;
            -ms-flex: 1 0 auto;
                flex: 1 0 auto;
        min-height: calc(100vh - 7.75rem);
    }
}

.body-main > * {
    padding-right: calc(var(--gutter-x) / 2);
    padding-left: calc(var(--gutter-x) / 2);
}

/* ==========================================================================
   Toggle-all checkbox button
   ========================================================================== */

/**
 * The global switch that toggles 'expand everything' mode.
 *
 * This features the ability to expand all that is not currently
 * shown/expanded, rendering index.html into a single-page static site with
 * seven discrete sections.
 *
 * Controlled by a fixed-position checkbox input element.
 * The checkbox is placed outside of the body header in order to elicit
 * behavior to and from immediate sibling elements via ':checked' selector.
 *
 * The input element is positioned for screen-reader accessibility.
 * The label element contains styles to indicate the toggle states.
 *
 * Element 'input[type="checkbox"]' is assigned the identifier '#toggle-all' and
 * will be selected by this id for code efficiency and clarity.
 *
 * Scopes from here on contain variable adjustments for the #toggle-all states.
 */

input[type="checkbox"] {
    position: absolute!important;
    height: 1px;
    width: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(1px 1px 1px 1px);
    clip: rect(1px,1px,1px,1px);
    white-space: nowrap;
    border: 0;
}

/* Position and style the label for the checkbox */

input[type="checkbox"],
[for="toggle-all"] {
    position: fixed;
    top: 1rem;
    left: 49%;
    right: 49%;
    z-index: 100;

    cursor: pointer;
}

@media (max-width: 575.98px) {
    input[type="checkbox"],
    [for="toggle-all"] {
        top: 1.1rem;
    }
}

/* ==========================================================================
   Article header button @prefixed
   ========================================================================== */

/**
 * Article header with button targeting article section.
 *
 * This styles the header button dedicated to every collapsed section under
 * data-parent="resumeStack".
 * Each header is identified with an id that is the aria-labelled-by of its
 * corresponding section.
 * Each header id is also used to customize global and local
 * aria-expanded="true" or aria-expanded="false" toggle states.
 *
 * Each header must only contain one h3 element with the '.header-title' class.
 *
 *  Example HTML:
 *
 * <header id="control-one">
 *     <h3 class="header-title">
 *         <button data-toggle="collapse" data-target="#target-one" aria-expanded="false">
 *             <span class="header-content">
 *                 <span class="header-name">
 *                     INTRODUCTION
 *                 </span>
 *                 <span class="header-text">
 *                     About and recent activity
 *                 </span>
 *             </span>
 *             <span class="header-icon">
 *                 <ion-icon class="closed"></ion-icon>
 *                 <ion-icon class="open"></ion-icon>
 *             </span>
 *         </button>
 *     </h3>
 * </header>
 */


.article-header {
    position: relative;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;

    width: 100%;
    margin-bottom: 0;
}

/**
 * Header title
 *
 * Must only contain one button control element targeting its corresponding #collapse[Number].
 *
 * 1. Create a flexbox container within which a button control element's contents invariably align
 * 2. Set a fixed height for consistent presentation of headers
 * 3. Configure box model properties
 */

.header-title {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;

    height: 3rem;
    overflow: hidden;

    padding-top: 0.0625rem;
    padding-bottom: 0.125rem;
    margin-bottom: 0;
}

/**
 * Header button
 *
 * Must only contain '.header-content' and '.header-icon' children.
 *
 * 1. Create a flexbox container within which button text and button icons are positioned using flex properties
 * 2. Reset <button> element styles given by browser and/or inherited from mdb.min.css
 * 3. Set the responsive parent font-size for '.header-content' and '.header-icon'
 * 4. Adjust presentation for sm and xl screens
 */

.header-title button {
    display: flex;
    justify-content: space-between;

    width: 100%;
    border: none;

    background-color: transparent;

    font-size: calc(1rem + .3vw);
    line-height: 1.25rem;
}

@media (min-width: 1200px) {
    .header-title button {
        font-size: 1.5rem;
    }
}

@media (max-width: 575.98px) {
    .header-title button {
        padding: 1rem 1.25rem;
    }
}

/**
 * Header content
 *
 * Must only contain '.header-name' and '.header-text' children.
 *
 * 1. Create a flexbox container within which text are transformed into flex items
 * 2. Set box model and presentation
 */

.header-content {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;

    padding-top: .55rem;
    padding-right: .125rem;
    padding-left: .125rem;

    background-color: var(--paper);
}

@media (min-width: 576px) {
    .header-content {
        padding-left: .4rem;
        padding-right: .4rem;
    }
}

/* Main header name */

.header-name {
    position: relative;
    padding-top: .1rem;
    font-weight: 500;
}

/* Supporting header text */

.header-text {
    margin-left: .25rem;

    font-weight: 300;
    text-transform: capitalize;
    text-overflow: ellipsis;

    white-space: nowrap;
}

/* Supporting header text only visible on desktop/lg width. */

@media (max-width: 991.98px) {
    .header-text {
        display: none;
    }
}

/* The forward slash "/" between the name and the supporting text */

.header-text:before {
    display: inline-block;
    margin-left: 0.25rem;

    content: '/';
    font-weight: 400;
}

/**
 * The '.header-content' class wraps the '.header-name' and '.header-text'
 * The '.header-icon' contains the ion-icon components that toggle visibility depending
 * on the current state of the collapsible element tied to the icon's parent button control element.
**/

/* Main header icon container */

.header-icon {
    padding-top: .5rem;
    padding-right: .125rem;
    padding-left: .125rem;
    margin-left: .25rem;

    background-color: var(--paper);
}

@media (min-width: 576px) {
    .header-icon {
        padding-left: .3rem;
        padding-right: .3rem;
    }
}

/* Main header icon styles */

.header-icon ion-icon {
    color: #4f4f4f;
    font-size: 24px;
    --ionicon-stroke-width: 20px;
}

/* ==========================================================================
   Article spread (.col div configs) @prefixed
   ========================================================================== */

/*!
 * Typical section division.
 *
 * These classes control parent columns in each collapsed section.
 * Attached as an additive helper to the bs '.row' class.
 *
 * Example HTML:
 *
 * <section class="collapse">
 *     <div class="spread row">
 *         <div class="outer-body outer-first" ... >
 *             <section class="inner-body left" ... >
 *         <div class="outer-body outer-second" ... >
 *             <section class="inner-body right" ... >
 *     </div>
 * </section>
 */

/**
 * Divs in a .spread
 *
 * 1. Create a flexbox container out of sibling columns within which content is positioned using flex properties
 * 2. Turns <h4> and <section> in first div into flex items
 * 3. Turns <section> in second div into flex itm
 */

.outer-body {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    overflow: hidden;

    padding: .5rem;
    border-radius: .75rem;
    margin-bottom: 3rem;

    -webkit-box-shadow:
            inset -5px -8px var(--blur-md) 0 rgba(255, 255, 255, 0.5),
            inset 5px 8px var(--blur-md) 0 rgba(0, 0, 0, 0.3);

    box-shadow:
            inset -5px -8px var(--blur-md) 0 rgba(255, 255, 255, 0.5),
            inset 5px 8px var(--blur-md) 0 rgba(0, 0, 0, 0.3);
}

/* Set flex behavior of first column (appears first, or left) */

.outer-first {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-flow: row wrap;
            flex-flow: row wrap;

    margin-top: .5rem;
}

@media (min-width: 768px) {
    .outer-first,
    .outer-second {
        margin-top: 1rem;
    }
}

@media (max-width: 575.98px) {
    .outer-body {
        padding: .75rem;
        -webkit-box-shadow: none;
                box-shadow: none;
    }
}

.outer-item {
    position: relative;

    border-radius: .6rem;
    border: none;
}

.outer-item:after {
    position: absolute;
    z-index: 1;
    top: 0;
    right: 0;
    bottom: 0;

    border-radius: .6rem;

    content: "";
    width: 100%;
    height: 100%;

    background: var(--gradient-2);
}

/* Child sub sections @prefixed
   ========================================================================== */

/* Set flex behavior and typical presentation of section.inner-left and section.inner-right */

.inner-body {
    overflow: hidden;
    padding: 1rem 1rem;

    background: var(--gradient-1);

    -webkit-box-shadow:
            0 8px var(--blur-sm) rgba(0, 0, 0, 0.2),
            0 -6px var(--blur-sm) rgba(0, 0, 0, 0.3);
    box-shadow:
            0 8px var(--blur-sm) rgba(0, 0, 0, 0.2),
            0 -6px var(--blur-sm) rgba(0, 0, 0, 0.3);
}

/* Set flex behavior and typical presentation of section.inner-left */

.inner-left {
    -webkit-box-flex: 1;
        -ms-flex: 1 100%;
            flex: 1 100%;

    margin-top: 0.5rem;
    border-radius: var(--radius-5);
}

/* Set flex model for section.inner-left except for introduction section. */

.article-section:not(#target-one) .inner-left {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    -webkit-box-pack: space-evenly;
        -ms-flex-pack: space-evenly;
            justify-content: space-evenly;
}

/* Push the last element down (footer element or cta element) for
 * sections except for the recommendation section */

.article-section:not(#target-six) .inner-left > :last-child {
    margin-top: auto;
}

/* Set flex behavior and typical presentation of section.inner-right */

.inner-body.inner-right {
    -webkit-box-flex: 1;
        -ms-flex: 1 1 auto;
            flex: 1 1 auto;

    border-radius: var(--radius-2);
}

/* ==========================================================================
   Pseudo element transition styles
   ========================================================================== */

/**
 * Pseudo elements are positioned to the left and right margins of the
 * following elements to achieve the effect of containers sliding on
 * vertical rails during concurrent '.show' and '.collapse' events
 *
 * 1. <main> : outer-most static rail
 * 2. <article> : static rail
 * 3. first <section> (and its .collapse class variety) : inner-most top rail
 * 4. first child of the first <section> (.spread class) : inner-most bottom rail
 *
 * Note (current): if :root{--of-twelve: 11;}
 * var(--width) == 91.66%
 * var(--margin) == 4.16%
 * calc(var(--margin) * -1) == -4.16%
 * calc(var(--margin) / 2 * -1) == -2.08%
 */

article {
    --outlines: var(--raisin);
}

/* Set sections in both static and transition states to show overflow at left/right (offset to --margin) */
/* with a top offset of the height of its preceding header */
/* and a bottom inset of the height of its following header */

section.show,
section.collapse,
section.collapsing {
    border-radius: var(--radius-1);
    -webkit-clip-path: inset(-3rem calc(var(--margin) * -1) 1.36rem calc(var(--margin) * -1));
            clip-path: inset(-3rem calc(var(--margin) * -1) 1.36rem calc(var(--margin) * -1));
}

.header-title {
    -webkit-clip-path: inset(-1.5rem calc(var(--margin) * -1) 0 calc(var(--margin) * -1));
            clip-path: inset(-1.5rem calc(var(--margin) * -1) 0 calc(var(--margin) * -1));
}

article:before,
article:after,
section.collapse:before,
section.collapse:after,
section.show:before,
section.show:after,
section.collapsing:before,
section.collapsing:after,
.spread:before,
.spread:after,
article > header:before,
article > header:after,
.header-title:after,
section.inner-right:after {
    position: absolute;
    display: block;
    content: "";
}

/* Pseudo verticals
   ========================================================================== */

/* Offset :before pseudo elements to  the center of the offset --margin property  */
/* if --of-twelve: 11; then the following left: value is -2.08%  */

article:before {
    left: calc(var(--margin) / 2 * -1 + .08rem);
    border-right: 1px solid var(--outlines);
}

@media (max-width: 575.98px) {
    article:before {
        left: calc(var(--margin) / 2 * -1 + .425rem);
    }
}

/* Position :after pseudo elements at the center of the offset --margin property */
/* if --of-twelve: 11; then the following right: value is -2.08%  */

article:after {
    right: calc(var(--margin) / 2 * -1 + .08rem);
    border-left: 1px solid var(--outlines);
}

@media (max-width: 575.98px) {
    article:after {
        right: calc(var(--margin) / 2 * -1 + .425rem);
    }
}

/* Give static outer rail pseudo elements height of 100%  */

article:before,
article:after {
    top: 0;
    height: calc(100% - 1.36rem);

    z-index: -1;
    width: .3rem;
}

/* Give inner-most top and bottom rail pseudo elements a consistent width and a variable height  */
/* Set background color to the html body color */
/* Z depth of 10 to be at the foreground of the body */

/* Note: the .collapse.collapsing.show. variety are necessary for continuity during the BS.transitioning event */

section.collapse:before,
section.collapse:after,
section.show:before,
section.show:after,
section.collapsing:before,
section.collapsing:after,
.spread:before,
.spread:after {
    z-index: 10;
    -ms-flex-item-align: center;
        -ms-grid-row-align: center;
            align-self: center;

    height: 10vh;
    width: .5rem;
}

/* Position top left and top right pseudo-rails relative to section elements */

section.show:before,
section.collapsing:before,
section.collapse:before,
section.show:after,
section.collapsing:after,
section.collapse:after {
    top: 1.6rem;
}

/* Position bottom left and bottom right pseudo-rails relative to .spread divs */

.spread:before,
.spread:after {
    bottom: 1.5rem;
}

/* Apply left-centric styling to top left and bottom left pseudo-rails */

section.collapse:before,
section.show:before,
section.collapsing:before,
.spread:before {
    left: calc(var(--margin) / 2 * -1 + .3rem);
    border-left: 2px solid var(--outlines);
}

/* Style top left pseudo-rail */

section.collapse:before,
section.show:before,
section.collapsing:before {
    border-top-left-radius: .75rem;
}

/* Style bottom left pseudo-rail */

.spread:before {
    border-bottom-left-radius: .75rem;
}

@media (max-width: 575.98px) {
    section.collapse:before,
    section.show:before,
    section.collapsing:before,
    .spread:before {
        left: calc(var(--margin) / 2 * -1 + .6rem);
    }
}

/* Apply right-centric styling to top right and bottom right pseudo-rails */

section.collapse:after,
section.show:after,
section.collapsing:after,
.spread:after {
    right: calc(var(--margin) / 2 * -1 + .3rem);
    border-right: 2px solid var(--outlines);
}

/* Style top right pseudo-rail */

section.collapse:after,
section.show:after,
section.collapsing:after {
    border-top-right-radius: .75rem;
}

/* Style bottom right pseudo-rail */

.spread:after {
    border-bottom-right-radius: .75rem;
}

@media (max-width: 575.98px) {
    section.collapse:after,
    section.show:after,
    section.collapsing:after,
    .spread:after {
        right: calc(var(--margin) / 2 * -1 + .6rem);
    }
}

/* Hide inherited pseudos at landing banner section for small screens */

@media (max-width: 575.98px) {
    #target-zero:before,
    #target-zero:after {
        display: none;
    }
}

/*!
 * Horizontal pseudo elements are applied to individual header elements
 * to simulate connection to the vertical pseudo-rails
 *
 * 1. <header> : pseudo left/right to hide rails beyond
 * 2. section.inner-right : pseudo bottom horizontal
 * 3. .header-title : pseudo top horizontal
 */

/* Pseudo concealer
   ========================================================================== */

/* Position top-most header pseudo-concealer elements that 'cover' pseudo-rails beyond */

article > header:before,
article > header:after {
    top: -1.36rem;
    z-index: 1;

    -ms-flex-item-align: center;
        -ms-grid-row-align: center;
            align-self: center;

    width: .875rem;
    height: 2.875rem;

    background: var(--paper);
}

/* Style left pseudo-concealer */

article > header:before {
    border-bottom-right-radius: .5rem;
    border-top-right-radius: .5rem;
}

/* Position left pseudo-concealer */

article > header:before {
    left: calc(var(--margin) * -1);
}

@media (min-width: 992px) {
    article > header:before {
        left: calc(var(--margin) * -1 + 1vw);
    }

    /* Adjust positioning for .body-nav.show event. */

    .body-nav.show ~ .body-main article > header:before {
        left: calc(var(--margin) * -1);
    }
}

@media (max-width: 575.98px) {
    article > header:before {
        left: calc(var(--margin) / 2 * -1);
        height: 2.968rem;
    }
}

/* Style right pseudo-concealer */

article > header:after {
    border-bottom-left-radius: .5rem;
    border-top-left-radius: .5rem;
}

/* Position general right pseudo-concealer */

article > header:after {
    right: calc(var(--margin) * -1);
}

@media (min-width: 992px) {
    article > header:after {
        right: calc(var(--margin) * -1 + 1vw);
    }

    /* Adjust positioning for .body-nav.show event. */

    .body-nav.show ~ .body-main article > header:after {
        right: calc(var(--margin) * -1);
    }
}

@media (max-width: 575.98px) {
    article > header:after {
        right: calc(var(--margin) / 2 * -1);
        height: 2.968rem;
    }
}

/* Pseudo horizontals
   ========================================================================== */

/* Style top and bottom pseudo-horizontals  */

section.inner-right:after,
.header-title:after {
    height: .5rem;
}

/* Position bottom pseudo-horizontal */

section.inner-right:after {
    z-index: 5;
    bottom: 1.36rem;
    left: calc(var(--margin) / 2 * -1 + .5rem);
    right: calc(var(--margin) / 2 * -1 + .5rem);
    border-radius: 0 0 var(--radius-1) var(--radius-1);
    border-bottom: 2px solid var(--outlines);
}

/* Position top pseudo-horizontal */

.header-title:after {
    z-index: -1;
    top: 1.5rem;
    left: calc(var(--margin) / 2 * -1 + .1875rem);
    right: calc(var(--margin) / 2 * -1 + .1875rem);
    border-top: 2px solid var(--outlines);
}

@media (max-width: 575.98px) {
    section.inner-right:after {
        left: calc(var(--margin) / 2 * -1 + .875rem);
        right: calc(var(--margin) / 2 * -1 + .875rem);
    }

    .header-title:after {
        left: calc(var(--margin) / 2 * -1 + 1rem);
        right: calc(var(--margin) / 2 * -1 + 1rem);
    }
}

/* ==========================================================================
   Scrollbar and overflow configs
   ========================================================================== */

/* Hides scrollbar.
 *
 * CREDIT:
 * https://stackoverflow.com/questions/43186015/css-hide-scroll-bar-but-have-element-scrollable
 *
 */

::-webkit-scrollbar {
    width: 0;
    background: transparent;
}

::-webkit-scrollbar-track {
    width: 0;
    background: transparent;
}

::-webkit-scrollbar-thumb {
    width: 0;
    background: transparent;
}


/* ==========================================================================
   Master collapsible section boolean states
   ========================================================================== */

/*
 * The '.collapse' class with data-parent attribute.
 *
 * Adding Bootstrap's '.collapse' class exposes an opportunity to extend class
 * events enabled by the automatically-activated collapse plugin. To take
 * advantage of collapse plugin's events, it is important to understand what the plugin
 * gets from the element and the sequence of classes it assigns to it.
 *
 * The collapse plugin utilizes three classes with default properties to handle events:
 *     1. The '.collapse' class immediately hides content.
 *             { display: none; }
 *     2. The '.collapsing' class is added during transitions.
 *             { height: 0; transition: .3s ease-in-out .3s }
 *     3. The '.collapse.show' class shows content.
 *             { display: block; }
 *
 * The 'show.bs.collapse' event.
 *
 * Toggling show to the control of a currently hidden element will:
 *         ↪ Remove its '.collapse' class ↴
 *         ↪ Add the '.collapsing' class ↴
 *             ↪ Transition its height from 0 to its initial dimension ↴
 *         ↪ Set aria-expanded='true' to its control element ↴
 *         ↪ Trigger hide.bs.collapse event to an open sibling ↴
 *         ↪ Remove the '.collapsing' class ↴
 *         ↪ Add the '.show' class.
 *
 * The 'hide.bs.collapse' event.
 *
 * Toggling collapse to the control of a currently shown element will:
 *         ↪ Get element's height dimension ↴
 *         ↪ Add the '.collapsing' class ↴
 *             ↪ Transition its height from the retrieved dimension to 0 ↴
 *         ↪ Remove '.collapse.show' classes together ↴
 *         ↪ Set aria-expanded='false' to its control element ↴
 *         ↪ Remove the '.collapsing' class ↴
 *         ↪ Add the '.collapse' class.
 *
 *
 *
 *
 * Adding data-toggle="collapse" and data-target"<id of collapsible element>"
 * to a button or a tag assigns control of that collapsible element.
 *
 *  The control element's 'aria-expanded' attribute toggles 'true'/'false' when
 *  toggling the button/a itself.
 *
 * Adding a data-parent attribute ensures that all '.collapse' elements
 * sharing the same data-parent are closed whenever the current '.collapse' element
 * is open.
 *
 * https://v5.getbootstrap.com/docs/5.0/components/collapse/
 * https://mdbootstrap.com/docs/standard/components/collapse/
 *
 */

/* Disable transitions inherited from Bootstrap's '.collapsing' class. */

[data-parent="#resumeStack"].collapsing {
    -webkit-transition: none !important;
    -o-transition: none !important;
    transition: none !important;
}

/* Set a responsive height property to be 100% of the smaller viewport
 * dimension minus the total height of seven headers (21rem) and
 * top/bottom tolerances (8rem), callable to all collapsible elements sharing
 * the data-parent attribute.
 */

[data-parent="#resumeStack"] {
    --height: calc(100vh - 21rem - 9rem);
    overflow: auto;
}

/*
 * The collapse and expand events with flex transitions.
 *
 * This radically customizes the 'show.bs.collapse' event by attaching
 * specific css settings to the '.show' and ':not(.show)' selectors.
 *
 * Animating flex.
 *
 * The trick is to always display flex (never hiding the element) and instead,
 * animating its height, and flex direction.
 *
 *
 * Animating flex direction.
 *
 * Flipping the flex direction is key to ensuring the content 'scrolls to top'
 * when shown. Without flexbox, the default states of the plugin's classes
 * invariably transition element heights without consideration to the window's
 * position relative to the revealed content. Thus, toggling a collapsed section
 * with greater height dimension will often overshoot the transition duration
 * and/or never open at the top of the element's content.
 *
 * Selecting the boolean states.
 *
 * The last key is to select the '.show' class directly and not traverse
 * '.collapse.show' as this will invoke a hidden state between '.collapse'
 * and '.show' which appears as a quick flash interrupting the transition.
 * Conversely, it's imperative to only select ':not(.show)' instead of
 * '.collapse' when targeting the element's hidden state.
 *
 */

/* Set default expanded state with assigned show-event flexbox animation. */

[data-parent="#resumeStack"].show {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    -webkit-box-flex: 1 !important;
        -ms-flex: 1 !important;
            flex: 1 !important;

    height: var(--height);

    -webkit-animation: show-event .75s var(--glide) 0s 1 normal forwards running;
    animation: show-event .75s var(--glide) 0s 1 normal forwards running;
    -webkit-transition:
            all .3s var(--zip) 0s,
            -webkit-box-flex .1s var(--swoop) 0s;
    transition:
            all .3s var(--zip) 0s,
            -webkit-box-flex .1s var(--swoop) 0s;
    -o-transition:
            all .3s var(--zip) 0s,
            flex .1s var(--swoop) 0s;
    transition:
            all .3s var(--zip) 0s,
            flex .1s var(--swoop) 0s;
    transition:
            all .3s var(--zip) 0s,
            flex .1s var(--swoop) 0s,
            -webkit-box-flex .1s var(--swoop) 0s,
            -ms-flex .1s var(--swoop) 0s;
}

/* Set default collapsed state with assigned hide-event flexbox animation. */

[data-parent="#resumeStack"]:not(.show) {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: reverse;
        -ms-flex-direction: column-reverse;
            flex-direction: column-reverse;
    -webkit-box-flex: 0 !important;
        -ms-flex: 0 !important;
            flex: 0 !important;

    height: 0;

    -webkit-animation: hide-event .55s var(--glide) 0s 1 normal forwards running;
    animation: hide-event .55s var(--glide) 0s 1 normal forwards running;
    -webkit-transition:
            all .3s var(--zip) 0s,
            -webkit-box-flex .1s var(--swoop) 0s;
    transition:
            all .3s var(--zip) 0s,
            -webkit-box-flex .1s var(--swoop) 0s;
    -o-transition:
            all .3s var(--zip) 0s,
            flex .1s var(--swoop) 0s;
    transition:
            all .3s var(--zip) 0s,
            flex .1s var(--swoop) 0s;
    transition:
            all .3s var(--zip) 0s,
            flex .1s var(--swoop) 0s,
            -webkit-box-flex .1s var(--swoop) 0s,
            -ms-flex .1s var(--swoop) 0s;
}

/* Show event animation keyframes */

@keyframes show-event {
    0% {
        height: 0;
        visibility: hidden;
        opacity: 0;
        -webkit-box-flex: 0;
            -ms-flex: 0;
                flex: 0;
        -webkit-box-orient: vertical;
        -webkit-box-direction: reverse;
            -ms-flex-direction: column-reverse;
                flex-direction: column-reverse;
    }
    50% {
        visibility: visible;
        opacity: 1;
        -webkit-box-orient: vertical;
        -webkit-box-direction: normal;
            -ms-flex-direction: column;
                flex-direction: column;
    }
    100% {
        height: var(--height);
        -webkit-box-flex: 1;
            -ms-flex: 1;
                flex: 1;
        visibility: visible;
        opacity: 1;
        -webkit-box-orient: vertical;
        -webkit-box-direction: normal;
            -ms-flex-direction: column;
                flex-direction: column;
    }
}

@-webkit-keyframes show-event {
    0% {
        height: 0;
        visibility: hidden;
        opacity: 0;
        -webkit-box-flex: 0;
                flex: 0;
        -webkit-box-orient: vertical;
        -webkit-box-direction: reverse;
                flex-direction: column-reverse;
    }
    50% {
        visibility: visible;
        opacity: 1;
        -webkit-box-orient: vertical;
        -webkit-box-direction: normal;
                flex-direction: column;
    }
    100% {
        height: var(--height);
        -webkit-box-flex: 1;
                flex: 1;
        visibility: visible;
        opacity: 1;
        -webkit-box-orient: vertical;
        -webkit-box-direction: normal;
                flex-direction: column;
    }
}

/* Hide event animation keyframes */

@keyframes hide-event {
    0% {
        height: var(--height);
        -webkit-box-flex: 1;
            -ms-flex: 1;
                flex: 1;
        -webkit-box-orient: vertical;
        -webkit-box-direction: normal;
            -ms-flex-direction: column;
                flex-direction: column;
        opacity: 1;
        visibility: visible;
    }
    50% {
        opacity: 1;
        visibility: visible;
        -webkit-box-orient: vertical;
        -webkit-box-direction: reverse;
            -ms-flex-direction: column-reverse;
                flex-direction: column-reverse;
    }
    100% {
        height: 0;
        visibility: hidden;
        opacity: 0;
        -webkit-box-flex: 0;
            -ms-flex: 0;
                flex: 0;
        -webkit-box-orient: vertical;
        -webkit-box-direction: reverse;
            -ms-flex-direction: column-reverse;
                flex-direction: column-reverse;
    }
}

@-webkit-keyframes hide-event {
    0% {
        height: var(--height);
        -webkit-box-flex: 1;
                flex: 1;
        -webkit-box-orient: vertical;
        -webkit-box-direction: normal;
                flex-direction: column;
        opacity: 1;
        visibility: visible;
    }
    50% {
        opacity: 1;
        visibility: visible;
        -webkit-box-orient: vertical;
        -webkit-box-direction: reverse;
                flex-direction: column-reverse;
    }
    100% {
        height: 0;
        visibility: hidden;
        opacity: 0;
        -webkit-box-flex: 0;
                flex: 0;
        -webkit-box-orient: vertical;
        -webkit-box-direction: reverse;
                flex-direction: column-reverse;
    }
}

/*
 * Hide event animation keyframes at xl screens.
 *
 * This modifies the column-reverse keyframe state from occurring at
 * 50% to instead occurring fully at 100% into the transition.
 *
 * The slight adjustment is a considerable and visible benefit that smooths the
 * 'stacking' transition when content occupies a wider frame.
 */

@media (min-width: 1200px) {
    @keyframes hide-event {
        0% {
            height: var(--height);
            -webkit-box-flex: 1;
                -ms-flex: 1;
                    flex: 1;
            -webkit-box-orient: vertical;
            -webkit-box-direction: normal;
                -ms-flex-direction: column;
                    flex-direction: column;
            opacity: 1;
            visibility: visible;
        }
        50% {
            opacity: 1;
            visibility: visible;
            -webkit-box-orient: vertical;
            -webkit-box-direction: normal;
                -ms-flex-direction: column;
                    flex-direction: column;
        }

        /* Delay column reverse at 100% for less movement on large screens */

        100% {
            height: 0;
            visibility: hidden;
            opacity: 0;
            -webkit-box-flex: 0;
                -ms-flex: 0;
                    flex: 0;
            -webkit-box-orient: vertical;
            -webkit-box-direction: reverse;
                -ms-flex-direction: column-reverse;
                    flex-direction: column-reverse;
        }
    }

    @-webkit-keyframes hide-event {
        0% {
            height: var(--height);
            -webkit-box-flex: 1;
                    flex: 1;
            -webkit-box-orient: vertical;
            -webkit-box-direction: normal;
                    flex-direction: column;
            opacity: 1;
            visibility: visible;
        }
        50% {
            opacity: 1;
            visibility: visible;
            -webkit-box-orient: vertical;
            -webkit-box-direction: normal;
                    flex-direction: column;
        }

        /* Delay column reverse at 100% for less movement on large screens */

        100% {
            height: 0;
            visibility: hidden;
            opacity: 0;
            -webkit-box-flex: 0;
                    flex: 0;
            -webkit-box-orient: vertical;
            -webkit-box-direction: reverse;
                    flex-direction: column-reverse;
        }
    }
}

/* ==========================================================================
   Outer Structure configs for :checked state
   ========================================================================== */

/*
 * The static website.
 *
 * This configures the master display settings when toggle-all is ':checked'.
 *
 * Selects <main> via general sibling selector.
 * Can be modified to use class selector '.body-main'.
 *
 * 1. Set <main> position from fixed to static and allow overflow.
 * 2. Remove interim padding when statically positioned
 *    (fixed position elements are fixed in relation to the window, not the body,
 *     unresponsive to margins, only padding.)
 * 3. Set box shadow blur custom property from 0 (previous) to new value(s).
 */

#toggle-all:checked ~ main {
    --blur-xs: 2px;
    --blur-sm: 3px;
    --blur-md: 6px;

    position: static;
    overflow: scroll;

    flex-direction: column;
    padding-left: 0;
    padding-right: 0;
}

/*
 * Prevent flex behavior and overflow when toggling expand-all on mobile
 * and force header text to wrap and occupy two lines.
 */

@media (min-width: 575.98px) {
    #toggle-all:checked ~ main {
        display: block;
        overflow-x: hidden;
    }

    #toggle-all + label .toggle-container .menu-icon {
        visibility: hidden;
    }
}

/* If checked, force a show-event for all currently collapsed sections with
 * the exception of the landing section (target-zero)
 */

#toggle-all:checked ~ main [data-parent="#resumeStack"]:not(#target-zero).show,
#toggle-all:checked ~ main [data-parent="#resumeStack"]:not(#target-zero).collapse {
    display: flex;
    visibility: visible;
    height: 100%;
    overflow: visible;

    -webkit-animation: show-event .75s ease-in-out 0s;
            animation: show-event .75s ease-in-out 0s;
    -webkit-transition: all var(--dashing) var(--glide) var(--early);
         -o-transition: all var(--dashing) var(--glide) var(--early);
            transition: all var(--dashing) var(--glide) var(--early);
}

/* If checked, hide all article > header icon buttons as their local boolean
 * functionality will (truthy) return feedback for a (falsy) '.collapse.show'.
 */

#toggle-all:checked ~ main article header .header-icon {
    display: none;
}

/* If checked, disable header button functionality as their local boolean
 * functionality is rendered inconsequential.
 */

#toggle-all:checked ~ main article header {
    pointer-events: none;
    cursor: default;
    color: black;
}

/* If checked, hide all features and visual cues attributed to '.collapse'
 * transitions.
 *
 * Simply set the '--outlines' property (color of pseudo rails) to transparent.
 */

#toggle-all:checked ~ main article {
    --outlines: transparent;
}

/* ==========================================================================
   Inner Structure configs for global events
   ========================================================================== */

/*
 * Transition variables for mobile.
 *
 * 1. Decrease base rem scale for xs screens.
 * 2. Only feature media content on xs screens (section.inner-left).
 * 3. Only feature select written content on xs screens (section.inner-right).
*/

@media (max-width: 575.98px) {
    :root {
        font-size: .938rem;
    }

    [data-parent="#resumeStack"] {
        --height: calc(100vh - 21rem - 4rem);
        overflow: scroll;
    }
}

/*
 * Transition variables for landscape-mobile to tablet screens.
 *
 * 1. Only feature media content on sm-md screens (section.inner-left).
 * 2. Only feature select written content on sm-md screens (section.inner-right).
*/

@media (min-width: 576px) and (max-width: 991.98px) {
    .main-article {
        flex: 0 0 auto !important;
        width: 100% !important;
    }

    #target-one .outer-first,
    #target-one .outer-second {
        width: 100%;
    }
}

/*
 * Transition variables for portrait-mobile and tablet screens.
 *
 * 1. Only feature media content on xs-sm-md devices (section.inner-right) by default.
 * 2. Show all content on toggle of expand-all.
*/

@media (max-width: 991.98px) {
    [data-parent="#resumeStack"]:not(#target-one) .outer-first {
        display: none;
    }
     #toggle-all:checked ~ main .header-content {
        flex-wrap: wrap;
    }

    #toggle-all:checked ~ main .header-text,
    #toggle-all:checked ~ main [data-parent="#resumeStack"]:not(#target-one) .outer-first {
        display: block;
    }

    /* Hide one of two CTAs that references a section not featured at this
     * media query.
     * ID selectors are required to control the following.
     * IDs have been assigned to two `.activity-cta` containers in the second
     * section of the fourth article.
     */

    #four-two-cta-1 {
        display: none !important;
    }

    /* Move the relevant CTA to the bottom of the list at this media query. */

    #four-two-cta-2 {
        -webkit-box-ordinal-group: 6 !important;
        -ms-flex-order: 5 !important;
            order: 5 !important;
    }

    /* Return to to default order when expand-all is :checked */

    #toggle-all:checked ~ .body-main #four-two-cta-1 {
        display: block !important;
    }

    #four-two-cta-2 {
        -webkit-box-ordinal-group: 0;
        -ms-flex-order: 0;
            order: 0;
    }
}

/* ==========================================================================
   Body nav configs
   ========================================================================== */

/*
 * The body's nav container.
 *
 * This styles the body's main <nav> element.
 * Features `.nav-outline` scrollspy navigation, and `.nav-links` dashboard.
 *
 * Assigned element id="nav-outline" that targets <body> to enable
 * scrollspy feature.
 *
 * Set tab index to 3 so a screen reader browses it after <main>
 */

.body-nav {
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;

    margin-top: 5rem;
    padding-right: .75rem;
    padding-left: .75rem;

    background: var(--powder);

    font-family: din-2014, sans-serif;
    tab-index: 3;
}

.body-nav {
    display: flex;
    flex-direction: column;
    flex: 1;
    align-items: flex-start;
}

.body-nav > * {
    display: flex;
    flex-direction: column;
    justify-content: stretch;
    align-items: center;
    flex: 1;

    width: 100%;
}

/**
 * Nav > ol is a direct representation of the website's headings map,
 * A list of headings, with lists nested to the level of their heading hierarchy.
 *
 * Credit: (modified) headingsMap https://github.com/dzc34/headingsMap
 *
 * Each <ul> is nested to the nth level of its represented heading in the
 * document outline.
 * Class names '.list-h*' are assigned to parent <ul>s for ease of reference
 * and direct class styling.
 */

/* Set column flex direction to all lists in nav outline */

.body-nav ol.nav,
.body-nav ul.nav {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
}

ul.nav {
    padding-left: .2rem;
}

.body-nav button {
    border: none;
}

/*
 * Nav outer body wrapper
 *
 * This controls the container within `.body-nav`, which contains two separate
 * divs with the `.nav-content` class.
 * One is the doc outline `menu-sidebar` and the other is the `nav-links`
 * quick navigation.
 */

.nav-outer-body {
    height: calc(100vh - 8rem);
    overflow-x: hidden !important;
    overflow-y: auto !important;
}

.nav-outer-body > * {
    flex: 1 1 initial;
}

/* Nav menu and scroll spy and feedback
   ========================================================================== */

/*
 * The top level list of nav outline.
 *
 * `.nav-content` styles the container for the ordered list of headings, which
 * contains lists nested to the level of their heading hierarchy.
 *
 * Must be assigned with Bootstrap's '.nav-pills' and 'menu-sidebar' classes
 * for effective scrollspy '.active' styles.
 * Must contain an <li> element with the '.outline-item' and '.nav-item' classes
 *
 * 1. Configure box model and presentation.
 * 2. Declare properties for scope.
 */

.nav-content {
    --navlink-height: 1.05rem;
    --navlink-offset: calc(var(--navlink-height) - 1rem);
    --navlist-top: calc(var(--navlink-height) * -1);
    --navlink-start: calc(var(--navlink-height) / 2);
    --navlist-height: calc(var(--navlink-height) * 5 - var(--navlink-offset) + .25rem);
    --navitem-right: -50%;

    width: 100%;
    margin-left: 0;

    background-color: #fff;
    background: var(--pearl) !important;
    background-clip: padding-box;

    border: 2px solid var(--white) !important;
    border-radius: .75rem;

    -webkit-box-shadow:
            inset -5px -8px 0 0 rgba(255, 255, 255, 0.5),
            inset 5px 8px 0 0 rgba(0, 0, 0, 0.3);

    box-shadow:
            inset -5px -8px 0 0 rgba(255, 255, 255, 0.5),
            inset 5px 8px 0 0 rgba(0, 0, 0, 0.3);
}

/* Adjust scope property values for medium screens and lower */

@media (max-width: 991.98px) {
    .nav-content {
        --navlink-height: 1.2rem;
        --navlist-height: calc(var(--navlink-height) * 3);
        --navitem-right: -40%;
    }
}

/* Adjust scope property values for xs screens */

@media (max-width: 575.98px) {
    .nav-content {
        --navlink-height: 1.5rem;
        --navlist-height: calc(var(--navlink-height) * 3 - var(--navlink-offset));
        --navitem-right: -5%;
    }
}

/*
 * The parent list item of nav outline.
 *
 * Must be an immediate child of the '.nav-content' class.
 */

.outline-item {
    overflow-x: hidden;
    overflow-y: scroll;

    width: 100%;
    padding: 1rem 1rem 1rem;
    border-radius: var(--radius-2);
    border: 1px solid var(--grey) !important;
    background: var(--white);
}

/* Set the height of link <a> elements assigned the class name '.nav-link'
 * to be an instance of property --link-height.
 */

.nav-pills.menu-sidebar .nav-link {
    white-space: nowrap;
    line-height: var(--navlink-height);
}

/*
 * Relatively position lists, list items and list links in nav outline.
 * Prevents :before element from positioning relative to the next parent.
 */

.nav,
.nav-item,
.nav-link {
    position: relative;
}

/*
 * Absolute positioning as a boolean tool.
 *
 * This attaches key element positioning in nav outline to the :checked selector.
 * Scrollspy and pagination should only be enabled when the website is in static
 * expand-all state.
 *
 * As the feedback states of nav outline are given to pseudo elements absolutely
 * positioned relative to their parent elements; positioning absolute children
 * by traversing the :checked selector results in an effective on/off hack.
 *
 * Absolutely position pseudo elements of list items in nav
 * outline for pagination and scrollspy features only when #toggle-all
 * is ':checked' or when the screen width is greater than the screen height.
 */

#toggle-all:checked ~ .body-nav .nav:before,
#toggle-all:checked ~ .body-nav .nav:after,
#toggle-all:checked ~ .body-nav .nav-item:before,
#toggle-all:checked ~ .body-nav .nav-link:before {
    position: absolute;
    display: block;
    content: "";
}

@media (max-width: 991.98px) and  (orientation: landscape) {
    .body-nav .nav:before,
    .body-nav .nav:after,
    .body-nav .nav-item:before,
    .body-nav .nav-link:before {
        position: absolute;
        display: block;
        content: "";
    }
}

/* Absolutely position nav-item's pseudo element regardless of the toggle state.
 * This is to */

.nav-item:before {
    position: absolute;
    display: block;
    content: "";
}

/*
 * Horizontal feedback on hover
 *
 * Set transparent horizontal border to :before pseudo element of list items
 * in nav outline.
 */

.list-h3 .nav-item:before {
    top: calc(var(--navlink-start) + var(--navlink-offset));
    right: var(--navitem-right);
    width: 64%;
    border-top: .5px dotted transparent;
}

/* Change horizontal border color of :before pseudo element of list items
 * on hover.
 */

.nav-item:hover::before {
    border-top: 2px double blue;
}

/*
 * Pagination track
 *
 * Absolutely position a vertical line at the heading h3 level of nav outline
 * to render as a rail in which segments are highlighted when '.active' class
 * is added to nested list items
 */

.list-h3:before {
    top: calc(var(--navlink-start) + var(--navlink-offset));
    left: 100%;
    height: 100%;
    width: .1rem;

    background-color: rgba(02, 42, 251, .1);
    transition: all .3s var(--swoop) .3s;
}

/*
 * Pagination item
 *
 * Absolutely position a vertical segments at heading h5 level of nav outline
 * with a variable top border width render as a rail in which segments are highlighted when '.active' class
 * is added to nested list items
 */

.list-h4:after {
    top: calc(var(--navlink-start) + var(--navlist-top) - var(--navlink-offset));
    left: 100%;
    width: .1rem;

    border-top: 2px solid var(--raisin);
    transition: all .3s var(--swoop) .3s;
}

@media (max-width: 575.98px) {
    .list-h3:before,
    .list-h4:after {
        left: -2%;
    }
}

/*
 * Pagination item general active state.
 *
 * Set style for pagination item to transform when given scrollspy's '.active'
 * class via general sibling selector.
 */

.nav-pills.menu-sidebar .nav-link.active ~ .nav:after {
    border-top-width: var(--navlist-height);
    border-top-color: var(--blue);
}

/*
 * Scrollspy general inactive track.
 *
 * Absolutely position a horizontal line before nav-links in nav outline that
 * renders highlighted when '.active' class is added to nested list items and
 * when hovered over.
 */

.nav-link:before {
    top: var(--navlink-start);
    right: 100%;
    width: 77%;
    border-top: 1px solid var(--grey);
}

/* Style general hovered track. */

.nav-link:hover::before {
    border-top: 2px double blue;
}

/* Disable '.active' style states for parent '.link-zero' in nav outline.
 * Styles via '.nav-pills.menu-sidebar' are inherited from 'bootstrap.min.css'
 * and primarily control the '.active' state of elements within which scroll spy
 * is enabled.
 */

.nav-pills.menu-sidebar .link-zero.nav-link.active {
    color: initial;
    font-weight: normal;
    border-left: none;
    border-radius: 0;
}

/* Disable scroll spy by default */

.body-nav .nav-pills.menu-sidebar .nav-link.active {
    border-left: none;
}

/* Enable scrollspy when checked or when screen is landscape */

#toggle-all:checked ~ .body-nav .nav-pills.menu-sidebar .nav-link:not(.link-zero).active {
    border-left-width: .125rem;
    border-left-style: solid;
}

@media (max-width: 991.98px) and  (orientation: landscape) {
    .body-nav .nav-pills.menu-sidebar .nav-link.active {
        border-left-width: .125rem;
        border-left-style: solid;
    }
}

/*
 * Scrollspy general active state.
 *
 * The class designation '.nav-pills.menu-sidebar .nav-link.active' from
 * Bootstrap is how active spied items from the body are styled in the
 * nav outline.
 *
 * Required to pass parent '.nav-pills.menu-sidebar' on every child class
 * assignment.
 *
 * Set state to transition border width and style to link items when given
 * scrollspy's '.active' class.
 */

.nav-pills.menu-sidebar .nav-link.active {
    color: var(--blue);
    border-left-width: .125rem;
    border-left-style: solid;
}

/* Style general state of nav-link pseudo :before element to transition
 * border widths when given scrollspy's '.active' class in nav outline
 */


.nav-pills.menu-sidebar .nav-link.active:before {
    border-top-width: 2px;
    border-top-color: var(--blue);
}

/* Nav outline display configs for global events
   ========================================================================== */

/* Visibility of items in the nav outline should be synced with visibility
 * of content it alludes to.
 *
 * Disable link functionality for nav outline lists beyond level h3 by default.
 *
 */

.list-h4 {
    pointer-events: none;
    cursor: default;

    opacity: .5;
}

/* If checked, enable link functionality for level h3 outline lists */

#toggle-all:checked + label ~ nav .list-h4  {
    opacity:1;
    pointer-events: auto;
    cursor: pointer;
}

/* The html markup for h3 headings in nav outline includes two tags with the
 * same section title.
 *
 * 1. One is a control element for a collapsed section.
 * 2. The other targets the given section when the site is static.
 *
 * As their target and link functions are not interchangeable, one is simply
 * hidden until the other is shown. Visibility is applied on an as-need basis.
 * i.e. control elements are disabled/hidden when toggle-all is ':checked'.
 */

/* Disable and hide non-control-element level h3 <a> tags by default. */

.list-h3 [href^="#element"] {
    display: none;
}

/* If checked, disable and hide control-element level h3 <a> or <button>
 * duplicates of non-control-element h3 <a> tags.
 */

#toggle-all:checked ~ nav .list-h3 [data-toggle="collapse"] {
    display: none;
}

/* If checked, enable and show non-control-element level h3 <a> tags */

#toggle-all:checked ~ nav .list-h3 [href^="#element"] {
    display: block;
}

/* Adjust visibility of list items for tablet and mobile devices */

@media (max-width: 991.98px) {
    .link-zero,
    .list-h4 [href^="#target"],
    .list-h5 > :first-child {
        visibility: hidden;
        width: 0;
        height: 0;
        margin: 0;
        padding: 0;
    }

    .list-h5 > :nth-child(2) {
        visibility: visible;
    }
}

/* Adjust visibility of list items for mobile portrait devices */

@media (max-width: 575.98px) {
    ul.list-h2,
    ul.list-h3 {
        padding-left: 0 !important;
    }

    .list-h5 .nav-link {
        visibility: hidden;
    }

    .list-h4 [href^="#target"],
    .list-h5 .nav-link:nth-child(2) {
        display: none;
    }

    .link-text {
        display: none;
    }
}

/* Body nav animation configs
   ========================================================================== */

/**
 * The nav > ol document outline is also controlled with the '.collapse' element
 * and target class definitions. This allows custom
 * slides in on toggle of menu-button click event
 * Currently dependent on the .collapse event class
 *
 * Responsive behavior follows the logic of a column shrinking to the offset variable of a sibling column
 * In this case, the <main> succumbs to an off-canvas <nav>
 *
 * NOTE:
 *     <body> is the only element to elicit behavior resulting from declarations at :root
 *     The immediate children of <body> are:
 *     <header> <input/label> <nav> <main> and <footer>
 *     Global reactive events occur by utilising the .show and :checked classes with sibling selectors
 *     In particular, <main> ~ <nav> and <input> ~ <main> will be reactive to each other's sibling/class events
 */

/*
 * The side menu event  and expand events with flex transitions.
 *
 * This radically customizes the 'show.bs.collapse' event by attaching
 * specific css settings to the '.show' and ':not(.show)' selectors.
 *
 * Animating flex.
 *
 * The trick is to always display flex (never hiding the element) and instead,
 * animating its height, and flex direction.
 *
 *
 * Animating flex direction.
 *
 * Flipping the flex direction is key to ensuring the content 'scrolls to top'
 * when shown. Without flexbox, the default states of the plugin's classes
 * invariably transition element heights without consideration to the window's
 * position relative to the revealed content. Thus, toggling a collapsed section
 * with greater height dimension will often overshoot the transition duration
 * and/or never open at the top of the element's content.
 *
 * Selecting the boolean states.
 *
 * The last key is to select the '.show' class directly and not traverse
 * '.collapse.show' as this will invoke a hidden state between '.collapse'
 * and '.show' which appears as a quick flash interrupting the transition.
 * Conversely, it's imperative to only select ':not(.show)' instead of
 * '.collapse' when targeting the element's hidden state.
 *
 */

/* Reset and re-declare inherited variables at inner body level */
/* Delimit access to the nav and main elements via class selectors */

.body-header,
.body-main,
.body-nav {

    /* Set a new value (out of twelve) */
    --of-twelve: 4;

    /* Repeat and re-declare --width and --offset properties together with the new value --of-twelve */
    --width: calc(var(--of-twelve) / 12 * 100%);
    --offset: calc((12 - var(--of-twelve)) / 12 * 100%);

    /* Instantiate --width to be the object property of new variable --navwidth  */
    --navwidth: var(--width);

    /* Instantiate --offset to be the object property of new variable --mainwidth */
    --mainwidth: var(--offset);

    /* Start/end margin property for animation keyframes */
    --mainstart: 0;
}

/*
 * Disable transitions inherited from Bootstrap's '.collapsing' class.
 *
 * Adding Bootstrap's '.collapse' class activates the collapse plugin for that
 * element.
 *
 * The '.collapse' class immediately hides content.
 * The '.collapsing' class is added during transitions.
 * The '.show' class shows content.
 */

.body-nav.collapsing {
    transition: none !important;
    height: 100% !important;
}

/* Slide nav in on .show event */

.body-nav.show {
    display: flex;

    -webkit-animation: nav-in .75s var(--glide) 0s 1 normal forwards running;
            animation: nav-in .75s var(--glide) 0s 1 normal forwards running;
    -webkit-transition: all var(--flashing) var(--zip) var(--early);
         -o-transition: all var(--flashing) var(--zip) var(--early);
            transition: all var(--flashing) var(--zip) var(--early);
}

/* Slide nav out on .collapse event */

.body-nav:not(.show) {
    display: flex;
    height: 100%;

    -webkit-animation: nav-out .75s var(--glide) 0s 1 normal forwards running;
            animation: nav-out .75s var(--glide) 0s 1 normal forwards running;
    -webkit-transition: all var(--flashing) var(--zip) var(--early);
         -o-transition: all var(--flashing) var(--zip) var(--early);
            transition: all var(--flashing) var(--zip) var(--early);
}

/* Shrink main on nav.show event */

.body-nav.show ~ .body-main {
    -webkit-animation: main-shrink .75s var(--glide) 0s 1 normal forwards running;
            animation: main-shrink .75s var(--glide) 0s 1 normal forwards running;
    -webkit-transition: all var(--flashing) var(--zip) var(--early);
         -o-transition: all var(--flashing) var(--zip) var(--early);
            transition: all var(--flashing) var(--zip) var(--early);
}

/* Expand main on nav.collapse event */

.body-nav:not(.show) ~ .body-main {
    -webkit-animation: main-grow .75s var(--glide) 0s 1 normal forwards running;
            animation: main-grow .75s var(--glide) 0s 1 normal forwards running;
    -webkit-transition: all var(--flashing) var(--zip) var(--early);
         -o-transition: all var(--flashing) var(--zip) var(--early);
            transition: all var(--flashing) var(--zip) var(--early);
}

/* Select the div elements (the page-left, and page-right col-* variety) to wrap full width between lg and xl */
/* ALT option: (min-width: 992px) and (max-width: 1199.98px) */
/*(min-width: 1200px) and (max-width: 1399.98px)*/

@media (min-width: 992px) and (max-width: 1199.98px) {
    nav.body-nav.show ~ .body-main .spread > div  {
        width: 100%;

        -webkit-transition: all .3s var(--zip) var(--early);
             -o-transition: all .3s var(--zip) var(--early);
                transition: all .3s var(--zip) var(--early);
    }
}

/* Side Menu Nav-in animation keyframes */

@-webkit-keyframes nav-in {
    0% {
        width: 0;
        flex: 0;
        display: none;
        visibility: hidden;
        opacity: 0;
    }
    50% {
        visibility: visible;
        opacity: 1;
    }
    100% {
        width: var(--navwidth);
        flex: 1;
        display: flex;
        visibility: visible;
        opacity: 1;
    }
}

@keyframes nav-in {
    0% {
        width: 0;
        flex: 0;
        display: none;
        visibility: hidden;
        opacity: 0;
    }
    50% {
        visibility: visible;
        opacity: 1;
    }
    100% {
        width: var(--navwidth);
        flex: 1;
        display: flex;
        visibility: visible;
        opacity: 1;
    }
}

/* Side Menu nav-out animation keyframes */

@-webkit-keyframes nav-out {
    0% {
        width: var(--navwidth);
        flex: 1;
        display: flex;
        visibility: visible;
        opacity: 1;
    }
    50% {
        visibility: visible;
        opacity: 1;
    }
    100% {
        width: 0;
        flex: 0;
        display: none;
        visibility: hidden;
        opacity: 0;
    }
}

@keyframes nav-out {
    0% {
        width: var(--navwidth);
        flex: 1;
        display: flex;
        visibility: visible;
        opacity: 1;
    }
    50% {
        visibility: visible;
        opacity: 1;
    }
    100% {
        width: 0;
        flex: 0;
        display: none;
        visibility: hidden;
        opacity: 0;
    }
}

/* Side menu main-shrink animation keyframes */

@-webkit-keyframes main-shrink {
    0% {
        width: calc(var(--mainwidth) + var(--navwidth));
        margin-left: var(--mainstart);
        margin-right: var(--mainstart);
    }
    100% {
        width: var(--mainwidth);
        margin-left: var(--navwidth);
        margin-right: auto;
    }
}

@keyframes main-shrink {
    0% {
        width: calc(var(--mainwidth) + var(--navwidth));
        margin-left: var(--mainstart);
        margin-right: var(--mainstart);
    }
    100% {
        width: var(--mainwidth);
        margin-left: var(--navwidth);
        margin-right: auto;
    }
}

/* Side menu main-grow animation keyframes */

@-webkit-keyframes main-grow {
    0% {
        width: var(--mainwidth);
        margin-left: var(--navwidth);
        margin-right: auto;
    }
    100% {
        width: calc(var(--mainwidth) + var(--navwidth));
        margin-left: var(--mainstart);
        margin-right: var(--mainstart);
    }
}

@keyframes main-grow {
    0% {
        width: var(--mainwidth);
        margin-left: var(--navwidth);
        margin-right: auto;
    }
    100% {
        width: calc(var(--mainwidth) + var(--navwidth));
        margin-left: var(--mainstart);
        margin-right: var(--mainstart);
    }
}

/* ==========================================================================
   Body header configs
   ========================================================================== */

/*
 * The body's header container.
 *
 * This sets minor properties for the body's header.
 * The body's header is a wrapper for the nav components from Bootstrap, namely
 * `.navbar-brand` and the `.navbar-toggler` classes.
 * '.navbar-brand` is a home link.
 * `.navbar-toggler` is the menu button that toggles `.body-nav`
 */

/* Absolutely position the body's header in order to go above all elements in
 * the dom.
 * This is necessary as the nav element inside header is `position-fixed`.
 */

.body-header {
    position: absolute;
    z-index: 99;
}

.body-header .navbar-light {
    background: var(--paper,#F2F1EF);
}

/* Remove the default box shadow assigned to Bootstrap's `.navbar` class. */

.navbar {
    box-shadow: none;
}

/* Body header configs for global events
   ========================================================================== */

/* If :checked, add the default Bootstrap shadow to `.navbar`. */

#toggle-all:checked ~ .body-header .navbar {
    -webkit-box-shadow: 0 10px 20px 0 rgba(0,0,0,.05);
    box-shadow: 0 10px 20px 0 rgba(0,0,0,.05) !important;
}

/* Nav icon button mobile adjustments */

@media (max-width: 575.98px) {
    .navbar-brand {
        font-size: 1.5rem;
        font-weight: 400;
        letter-spacing: 2px;
    }

    .icon-button {
        font-size: 30px !important;
    }
}

/* ==========================================================================
   Navigation icon and container transitions @prefixed
   ========================================================================== */

/* Navigation indicators and icons for the side menu and the master checkbox
 * toggle feature custom animations and transitions to signify and control
 * boolean states.
 */

/* Declare properties at the body's main header to which the menu icon's
 * position will be animated.
 *
 * This is manually synced with the side menu '.body-nav' transitions.
 * This extends the '--of-twelve' value re-declared at the previous '.body-*' scope
 * but sets width properties to viewport-width units as the button has no sibling like
 * '--mainwidth' to respond to, and is in a fixed-position header.
 */

.body-header,
.body-footer {
    --vw-width: calc(var(--of-twelve) / 12 * 100vw);
    --vw-offset: calc((12 - var(--of-twelve)) / 12 * 100vw);
    --vw-margin: calc(var(--vw-offset) / 2);

    /* Instantiate --vw-width to be the object property of var vw-navwidth minus twice the gutter x */
    --vw-navwidth: calc(var(--vw-width) - (var(--gutter-x) * 2));
    --vw-mainwidth: calc(var(--vw-offset) - var(--vw-margin));

    --vw-navstart: 0;
}

/* Reset the calcs for --vw-navwidth with a manual gutter width override for
 * mobiles.
 * This is only necessary if 'gutter-x' is set to 0 for a particular media
 * query. In this case, gutter-x is 0 for mobile.
 */

@media (max-width: 575.98px) {
    .body-header {
        --vw-navwidth: calc(var(--vw-width) - 1.5rem * 2);
    }
}

/* Apply 'menu-in' animation for the '.menu-icon' container.
 * This slides the icon container in when the side menu's control element
 * indicates that the side menu is expanded.
 */

.navbar-toggler[aria-expanded="true"] .menu-icon {
    -webkit-animation: menu-in .75s var(--glide) var(--early) 1 normal forwards running;
            animation: menu-in .75s var(--glide) var(--early) 1 normal forwards running;
    -webkit-transition: all var(--flashing) var(--zip) var(--early);
         -o-transition: all var(--flashing) var(--zip) var(--early);
            transition: all var(--flashing) var(--zip) var(--early);
}

/* Set 'menu-out' animation for the 'menu-icon' container.
 * This slides the icon container back to default position when the side menu's
 * control element indicates that the side menu is not expanded.
 */

.navbar-toggler[aria-expanded="false"] .menu-icon {
    -webkit-animation: menu-out .75s var(--glide) var(--early) 1 normal forwards running;
            animation: menu-out .75s var(--glide) var(--early) 1 normal forwards running;
    -webkit-transition: all var(--flashing) var(--zip) var(--early);
         -o-transition: all var(--flashing) var(--zip) var(--early);
            transition: all var(--flashing) var(--zip) var(--early);
}

/* Menu-in animation keyframes */

@-webkit-keyframes menu-in {
    0% {
        margin-left: var(--vw-navstart);
    }
    100% {
        margin-left: var(--vw-navwidth);
    }
}

@keyframes menu-in {
    0% {
        margin-left: var(--vw-navstart);
    }
    100% {
        margin-left: var(--vw-navwidth);
    }
}

/* Menu-out animation keyframes */

@-webkit-keyframes menu-out {
    0% {
        margin-left: var(--vw-navwidth);
    }
    100% {
        margin-left: var(--vw-navstart);
    }
}

@keyframes menu-out {
    0% {
        margin-left: var(--vw-navwidth);
    }
    100% {
        margin-left: var(--vw-navstart);
    }
}

/* Nav icon indicators.
   ========================================================================== */

/* Style ion-icons for menu nav and checkbox toggle */

.show-swap,
.hide-swap,
.see-more,
.see-less {
    color: black;
    font-size: 32px;
}

/* Set color to checkbox icon when checkbox is checked.
 * Icon is only visible on mobile.
 */

#toggle-all:checked + label ion-icon {
    color: var(--ruby);
}

/* Set presentation styles of menu icon containers. */

.menu-icon {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    position: relative;
}

/* Declare default status content values for the '.toggle-container' class. */

.toggle-container {
    --current-mode: "interactive/";
    --current-state: "collapsible";
    --current-action: "expand";
    --current-scope: "all";

    position: relative;
}

/* Re-set values for the '.toggle-container' class when #toggle-all is :checked. */

#toggle-all:checked + label .toggle-container {
    --current-mode: "static/";
    --current-state: "expanded";
    --current-action: "collapse";
    --current-scope: "back";
}

/* Position a horizontal line :before the two toggle-containers.
 * This sets out a pseudo horizontal line that becomes visible when
 * the side menu icon is toggled and when the master checkbox is toggled.
 */

.toggle-container:before {
    position: absolute;
    content: "";
    display: block;
    top: -.5rem;
    width: 100%;
    height: 24px;
    border-bottom: 2px solid black;
}

/*
 * The state indicator.
 *
 * Position a horizontal line :after the master checkbox input element.
 * This sets out and styles the default state of the checkbox input button
 * horizontal line, which displays the '--current-mode' and
 * '--current-state' declared at the parent scope.
 */


#toggle-all + label .toggle-container:after {
    position: absolute;
    display: block;
    content: var(--current-mode) "\a" var(--current-state);

    top: -.5rem;
    left: 16px;

    width: 20vw;
    height: 24px;
    margin-left: 15vw;

    border-bottom: 2px solid var(--raisin);

    white-space: pre-wrap;

    -webkit-transition: all .3s var(--glide) 0s;
         -o-transition: all .3s var(--glide) 0s;
            transition: all .3s var(--glide) 0s;
}

/* Style toggled state of state indicator.
 * When #toggle-all is checked, transition to the other side of the
 * toggle icon (left), and grow to half the viewport width.
 * Content updates based on property at parent. */

#toggle-all:checked + label .toggle-container:after {
    width: 50vw;
    margin-left: -15vw;
}

/*
 * The action indicator.
 *
 * Position a horizontal line :before the master checkbox input element.
 * This extends the checkbox toggle clickable area to a dedicated action
 * pseudo button which displays the '--current-action' and
 * '--current-scope' declared at the parent scope.
 */

#toggle-all + label .toggle-container:before {
    content: var(--current-action) "\a" var(--current-scope);
    left: 16px;

    width: 1vw;
    margin-left: -15vw;

    border-bottom: 2px solid var(--raisin);
    transition: all .3s var(--glide) 0s;
}

/* Style toggled state of action indicator.
 * When #toggle-all is checked, transition to the other side of the
 * toggle icon (right).
 * Content updates based on property at parent. */

#toggle-all:checked + label .toggle-container:before {
    margin-left: 15vw;
}

/* Set values for the '.toggle-container' class when device/browser width is
 * greater than its height on tablet screens and below; set it to override
 * rules when #toggle-all is :checked.
 * This sets the action indicator and the status indicator for dashboard mode,
 * expanding the pseudo line to occupy the majority of the header area, and
 * indicate the system-wide fixed-control triggered by the auto-landscape query.
 */

@media (max-width: 991.98px) and (orientation: landscape) {
    .toggle-container,
    #toggle-all:checked + label .toggle-container {
        --current-mode: "dashboard/";
        --current-state: "expanded";
        --current-action: "landscape";
        --current-scope: "auto";
    }

    #toggle-all:checked + label .toggle-container:before,
    #toggle-all + label .toggle-container:before {
        color: var(--deep-3);
        margin-left: 17vw;
    }

    #toggle-all + label .toggle-container:after,
    #toggle-all:checked + label .toggle-container:after {
        margin-left: -48vw;
        width: 85vw;
    }
}

/* Set values of the '.toggle-container' status variables to display nothing on
 * mobile screens as a radio button icon stands in its place.
 */

@media (max-width: 575.98px) {
    .toggle-container,
    #toggle-all:checked + label .toggle-container {
        --current-mode: "";
        --current-state: "";
        --current-action: "";
        --current-scope: "";
    }

    #toggle-all + label .toggle-container:after,
    #toggle-all + label .toggle-container:before {
        display: none;
    }
}

/* Set menu-in/menu-out active/inactive animation for icon in container
 * This applies custom animation to two opposing icons that appear/disappear
 * on toggle of its parent menu button control element.
 */

/* When a closed menu is toggled, animate the close icon in. */

.navbar-toggler[aria-expanded="true"] .see-more {
    position: relative;

    -webkit-animation: appear-180 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;
            animation: appear-180 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;
    -webkit-transition: all var(--flashing) var(--glide) var(--short);
         -o-transition: all var(--flashing) var(--glide) var(--short);
            transition: all var(--flashing) var(--glide) var(--short);
}

/* When an open menu is toggled, animate the close icon out. */

.navbar-toggler[aria-expanded="false"] .see-more {
    position: relative;

    -webkit-animation: disappear-180 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;
            animation: disappear-180 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;
    -webkit-transition: all var(--flashing) var(--glide) var(--short);
         -o-transition: all var(--flashing) var(--glide) var(--short);
            transition: all var(--flashing) var(--glide) var(--short);
}

/* When a closed menu is toggled, animate the menu icon out. */

.navbar-toggler[aria-expanded="true"] .see-less {
    position: relative;

    -webkit-animation: disappear-180 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;
            animation: disappear-180 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;
    -webkit-transition: all var(--flashing) var(--glide) var(--short);
         -o-transition: all var(--flashing) var(--glide) var(--short);
            transition: all var(--flashing) var(--glide) var(--short);
}

/* When an open menu is toggled to close, animate the menu icon back in. */

.navbar-toggler[aria-expanded="false"] .see-less {
    position: relative;

    -webkit-animation: appear-180 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;
            animation: appear-180 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;
    -webkit-transition: all var(--flashing) var(--glide) var(--short);
         -o-transition: all var(--flashing) var(--glide) var(--short);
            transition: all var(--flashing) var(--glide) var(--short);
}

/* Menu/close icons animation keyframes
 * This transitions either the hamburger or close icon to 'flip' and disappear,
 * as the hamburger or close icon 'flips' and appears.
 */

@-webkit-keyframes disappear-180 {
    0% {
        -webkit-transform: scaleY(1);
                transform: scaleY(1);
    }
    50% {
        -webkit-transform: scaleY(0);
                transform: scaleY(0);
    }
    100% {
        -webkit-transform: rotateX(1.571rad);
                transform: rotateX(1.571rad);
    }
}

@keyframes disappear-180 {
    0% {
        -webkit-transform: scaleY(1);
                transform: scaleY(1);
    }
    50% {
        -webkit-transform: scaleY(0);
                transform: scaleY(0);
    }
    100% {
        -webkit-transform: rotateX(1.571rad);
                transform: rotateX(1.571rad);
    }
}

/* Menu/close icons animation keyframes
 * Reverse of disappear, transitions either the hamburger or close icon to 'flip'
 * and disappear, as the hamburger or close icon 'flips' and appears.
 * Note: Setting animation to alternate/reverse does not work.
 */

@-webkit-keyframes appear-180 {
    0% {
        -webkit-transform: rotateX(1.571rad);
                transform: rotateX(1.571rad);
    }
    50% {
        -webkit-transform: scaleY(0);
                transform: scaleY(0);
    }
    100% {
        -webkit-transform: scaleY(1);
                transform: scaleY(1);
    }
}

@keyframes appear-180 {
    0% {
        -webkit-transform: rotateX(1.571rad);
                transform: rotateX(1.571rad);
    }
    50% {
        -webkit-transform: scaleY(0);
                transform: scaleY(0);
    }
    100% {
        -webkit-transform: scaleY(1);
                transform: scaleY(1);
    }
}

/* Nav Checkbox toggle switch  @prefixed
   ========================================================================== */

/* Set :not(checked)/:checked animation for icon in container.
 * This applies custom animation to two opposing icons that appear/disappear
 * on toggle of its parent input/label control element.
 *
 * Icon is for mobile display only, as checkbox state is displayed by the
 * pseudo state indicators from 576px and up.
 */

/* When checked, animate the 'on' radio button icon in. */

#toggle-all:checked + label .show-swap {
    position: relative;

    -webkit-transform: rotateZ(180deg);
        -ms-transform: rotate(180deg);
            transform: rotateZ(180deg);

    -webkit-animation: appear-90 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;
            animation: appear-90 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;
    -webkit-transition: all var(--flashing) var(--glide) var(--short);
         -o-transition: all var(--flashing) var(--glide) var(--short);
            transition: all var(--flashing) var(--glide) var(--short);
}

/* When not checked, animate the 'on' radio button icon out. */

#toggle-all:not(checked) + label .show-swap {
    position: relative;

    -webkit-animation: disappear-90 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;
            animation: disappear-90 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;
    -webkit-transition: all var(--flashing) var(--glide) var(--short);
         -o-transition: all var(--flashing) var(--glide) var(--short);
            transition: all var(--flashing) var(--glide) var(--short);
}

/* When checked, animate the 'off' radio button icon out.
 * The reverse direction visually works for circular icons.
 */

#toggle-all:checked + label .hide-swap {
    position: relative;

    -webkit-transform: rotateZ(180deg);
        -ms-transform: rotate(180deg);
            transform: rotateZ(180deg);

    animation: appear-90 var(--flashing) var(--swoop) var(--early) 1 normal reverse running;
    -webkit-transition: all var(--flashing) var(--glide) var(--short);
         -o-transition: all var(--flashing) var(--glide) var(--short);
            transition: all var(--flashing) var(--glide) var(--short);
}

/* When not checked, animate the 'off' radio button icon in. */

#toggle-all:not(checked) + label .hide-swap {
    position: relative;

    animation: disappear-90 var(--flashing) var(--swoop) var(--early) 1 normal reverse running;
    -webkit-transition: all var(--flashing) var(--glide) var(--short);
         -o-transition: all var(--flashing) var(--glide) var(--short);
            transition: all var(--flashing) var(--glide) var(--short);
}

/* Toggle icon disappear animation keyframes */

@-webkit-keyframes disappear-90 {
    0% {
        -webkit-transform: rotateZ(0);
                transform: rotateZ(0);
        -webkit-transform: scaleX(1);
                transform: scaleX(1);
        opacity: 1;
    }
    100% {
        opacity: 0;
        -webkit-transform: rotateY(1.571rad);
                transform: rotateY(1.571rad);
        -webkit-transform: rotateZ(180deg);
                transform: rotateZ(180deg);
        -webkit-transform: scaleX(0);
                transform: scaleX(0);
    }
}

@keyframes disappear-90 {
    0% {
        -webkit-transform: rotateZ(0);
                transform: rotateZ(0);
        -webkit-transform: scaleX(1);
                transform: scaleX(1);
        opacity: 1;
    }
    100% {
        -webkit-transform: rotateY(1.571rad);
                transform: rotateY(1.571rad);
        -webkit-transform: rotateZ(180deg);
                transform: rotateZ(180deg);
        -webkit-transform: scaleX(0);
        transform: scaleX(0);
        opacity: 0;
    }
}

/* Toggle icon appear animation keyframes */

@-webkit-keyframes appear-90 {
    0% {
        -webkit-transform: rotateY(1.571rad);
                transform: rotateY(1.571rad);
        -webkit-transform: rotateZ(180deg);
                transform: rotateZ(180deg);
        -webkit-transform: scaleX(0);
        transform: scaleX(0);
        opacity: 0;
    }
    100% {
        -webkit-transform: rotateZ(0);
                transform: rotateZ(0);
        -webkit-transform: scaleX(1);
                transform: scaleX(1);
        opacity: 1;
    }
}

@keyframes appear-90 {
    0% {
        -webkit-transform: rotateY(1.571rad);
                transform: rotateY(1.571rad);
        -webkit-transform: rotateZ(180deg);
                transform: rotateZ(180deg);
        -webkit-transform: scaleX(0);
                transform: scaleX(0);
        opacity: 0;
    }
    100% {
        -webkit-transform: rotateZ(0);
                transform: rotateZ(0);
        -webkit-transform: scaleX(1);
                transform: scaleX(1);
        opacity: 1;
    }
}

/* ==========================================================================
   Body footer configs
   ========================================================================== */

/* The body's footer contains link elements that are styled to directly respond
 * to the the global events.
 *
 * Moves to "occupy" the region of the body nav when menu is on, and when
 * landscape mode is toggled.
 */

/* Style default container and styles to footer and elements within it. */

.body-footer {
    position: fixed;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1030;

    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;

    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;

    margin-top: auto;
    padding-left: var(--margin);
    padding-right: var(--margin);

    transition: all .75s var(--glide) 0s;
}

/* Declare transition styles to the footer items. */

.footer-right,
.footer-left,
.footer-item {
    transition: all .1s var(--glide) 0s;
}

.footer-text,
.footer-copyright,
.footer-author {
    transition: all .75s var(--glide) var(--early);
}

.footer-left,
.footer-right {
    text-align: center;
    justify-content: center;
}

.footer-text.text-label {
    display: none;
}

.footer-left {
    margin-right: auto;
}

.footer-right {
    margin-left: auto;
}

.footer-item {
    display: inline-block;

    margin-top: 0;
    margin-bottom: 1rem;
    margin-right: 0;

    text-align: center;
}

.footer-icon.filled-icon {
    display: none;
}

.footer-item:nth-child(2) {
    margin-left: calc(100vw / 5.25);
}

.footer-author {
    position: relative;
    font-family: monotalic, sans-serif;
    text-transform: uppercase;
}

/* This extends the styling from the `.ribboneto` scope.
 * Sets a "highlighter" positioned over author name as in landing section.
 *
 * Border color to be applied as response to global events.
 */

.footer-author:after {
    position: absolute;
    content: "";
    z-index: -1;

    left: -0.5em;
    top: 0.1em;
    /*border-bottom: 0.5em solid #fff200;*/

    width: 100%;
}

/* Footer :checked and .show events
   ========================================================================== */

/* If :checked, and when body-nav.show, highlight the footer-author element. */

.body-nav.show ~ .body-footer .footer-author:after,
#toggle-all:checked ~ .body-footer .footer-author:after {
    border-bottom: 0.5em solid #fff200;
}

/* If :checked, push the footer down to the bottom of the body. */

#toggle-all:checked ~ .body-footer {
    position: static;
    padding-bottom: 1rem;
}

/* If :checked, highlight the footer-author element. */

#toggle-all:checked ~ .body-footer .footer-author:after {
    border-bottom: 0.5em solid #fff200;
}

/* Bring the copyright element to the left when nav is shown
 * This is done by flipping the flex direction.
 */

.body-nav.show ~ .body-footer {
    flex-direction: row-reverse;
    width: var(--vw-navwidth) !important;
    padding-left: calc(var(--padding) + .5rem);

    color: var(--deep-1);
    transition: all .75s var(--glide) 0s;
}

/* Push elements accordingly when nav is shown. */

.body-nav.show ~ .body-footer .footer-left .footer-item:first-child,
.body-nav.show ~ .body-footer .footer-left .footer-item:nth-child(2) {
    margin-left: calc(25vw / 6);
}

.body-nav.show ~ .body-footer .footer-right {
    margin: 0;
}

.body-nav.show ~ .body-footer .footer-text,
.body-nav.show ~ .body-footer .footer-text.text-label,
.body-nav.show ~ .body-footer .footer-copyright {
    display: none;
}

/* Swap hide the outline icon when nav is shown. */

.body-nav.show ~ .body-footer .footer-icon.outline-icon {
    display: none;
}

/* Show the filled icon when nav is shown, and change to deeper color. */

.body-nav.show ~ .body-footer .footer-icon,
.body-nav.show ~ .body-footer .footer-icon.filled-icon {
    display: inline-block;
    color: var(--deep-2);
}

/* Render bolder author name when nav is shown. */

.body-nav.show ~ .body-footer .footer-author {
    font-weight: 500;
}

/* Footer configs for global events
   ========================================================================== */

@media (min-width: 1200px) {
    .body-nav.show ~ .body-footer .footer-left .footer-item:first-child,
    .body-nav.show ~ .body-footer .footer-left .footer-item:nth-child(2) {
        margin-left: calc(25vw / 5 + 3vh);
    }

    .footer-text.text-label {
        display: inline-block;
    }
}

/* Regardless of all states, bring the footer to the nav region at landscape. */

@media (max-width: 991.98px) and (orientation: landscape) {
    .body-footer,
    .body-nav.show ~ .body-footer,
    #toggle-all:not(checked) ~ .body-footer,
    #toggle-all:checked ~ .body-footer {
        position: fixed;
        -webkit-box-orient: horizontal;
        -webkit-box-direction: reverse;
            -ms-flex-direction: row-reverse;
                flex-direction: row-reverse;
        width: var(--vw-navwidth) !important;
        padding-left: calc(var(--padding) + .5rem);
        padding-bottom: 0;
        color: var(--deep-1);
    }

    .footer-left .footer-item:first-child,
    .footer-left .footer-item:nth-child(2) {
        margin-left: 2rem;
    }

    .footer-text,
    .footer-copyright {
        display: none;
    }

    .footer-author {
        font-weight: 500;
    }

    .footer-author:after {
        border-bottom: 0.5em solid #fff200;
    }

    .footer-right {
        margin: 0;
    }

    .footer-icon.outline-icon {
        display: none;
    }

    .footer-icon,
    .footer-icon.filled-icon {
        display: inline-block;
        color: var(--deep-2);
    }

    /* Add margin to the body-nav for the footer to "occupy". */

    .nav-outer-body {
        margin-bottom: 3.5rem;
        transition: all .75s var(--glide) 0s;
    }
}

@media (min-width: 768px) {
    .body-nav.show .nav-outer-body {
        margin-bottom: 3.5rem;
        transition: all .75s var(--glide) 0s;
    }
}

@media (min-width: 576px) and (max-width: 767.98px) {
    .body-nav.show ~ .body-footer .footer-right .footer-item {
        display: none;
    }
}

@media (max-width: 767.98px) {
    .body-footer {
        -ms-flex-negative: 0;
            flex-shrink: 0;
        height: 3rem;
        padding-left: 1rem;
        padding-right: 1rem;

        position: -webkit-sticky;
        position: sticky;
        padding-bottom: .2rem;
        margin-top: 8rem;
        bottom: unset;
    }

    .footer-item:nth-child(2){
        display: none;
    }

    .body-nav.show ~ .body-footer {
        flex-direction: row;
        margin-left: 25vw;
        transition: all .75s var(--glide) 0s;
    }
    .body-nav.show ~ .body-footer .footer-right {
        margin-right: 0;
    }
}

/* ==========================================================================
   Master dashboard state/landscape mode styles
   ========================================================================== */

/*
 * On tablet screens and lower, when viewport width is larger than height,
 * force side menu to show, and trigger expand all static state.
 *
 * Declares box shadow blur properties to the same values declared when
 * #toggle-all is :checked.
 * This calls the `nav.show` and the `collapse.show` animations via its
 * default/collapse selectors, preventing calls to local boolean states.
 * This selects miscellaneous elements previously set when #toggle-all is :checked
 * to appear in the same manner but traversing a non-boolean selector, as
 * the media query is itself the boolean selector.
 */

@media (max-width: 991.98px) and  (orientation: landscape) {
    .body-main {
        --blur-xs: 2px;
        --blur-sm: 3px;
        --blur-md: 6px;

        position: static !important;
        overflow: visible !important;
        padding-left: 0 !important;
        padding-right: 0 !important;
    }

    article {
        --outlines: transparent;
    }

    [data-parent="#resumeStack"].collapse:not(.show),
    [data-parent="#resumeStack"].show {
        --height: 100%;
        height: var(--height);

        -webkit-animation: show-event .75s var(--glide) 0s 1 normal forwards running;
        animation: show-event .75s var(--glide) 0s 1 normal forwards running;
        -webkit-transition:
                all .3s var(--zip) 0s,
                -webkit-box-flex .1s var(--swoop) 0s;
        transition:
                all .3s var(--zip) 0s,
                -webkit-box-flex .1s var(--swoop) 0s;
        -o-transition:
                all .3s var(--zip) 0s,
                flex .1s var(--swoop) 0s;
        transition:
                all .3s var(--zip) 0s,
                flex .1s var(--swoop) 0s;
        transition:
                all .3s var(--zip) 0s,
                flex .1s var(--swoop) 0s,
                -webkit-box-flex .1s var(--swoop) 0s,
                -ms-flex .1s var(--swoop) 0s;
    }

    .body-nav.show ~ .body-main,
    .body-nav:not(.show) ~ .body-main {
        -webkit-animation: main-shrink .75s var(--glide) 0s 1 normal forwards running;
                animation: main-shrink .75s var(--glide) 0s 1 normal forwards running;
        -webkit-transition: all var(--flashing) var(--zip) var(--early);
             -o-transition: all var(--flashing) var(--zip) var(--early);
                transition: all var(--flashing) var(--zip) var(--early);
    }

    .body-nav.collapse:not(.show) {
        display: block;

        -webkit-animation: nav-in .75s var(--glide) 0s 1 normal forwards running;
                animation: nav-in .75s var(--glide) 0s 1 normal forwards running;
        -webkit-transition: all var(--flashing) var(--zip) var(--early);
             -o-transition: all var(--flashing) var(--zip) var(--early);
                transition: all var(--flashing) var(--zip) var(--early);
    }

    .menu-icon {
        opacity: .2;
    }

    article header .header-icon {
        display: none;
    }

    article header,
    #nav-button,
    #toggle-all + label {
        pointer-events: none;
        cursor: default;
    }

    .list-h4 {
        opacity: 1;
        pointer-events: auto;
        cursor: pointer;
    }
}

/* ==========================================================================
   Icon button boolean configs
   ========================================================================== */

/* Swap the visibility of icon pairs upon toggle of expand/collapse.
 * The `.open` and `.closed` classes are added to either of two ion-icons in
 * each article's header.
 *
 * This boolean class is also added to the custom icon in the summary/details
 * scope.
 */

/* Render .open to be hidden by default  */

.open {
    display: none;
}

/* Hide .closed when section is expanded */

details[open] .closed,
[data-toggle="collapse"][aria-expanded="true"] .closed {
    display: none;
}

/* Show .open when section is expanded */

details[open] .open,
[data-toggle="collapse"][aria-expanded="true"] .open {
    display: block;
    color: var(--deep-1);
}


/* ==========================================================================
   Master container styles
   ========================================================================== */

/**
 * Neumorphic style to box model.
 *
 * These classes achieve the global aesthetic of containers in the project.
 *
 * CREDIT: (assistance) (https://css-tricks.com/neumorphism-and-css/)
 * CREDIT: (assistance) Shadow generator https://neumorphic.design/
 *
 */

/* The `headline-content` class is attached to h4 elements.
 * Renders a headline that is a signature for each article-section
 */

.headline-content {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: end;
        -ms-flex-align: end;
            align-items: flex-end;

    padding: 5rem 1rem 1rem;
    margin-bottom: .5rem;
    border-radius: var(--radius-2);
}

/*
 * General inset wrapper.
 *
 * This immediately drops an element into an inset within an otherwise flat
 * canvas.
 *
 * Applied generously to elements across scales.
 */

.inset-container {
    overflow: hidden;

    padding: .5rem;
    border-radius: .75rem;

    -webkit-box-shadow:
            inset -5px -8px var(--blur-md) 0 rgba(255, 255, 255, 0.5),
            inset 5px 8px var(--blur-md) 0 rgba(0, 0, 0, 0.3);

    box-shadow:
            inset -5px -8px var(--blur-md) 0 rgba(255, 255, 255, 0.5),
            inset 5px 8px var(--blur-md) 0 rgba(0, 0, 0, 0.3);
}

/* The `.inset-item` class applies signature aesthetic via its :after
 * pseudo class.
 */

.inset-item {
    position: relative;

    border-radius: .6rem;
    border: none;
}

/* Attaches styles to any `inset-item`. This is used across scales and
 * elements through the site.
 */

.inset-item:after {
    position: absolute;
    z-index: 1;
    top: 0;
    right: 0;
    bottom: 0;

    content: "";
    width: 100%;
    height: 100%;

    border-radius: .6rem;

    background: var(--gradient-2);
}

/*
 * General outset wrapper.
 *
 * This immediately elevates an element from a canvas within an outset trim.
 *
 * Applied generously to elements across scales.
 */

.outset-container-2 {
    overflow: hidden;
    padding: .5rem;

    border-radius: .6rem;
    border-color: #F2F1EF;

    background: var(--gradient-1);

    -webkit-box-shadow:
            0 -8px var(--blur-sm) rgba(0, 0, 0, 0.2),
            0 6px var(--blur-sm) rgba(0, 0, 0, 0.4);

    box-shadow:
            0 -8px var(--blur-sm) rgba(0, 0, 0, 0.2),
            0 6px var(--blur-sm) rgba(0, 0, 0, 0.4);
}

/* Style general icon wrapper */

.inset-inner {
    background: var(--gradient-3);

    -webkit-box-shadow:
            0.3px 0.3px var(--blur-sm) rgba(237, 238, 243, 0.1),
            -0.3px -0.3px var(--blur-sm) rgba(239, 241, 245, 0.1);
    box-shadow:
            0.3px 0.3px var(--blur-sm) rgba(237, 238, 243, 0.1),
            -0.3px -0.3px var(--blur-sm) rgba(239, 241, 245, 0.1);
}

/* Style variable icon wrapper */

.inset-container-6 {
    overflow: hidden;

    border-radius: 50%;
    background: var(--gradient-2);

    -webkit-box-shadow:
            inset 0 3.3px var(--blur-sm) #B0B2B5,
            inset 0 -3.3px var(--blur-sm) #FFFFFF;

    box-shadow:
            inset 0 3.3px var(--blur-sm) #B0B2B5,
            inset 0 -3.3px var(--blur-sm) #FFFFFF;
}


/* ==========================================================================
   Global button/link/CTA wrappers
   ========================================================================== */

/* Style general button class */

.btn {
    background-color: transparent;
    border: none;
    padding: .5rem;
    border-radius: .6rem;
}

/* Style general cta button icons */

.social-icon,
.icon-link,
.link-icon {
    text-shadow: #fff 0 1px 0;
    -webkit-font-smoothing: antialiased;
    line-height: 1;
}

/* Increase shadow y-offset for icons in side menu */

.nav-links .social-icon {
    text-shadow: #fff 0 2px 0;
}

/* Change base shade for navigation-section icons */

.nav-content .link-icon {
    text-shadow: #aaa 0 2px 0;
}

/* Social links/button style variables
   ========================================================================== */

/* Style social links list items in intro section. */

.social-links {
    width: 100%;
    padding-top: .5rem;

    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    list-style: none;
}

.social-links li .social-icon {
    z-index: 8;
    border-radius: 50%;
    padding: .6rem;

    font-size: 1rem;
    -webkit-font-smoothing: antialiased;
    color: #4f4f4f;

    text-align: center;
    text-shadow:
            0 3px 0 0 #A4A4A4,
            0 -4px 0 0 #fafafa;

    -webkit-box-shadow:
            0 1px 0 0 #FAFAFA inset,
            0 -2px 0 0 #D7D7D6 inset;
    box-shadow:
            0 1px 0 0 #FAFAFA inset,
            0 -2px 0 0 #D7D7D6 inset;

}

.social-links .list-inline-item {
    width: 20%;
    padding: 0;
    margin: 0;
}

.social-links .btn {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;

    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;

    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;

    padding: 1rem;
    border-style: solid;
    border-color: #B6B6B6;
    border-width: 1px;
    border-radius: .5rem;
}

.social-links .inset-inner {
    padding: .4rem;
    border-radius: 50%;

    background: var(--gradient-3);

    -webkit-box-shadow:
            2px 2px var(--blur-xs) rgba(237, 238, 243, 0.1),
            -2px -2px var(--blur-xs) rgba(239, 241, 245, 0.1);
    box-shadow:
            2px 2px var(--blur-xs) rgba(237, 238, 243, 0.1),
            -2px -2px var(--blur-xs) rgba(239, 241, 245, 0.1);
}

@media (max-width: 575.98px) {
    .social-links .btn {
        height: 3.5rem;
        padding: 1rem;
    }

    .social-links .inset-inner {
        padding: .2rem;
    }

    .social-icon {
        font-size: .5rem;
    }
}

/* General CTA button and link styles
   ========================================================================== */

/* Make the CTA container inflexible relative to its sibling media lists. */

.activity-cta:not(.nav-links) {
    -webkit-box-flex: 0 !important;
        -ms-flex: 0 0 auto !important;
            flex: 0 0 auto !important;

    padding-left: 0;
}

/* Adjust `.address` list in personal contact info container. */

.address :not(:first-child) {
    padding-top: .625rem;
}

.activity-cta .outset-container-2 {
    vertical-align: middle;
}

.activity-cta .contact-text {
    text-align: center;
    padding-top: .625rem;
    vertical-align: middle;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    -ms-flex-line-pack: center;
        align-content: center;
}

.activity-cta .btn {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;

    height: 3rem;
    width: 3rem;

    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
}

/* Style global hover state of CTA buttons */

.btn:hover,
.btn:focus {
    background: var(--gradient-4);
    -webkit-box-shadow:
            0 -8px var(--blur-sm) rgba(0, 0, 0, 0.2),
            0 6px var(--blur-sm) rgba(0, 0, 0, 0.4),
            3px -8px var(--blur-sm) rgba(180, 180, 180, .7),
            -3px 6px var(--blur-sm) rgba(250, 250, 250, .4);
    box-shadow:
            0 -8px var(--blur-sm) rgba(0, 0, 0, 0.2),
            0 6px var(--blur-sm) rgba(0, 0, 0, 0.4),
            3px -8px var(--blur-sm) rgba(180, 180, 180, .7),
            -3px 6px var(--blur-sm) rgba(250, 250, 250, .4);
}

/* Style global 'pressed' state of CTA buttons */

.btn:active {
    background: var(--gradient-1);
    -webkit-box-shadow:
            0 -8px var(--blur-sm) rgba(0, 0, 0, 0.2),
            4px 8px var(--blur-sm) rgba(255, 255, 255, 0.3),
            0 6px var(--blur-sm) rgba(0, 0, 0, 0.4);
    box-shadow:
            0 -8px var(--blur-sm) rgba(0, 0, 0, 0.2),
            4px 8px var(--blur-sm) rgba(255, 255, 255, 0.3),
            0 6px var(--blur-sm) rgba(0, 0, 0, 0.4);
}

/* Style inner button container for icons */

.btn .inset-inner {
    padding: .2rem;
    border-width: 2px;
    border-radius: 50%;
}

/* Ensure padding accommodates <a> and <button> inset variety */

.connect-cta button > .inset-inner,
.activity-cta button > .inset-inner,
.activity-cta a i {
    padding: .6rem;
}

/* Set size for icons inside the inner cta wrapper.
 * This also style icons in the navigation menu.
 *
 * This is modified version of FontAwesome/MDB's `.fa-lg` class
 */

.icon-cta,
.link-icon,
.social-icon {
    font-size: 1.33333em;
    line-height: .75em;
    vertical-align: -.0667em;
}

@media (max-width: 575.98px) {
    .activity-cta button > .inset-inner,
    .activity-cta a > .inset-inner {
        padding: .2rem;
        border-radius: 50%;
    }

    .link-icon {
        font-size: 1.5rem;
        line-height: var(--navlink-height);
    }
}

/* Prevent the cta container from accommodating white space wrapping
 * Otherwise, the cta-text will respond to variable text lengths and will
 * vary in line heights per screen size.
 */

.activity-cta small {
    white-space: nowrap;
}

/* Attach arrow to CTA text description */

.activity-cta small:after {
    content: '\2192';
    display: inline-block;
    font-weight: 400;
    margin-left: 0.25rem;
}

/* Move text description to align right when CTA is hovered */

.activity-cta:hover,
.activity-cta:focus {
    text-align: right;
}

/* CTA configs for global events
   ========================================================================== */

/* Accommodate legibility of cta text when system-wide widths
 * are compromised
 */

.body-nav.show ~ .body-main .text-cta-hide {
    display: none;
}

@media (max-width: 991.98px) and  (orientation: landscape) {
    .text-cta-hide {
        display: none;
    }
}

/* CTA/Button configs for global events
   ========================================================================== */

/* Highlights CTA button three seconds after section.show */

section.collapse:not(.show) .activity-cta .btn {
    border-color: transparent;
    color: transparent;

    -webkit-transition: border-color 0.15s ease-in-out 0s;
         -o-transition: border-color 0.15s ease-in-out 0s;
            transition: border-color 0.15s ease-in-out 0s;
}

section.show .activity-cta .btn {
    border: 2px solid #8bbafe;
    outline: 0;

    -webkit-transition: border-color 0.15s ease-in-out 3s;
         -o-transition: border-color 0.15s ease-in-out 3s;
            transition: border-color 0.15s ease-in-out 3s;
}

/* Badge configs for global events
   ========================================================================== */

/* Hide media list badge stats when section:not(.show) */

section:not(.show) .data-stats {
    opacity: 0;

    -webkit-transition: opacity 0.3s var(--breeze) 0s;
         -o-transition: opacity 0.3s var(--breeze) 0s;
            transition: opacity 0.3s var(--breeze) 0s;
}

/* Reveal badge on section.show event and when checkbox is :checked */

#toggle-all:checked + label ~ main .data-stats,
section.show .data-stats {
    opacity: 1;

    -webkit-transition: opacity 0.15s var(--breeze) .75s;
         -o-transition: opacity 0.15s var(--breeze) .75s;
            transition: opacity 0.15s var(--breeze) .75s;
}

/* Force badge to be visible regardless at landscape query */

@media (max-width: 991.98px) and  (orientation: landscape) {
    section:not(.show) .data-stats {
        opacity: 1;
    }
}

/* Headline-content configs for global events
   ========================================================================== */

/* Apply global icon transitions to `headline-content` h4 headlines.
 * Moves a section's icon into its <h4> headline-content container when section
 * is shown.
 *
 * CREDIT (modified) inspired by on-show transitions in:
 *     https://codeconvey.com/pure-css-accordion-menu/
 */

/* Position icon on section.show event and when checkbox is :checked */

#toggle-all:checked ~ main .section.show,
section.show .section-icon {
    left: 260px;
}

/* Position icon at rest */

section.collapse:not(.show) .section-icon {
    left: 400px;
}

/* Set default styles of icon */

.section-icon {
    position: absolute;
    top: -17px;
    left: 390px;

    font-size: 180px;
    opacity: 0.08;

    text-shadow:
            -2px -4px var(--blur-sm) rgba(0, 0, 0, 0.5),
            2px 4px var(--blur-sm) rgba(0, 0, 0, 0.5),
            -3px -6px var(--blur-sm) rgba(255, 255, 255, 0.5),
            3px 6px var(--blur-sm) rgba(255, 255, 255, 0.5);

    -webkit-transition: all .3s .75s;
         -o-transition: all .3s .75s;
            transition: all .3s .75s;
}

/* Mirror icons for sections five (Examples) and seven (Connect)
 * This is purely to accommodate the selected graphic icon
 */

#target-five .section-icon,
#target-seven .section-icon {
    -webkit-transform: scaleX(-1);
    transform: scaleX(-1);
}

/* ==========================================================================
   Message form element styles
   ========================================================================== */

.form-control {
    background-color: var(--paper);
}

/* Set height of each form input (Name, Email) */

.connect-cta input {
    height: 3rem;
}

/* Style "Send" button in form element */

.form-group-button {
    display: flex;
    align-items: center;
    justify-content: center;

    width: 100%;
    height: 4rem;
}

/* ==========================================================================
   Quick-nav icon container
   ========================================================================== */

/* This styles a container with social links below the document outline
 * in the side menu .
 */

/* Link icons are replaced by text titles from small screens and up. */

@media (min-width: 576px) {
    .link-icon {
        display: none;
    }
}

.body-nav > outset-container-2 {
    padding: 0;
}

.nav-links {
    display: flex;
    flex-flow: row wrap;
    justify-content: space-evenly;
    align-items: center;
    margin-top: 1rem;
    padding: 0;
    border-radius: .6rem;

    background: var(--gradient-2);
}

.nav-links > * {
    flex: 0 0 auto;
    min-width: 16.666667%;
}

.nav-links .outline-item {
    padding: .35rem;
}

.nav-links .link-icon,
.nav-links .social-icon {
    padding: .675rem;
}

/* Quick nav configs for global events
   ========================================================================== */

@media (max-width: 575.98px) {
    .nav-links {
        padding: 0 !important;
    }
    .nav-links .outline-item {
        padding: .1rem;
        margin-bottom: 0;
    }
    .nav-links .inset-inner {
        padding: .1rem;
        border: 2px solid var(--paper);
    }

    .nav-links .link-icon,
    .nav-links .social-icon {
        padding: .675rem;
        color: var(--deep-2);
    }
}

@media (max-width: 991.98px) and  (orientation: landscape) {
    .nav-links > * {
        flex: 1;
    }
}

/* ==========================================================================
   Vertical scroller @prefixed
   ========================================================================== */

/**
 * Recent activity animated auto scroll.
 *
 * This creates a "newsfeed" reel out of vertically stacked list items that
 * take turn scrolling into a fixed frame upon toggle of .show and :checked.
 *
 * Features an activity item and a call to action.
 */

/**
 * Scroller container
 *
 * 1. Declare properties for scope
 * 2. Set total --scroll-height to be the sum of --item-height and --cta-height
 * 3. Set box model and presentation
 */

#vertical-scroller {
    --item-height: 9.75rem;
    --cta-height: 4.5rem;
    --scroll-height: calc(var(--item-height) + var(--cta-height));

    position: relative;
    overflow: hidden;

    height: var(--scroll-height);
    padding: 0;
    margin: 0 auto;
    background: transparent;
    border-radius: .75rem;

    -webkit-box-orient: vertical;
        -webkit-box-direction: normal;
            -ms-flex-direction: column;
                flex-direction: column;
    -ms-flex-line-pack: start;
        align-content: start;

    background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.2)), to(rgba(255, 255, 255, 0.5)));
    background: -o-linear-gradient(top, rgba(0, 0, 0, 0.2), rgba(255, 255, 255, 0.5));
    background: linear-gradient(180deg, rgba(0, 0, 0, 0.2), rgba(255, 255, 255, 0.5));

    -webkit-box-shadow:
            0 3.3px var(--blur-xs) rgba(0, 0, 0, 0.3),
            0 -3.3px var(--blur-xs) rgba(255, 255, 255, 0.5),
            inset 0 2px 0 rgba(255, 255, 255, 1);

    box-shadow:
            0 3.3px var(--blur-xs) rgba(0, 0, 0, 0.3),
            0 -3.3px var(--blur-xs) rgba(255, 255, 255, 0.5),
            inset 0 2px 0 rgba(255, 255, 255, 1);
}

/**
 * Scroll item
 *
 * Must only contain one '.activity-item' child and one '.activity-cta' child
 * Animates via the '#scroll-*' id selector
 *
 * 1. Set styles and positioning for all incoming scroll items
 * 2. Clear shadows inherited from li core configs
 */

#vertical-scroller .scroll-item {
    position:absolute;
    overflow: hidden;

    height: auto;
    padding: .625rem;
    margin-bottom: 0;
    border-radius: .6rem;

    background: transparent;

    -webkit-box-shadow: none;
        box-shadow: none;
}

/**
 * Activity item container
 *
 * Can contain any element to be featured in the feed, with local box-model adjustment on as-need basis.
 * Must precede '.activity-cta'
 *
 * 1. Set consistent height property as an instance of --item-height
 * 2. Scale down all child elements via font-size base rem
 */

.activity-item {
    overflow: hidden;
    height: var(--item-height);

    border: 2px solid #F7F7F7;
    border-radius: .6rem;

    font-size: .875rem;

    background: var(--gradient-4);

    -webkit-box-shadow:
            3px 0 0 rgba(180, 180, 180, .7),
            -3px 0 0 rgba(250, 250, 250, .4);

    box-shadow:
            3px 0 0 rgba(180, 180, 180, .7),
            -3px 0 0 rgba(250, 250, 250, .4);
}

/**
 * Activity CTA container
 *
 * Contains CTA button immediately following '.activity-item'
 * A local adjustment to global '.activity-cta' class
 *
 * 1. Set maximum height to be an instance of --cta-height (the balance
 *    of the total scroll item height)
 * 2. Scale down all child elements via font-size base rem
 * 3. Adjust '.btn' class to fit the smaller frame
 */

#vertical-scroller .activity-cta {
    max-height: var(--cta-height);
    font-size: .8125rem;
    text-align: left;
}

#vertical-scroller .activity-cta .btn {
    width: 2.5rem;
    height: 2.5rem;

    border-color: transparent !important;
}

/* Style hover states of CTA buttons in scroll items. */

#vertical-scroller .btn:hover .scroll-icon {
    color: var(--paper);
}

#vertical-scroller .activity-cta .btn:hover,
#vertical-scroller .activity-cta .btn:focus {
    background: transparent !important;
}

#vertical-scroller .language-item {
    font-size: .8125rem;
}

#vertical-scroller .text-cta {
    font-size: .8125rem;
    font-weight: 400;
}

#vertical-scroller .activity-cta > div:hover {
    text-align: right;
    justify-content: flex-end;
}

/* Adjustments to the scroller's CTA icon */

.scroll-icon {
    font-size: 1rem;
}

/* Scroller configs for global .show events
   ========================================================================== */

/* Make a little room for when side menu is toggled. */

#vertical-scroller .text-cta-show {
    display: none;
}

.body-nav.show ~ .body-main #vertical-scroller .text-cta-show {
    display: inline-block;
}

.body-nav.show ~ .body-main #vertical-scroller .activity-cta > div {
    justify-content: flex-end !important;
}

#vertical-scroller .activity-cta small:after {
    margin-left: 1rem;
}

@media (max-width: 991.98px) and  (orientation: landscape) {
    #vertical-scroller .text-cta-show {
        display: inline-block;
    }
}

/* Scroller event @prefixed
   ========================================================================== */

/**
 * This starts the animation whenever the hidden parent section is shown.
 *
 * 1. Whenever the '.show' class is added to the #target-one section element
 * 2. Whenever the the '#toggle-all' checkbox is 'checked'
 */

/* Offset three scroll items to the total height of the scroller container by default */

#scroll-one,
#scroll-two,
#scroll-three,
#scroll-four {
    top: var(--scroll-height);
}

/* Scroll the first item back in at the end of the animation */

#toggle-all:checked ~ main #scroll-one,
#target-one.show #scroll-one {
    -webkit-animation:
            scroll-in .75s var(--glide) 0s 1 normal forwards running,
            scroll-out .75s var(--glide) 4s 1 normal forwards running,
            scroll-in .75s var(--glide) 16s 1 normal forwards running;
    animation:
            scroll-in .75s var(--glide) 0s 1 normal forwards running,
            scroll-out .75s var(--glide) 4s 1 normal forwards running,
            scroll-in .75s var(--glide) 16s 1 normal forwards running;

    -webkit-transition: all var(--flashing) var(--zip) var(--early);
         -o-transition: all var(--flashing) var(--zip) var(--early);
            transition: all var(--flashing) var(--zip) var(--early);
}

/* Trigger scroll one in on landscape orientation */

@media (max-width: 991.98px) and  (orientation: landscape) {
    #scroll-one {
        -webkit-animation:
            scroll-in .75s var(--glide) 0s 1 normal forwards running;
        animation:
            scroll-in .75s var(--glide) 0s 1 normal forwards running;
    }
}

/* Second scroll item */

#toggle-all:checked ~ main #scroll-two,
#target-one.show #scroll-two {
    -webkit-animation:
            scroll-in .75s var(--glide) 4s 1 normal forwards running,
            scroll-out .75s var(--glide) 8s 1 normal forwards running;
    animation:
            scroll-in .75s var(--glide) 4s 1 normal forwards running,
            scroll-out .75s var(--glide) 8s 1 normal forwards running;

    -webkit-transition: all var(--flashing) var(--zip) var(--early);
         -o-transition: all var(--flashing) var(--zip) var(--early);
            transition: all var(--flashing) var(--zip) var(--early);
}

/* Third scroll item */

#toggle-all:checked ~ main #scroll-three,
#target-one.show #scroll-three {
    -webkit-animation:
            scroll-in .75s var(--glide) 8s 1 normal forwards running,
            scroll-out .75s var(--glide) 12s 1 normal forwards running;
    animation:
            scroll-in .75s var(--glide) 8s 1 normal forwards running,
            scroll-out .75s var(--glide) 12s 1 normal forwards running;

    -webkit-transition: all var(--flashing) var(--zip) var(--early);
         -o-transition: all var(--flashing) var(--zip) var(--early);
            transition: all var(--flashing) var(--zip) var(--early);
}

/* Fourth scroll item */

#toggle-all:checked ~ main #scroll-four,
#target-one.show #scroll-four {
    -webkit-animation:
            scroll-in .75s var(--glide) 12s 1 normal forwards running,
            scroll-out .75s var(--glide) 16s 1 normal forwards running;
    animation:
            scroll-in .75s var(--glide) 12s 1 normal forwards running,
            scroll-out .75s var(--glide) 16s 1 normal forwards running;

    -webkit-transition: all var(--flashing) var(--zip) var(--early);
            -o-transition: all var(--flashing) var(--zip) var(--early);
               transition: all var(--flashing) var(--zip) var(--early);
}

/* Scroller keyframes
   ========================================================================== */

/* Scroll in animation keyframes */

@-webkit-keyframes scroll-in {
    0% {
        top: calc(var(--scroll-height) + var(--cta-height));
    }
    100% {
        top: 0;
    }
}

@keyframes scroll-in {
    0% {
        top: calc(var(--scroll-height) + var(--cta-height));
    }
    100% {
        top: 0;
    }
}

/* Scroll out animation keyframes */

@-webkit-keyframes scroll-out {
    0% {
        top: 0;
    }
    100% {
        top: calc((var(--scroll-height) + var(--cta-height)) * -1);
    }
}

@keyframes scroll-out {
    0% {
        top: 0;
    }
    100% {
        top: calc((var(--scroll-height) + var(--cta-height)) * -1);
    }
}

/* ==========================================================================
   Landing section (#target-zero)
   ========================================================================== */

/* Custom 'onboarding' landing banner.
 *
 * Adjust landing section's position relative to the top of the screen.
 */

#target-zero {
    min-height: 50vh;
    padding-top: calc(100vh - var(--height) - 21rem - 5rem);
}

/* Dispose splash banner content upon click any header-button */

#target-zero:not(.show) {
    display: none;
}

@media (max-width: 767.98px) {
    #target-zero {
        padding-top: calc(100vh - var(--height) - 21rem - 5rem);
    }
}

/* Banner CTA container configs */

@media (min-width: 992px) and (orientation: landscape) {
    .banner-cta {
        width: 65%;
        position: absolute;
        top: 35vh;
        left: 0;
        right: 0;
        margin-top: -25%;
    }
}

@media (min-width: 576px) and (max-width: 767.98px) {
    .banner-cta {
        display: none;
    }
}

/* Box model container to set the limits of the landing section.
 * Contains the `.ribboneto-trial` scope and the landing  CTA
 * as separate siblings.
 */

.cover-banner {
    padding-right: 1rem;
    padding-left: 1rem;
    margin-right: auto;
    margin-left: auto;
}

/* The Landing section scope. A container with the site's
 * h1, h2, and contact a contact card.
 *
 * Text contained in headings are styled to accomplish design/
 * typography specifications where the semantic structure and
 * relative meaning of such headings are not affected.
 * Reserved for malleability of typographic features.
 * Headings are thus given a reboot at the beginning of style.css
 * to wrap the consistent heading text they present throughout the
 * site.
 *
 *
 * The '.ribboneto-trial` scope features a landing summary section
 * styled as the header of a printed CV. Content and type
 * configurations are taken from the owner's CV pdf, which is
 * accessible via the CTA link following this scope section.
 *
 * Ribboneto allows <h1> and <h2> to function as columns.
 * <h1> is a full-width row containing the owner's name.
 * <h2> is a col-8 that shares a row with `.cover-title` class.
 * <h2> conveys the CV's sub-heading: "CV and Work Samples Developed
 * for The Web"
 * This subheading is split into two "phrase spans" with distinct
 * typographic styles.
 *
 * The `.cover-title` class is a col-4 that shares a row with <h2>
 * Cover-title is a landing "stamp", conceived as prescriptive, stats
 * typically printed on the top of candidate CVs, and is a rendered
 * in the doc outline as the supporting sub-text of the overall site.
 * With these elements, and the CTA container in the next scope,
 * the landing page runs as a self-sufficient banner, holding the most
 * important info and content for the owner's and a user's objective --
 * info and CV -- while simultaneously offering immediate invitation.
 * This scope is to accomplish an overwhelming assertion that content
 * within the collapsed sections complete a thorough and most valuable
 * curriculum vitae (developed for the web, of course.)
 */

.ribboneto-trial {
    --ribs-lh: 1.2535;
    --ribspace: 2px;
    --h1-height: 3rem;
    --h1-top-pad: 3vh;
    --h2-top-pad: 2vh;
    --ribbon-datum: calc(100vh - 88vh + var(--h2-top-pad));

    flex-direction: row;
    justify-content: start;
}

.ribboneto-trial a {
    color: var(--deep-1);
}

/* Establishes type configs for two features texts in the
 * ribbon.
 */

.ribbon-fist {
    font-family: Monotalic, sans-serif;
    font-feature-settings: 'c2sc', 'smcp';
    text-transform: uppercase;
    font-weight: 300;
}

/* Styles array of candidate info. */

.ribbon-extended {
    font-size: .875rem;
    line-height: 1rem;
}

/* Complete styling of a linear certificate, */

.ribbon-fragment {
    min-height: calc(2em + var(--ribspace) * 1);
    border-top: thin solid var(--raisin);

    display: flex;
    align-items: center;
    padding: .5em 0;

    font-size: 11px;
    line-height: var(--ribs-lh);
}

.ribbon-start {
    border: none;
}

/* Utilizes minimal ribbon attributes (border and spacing)
 * for decorative purposes.
 */

.ribbon-unravel {
    border-top: thin solid var(--raisin);
    font-size: 11px;
    line-height: 1.2535;
}

/* Main heading styles.
 *
 * CREDIT (slightly modified) How to "highlight" text.
 *     https://medium.com/@codingdudecom/highlight-text-css-97331a5b71b5
 *
 * Includes highlighted text and  "highlighted as pseudo :before element.
 */

.ribbon-highlight {
    position: relative;
    margin: 0.1em;
    color: #4f4f4f;
    text-transform: uppercase;
    font-family: monotalic, sans-serif;
    font-weight: 300;

    white-space: nowrap;
    text-align: left;
}

.ribbon-highlight:before{
    content: "";
    z-index: -1;
    left: -0.5em;
    top: 0.1em;
    border-width: 0.5em;
    border-style: solid;
    border-color: #fff200;
    position: absolute;

    width: 66.66%;
    border-left: none;
    border-right: none;
    border-top-color: transparent;
}

/* Flex containers within the h2 scope. */

.cover-title,
.banner-text,
.banner-top,
.banner-bottom {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
}

.cover-datum {
    padding-top: 2vh;
}

.title-profile {
    display: flex;
    flex-direction: column;
    width: 25%;
    text-align: left;
    white-space: nowrap;
}

/*
 * Decorative element styles.
 *
 * The `.banner-text` class is contained in <h2>'s `.cover-title`
 * This controls the positioning of characters that make up the second
 * half of the <h2> subtitle.
 *
 * Banner-text assigns flex behavior elements carefully segmented in
 * multiple <span>s.
 * Banner-text's immediate children are the `.banner-top`, `.banner-middle`
 * and `.banner-bottom`; each of which contain syllables wrapped in spans
 * that hold the desired result.
 */

.banner-text {
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    margin: 0 auto;
    padding-bottom: 1.5rem;

    text-transform: lowercase;

    font-family: Monotalic, sans-serif;
    font-style: normal;

    color: var(--raisin);
    font-size: .875rem;
}

.banner-top {
    -webkit-box-orient: vertical;
        -webkit-box-direction: normal;
            -ms-flex-direction: column;
                flex-direction: column;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;

    margin-bottom: 3rem;
    line-height: .875rem;
}

.banner-bottom {
    -webkit-box-orient: vertical;
        -webkit-box-direction: normal;
            -ms-flex-direction: column;
                flex-direction: column;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;

    margin-top: auto;
    line-height: .9rem;
}

.banner-middle {
    position: absolute;

    margin-top: 1.5rem;
    padding-top: 1rem;
    padding-right: 1.5rem;
    padding-bottom: 0;

    opacity: 1;
    line-height: var(--ribs-lh);

    font-style: italic;
    font-size: 11px;
}

/* Helper container for duplicate "ed" in "developed"
 * See index.html.
*/

.banner-pseudo {
    font-family: monotalic, sans-serif;
    font-size: 11px;
    line-height: var(--ribs-lh);
    border-top: thin solid var(--raisin);
}

/* Controls dual parentheses enclosing banner-text. */

.string-head,
.string-tail {
    position: absolute;
    display: inline-block;
    font-family: attribute-mono, sans-serif;
    font-size: 1.2rem;
    font-weight: 600;
    color: var(--raisin);
}

.string-head {
    margin-top: -.3rem;
    margin-left: -2vw;
}

.string-tail {
    margin-top: -.3rem;
    padding-bottom: -.3rem ;
    margin-left: 1vw;
}

.banner-pseudo {
    display: none;
}

/*
 * Download CTA at landing.
 *
 * The CTA to download the owner's CV is displayed
 * via the flagship structure and classes used throughout
 * the project.
 * Variable adjustments are made as required.
 * */

.banner-cta .value {
    font-family: attribute-mono, sans-serif;
}

.banner-cta .value i {
    color: var(--deep-4);
}

.banner-cta .inset-inner {
    background: #ddd21a;
}

.icon-landing {
    color: #4f4f4f;
}

section.show .banner-cta .btn {
    border: 2px solid #fff200;
    outline: 0;
    -webkit-transition: border-color 0.15s ease-in-out 3s;
    -o-transition: border-color 0.15s ease-in-out 3s;
    transition: border-color 0.15s ease-in-out 3s;
}

/* Styles to unfold the banner on extra wide screens. */

@media (min-width: 992px) and (orientation: landscape) {
    .banner-top {
        flex-direction: row;
        margin-bottom: 0;
        line-height: 1;
        justify-content: space-around;
    }

    .banner-bottom {
        flex-direction: row;
        margin-top: 0;
        line-height: 1;
        justify-content: space-around;
    }

    .banner-middle {
        position: absolute;
        display: none;
        text-align: left;
        font-style: normal;
        padding-right: 1.5rem;
        margin-top: -40rem;
        padding-top: 0;
        padding-bottom: 600px;
        opacity: 0;
    }

    .banner-pseudo {
        display: flex;
    }
}

@media (min-width: 1200px) {
    .title-profile {
        margin-left: calc(100vw - 33vw - 3rem);
    }
}

@media (max-width: 575.98px) {
    .ribboneto-trial,
    .banner-cta {
        margin-left: 1rem;
        margin-right: 1rem;
    }

    .cover-title.title-sub {
        width: 100% !important;
    }

    .cover-title.title-profile {
        width: 100% !important;
        flex: 0;
    }

    .banner-cta .value {
        font-size: .875rem;
        margin-bottom: 1rem;
    }

    .banner-cta {
        padding-top: .375rem;
        padding-bottom: .375rem;
    }

    .banner-cta .contact-text,
    .banner-cta .btn {
        height: 40px;
    }

    .ribbon-fragment,
    .ribon-extended {
        font-size: 10px;
        line-height: 1.2555;
    }
}

/* ==========================================================================
   INTRODUCTION SECTION @prefixed (#target-one)
   ========================================================================== */

/* Hide profile photo and vertical scroller until medium screens
 * Important not to set display to none as the vertical pseudo rails rely
 * on section.inner-right */

@media (max-width: 767.98px) {
    #target-one .outer-body:nth-child(2),
    #target-one .outer-body:nth-child(2) .inner-body {
        padding: 0;
        margin: 0;
        border: 0;
        background: none;
        -webkit-box-shadow: none;
                box-shadow: none;
    }
}

#target-one a { color: var(--denim); }

#target-one p {
    font-weight: 300;
    -webkit-font-smoothing: antialiased;
}

#target-one p b:nth-of-type(2) {
    color: var(--raisin);
    text-shadow:var(--slate) 0 .5px 0;
}

#target-one p b:nth-of-type(1) {
    color: var(--ruby);
    text-shadow: var(--red)0 .5px 0;
}

#target-one p b:nth-of-type(3) {
    color: var(--denim);
    text-shadow: var(--blue) 0 .5px 0;
}

#target-one p b:nth-of-type(4) {
    color: var(--canary);
    text-shadow: var(--yellow) 0 .5px 0;
}

#target-one p b:nth-of-type(5) {
    color: var(--moss);
    text-shadow: var(--green) 0 .5px 0;
}

.image-container {
    width: 13rem;
    height: 13rem;

    padding: 1rem;
    margin: 0 auto;

    border: 1px solid #F7F6F4;
    border-radius: 50%;

    background: #F2F1EF;
    -webkit-box-shadow:
            inset 5.11px 5.11px var(--blur-md) #D1D0CF,
            inset -5.11px -5.11px var(--blur-md) #FFFFFF;
    box-shadow:
            inset 5.11px 5.11px var(--blur-md) #D1D0CF,
            inset -5.11px -5.11px var(--blur-md) #FFFFFF;
}

.image-container > img {
    height: 100%;
}

/* ==========================================================================
   Media content container
   ========================================================================== */

/* Make section.inner-right a flex container, turning h5, ul and .activity-cta into flex items */
/* applies to section.inner-right */

.media-content {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-flow: column;
            flex-flow: column;
}

.media-content h5 {
    text-align: right;
}

/* Set growth behavior to h5, ul and .activity-cta */

.media-content > * {
    -webkit-box-flex: 1;
        -ms-flex: 1 1 auto;
            flex: 1 1 auto;
}

/* Afford the last section item ('.activity-cta') the ability to flex on its own terms */

.media-content > :last-child {
    -webkit-box-flex: 0;
        -ms-flex: 0 0 auto;
            flex: 0 0 auto;
}

/* Media list element configs
   ========================================================================== */

/* Apply global flex behavior and visual language to media list-groups */

.media-content > ul {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    overflow: hidden;

    padding: var(--radius-4);
    border-radius: var(--radius-3);

    list-style: none;

    -webkit-box-shadow:
            inset -5px -8px var(--blur-md) 0 rgba(255, 255, 255, 0.5),
            inset 5px 8px var(--blur-md) 0 rgba(0, 0, 0, 0.3);

    box-shadow:
            inset -5px -8px var(--blur-md) 0 rgba(255, 255, 255, 0.5),
            inset 5px 8px var(--blur-md) 0 rgba(0, 0, 0, 0.3);
}

.media-content > ul > * {
    margin-bottom: var(--radius-4);
}

.media-content > ul > li {
    -webkit-box-flex: 1;
        -ms-flex-positive: 1;
            flex-grow: 1;
    min-width: 50%;

    padding: var(--radius-3);
    border-radius: var(--radius-2);
    border-color: var(--paper);

    background: var(--powder);

    -webkit-box-shadow:
            0 -6.4px var(--blur-sm) rgba(0, 0, 0, 0.2),
            0 6px var(--blur-sm) rgba(0, 0, 0, 0.4);

    box-shadow:
            0 -6.4px var(--blur-sm) rgba(0, 0, 0, 0.2),
            0 6px var(--blur-sm) rgba(0, 0, 0, 0.4);
}

.list-content {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;

    width: 100%;
    padding: .25rem;

    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
}

.list-icon {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;

    padding-top: .25rem;
    padding-right: .25rem;

    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    -webkit-box-align: start;
        -ms-flex-align: start;
            align-items: start;
}

.list-icon ion-icon {
    color: var(--deep-1);
    --ionicon-stroke-width: 40px;
}

.list-icon ion-icon {
    font-size: 1.75rem;
    color: var(--deep-1);
}

.list-text {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;

    margin-left: 16.666667%;

    -ms-flex-pack: distribute;
        justify-content: space-around;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
}

section.inner-right > ul > li h6 {
    font-weight: 500;
    -webkit-font-feature-settings: 'smcp', 'c2sc';
            font-feature-settings: 'smcp', 'c2sc';
}

/* ==========================================================================
   Media list item
   ========================================================================== */

/**
 * Media list item.
 *
 * This styles the list items in every media list except for the #target-one section,
 * which is controlled by the '#vertical-scroller', and the #target-six section,
 * which is styled via the LinkedIn section.
 *
 * Typically includes an h6 with a 'detail-title' class,
 * and an an aside with a '.detail-stats' class.
 * The '.detail-stats' container wraps the '.stats-activity' badge list.
 *
 */

/* List item container */

.detail-item {
    display: flex;
    flex-wrap: wrap;
}

/**
 * Detail title container
 *
 * Contains '.icon-heading' and/or '.title-heading'  children.
 */

.detail-title {
    display: flex;
    padding-top: .25rem;
    padding-left: .5rem;
    margin-right: auto;
    margin-bottom: auto;
    min-width: 50%;
}

@media (max-width: 767.98px) {
    .detail-title {
        padding-top: .25rem !important;
    }
}

/* Set box model presentation for title and icon heading
 * This utilizes Bootstrap's gutter-x as a quick fix.
 */

.title-heading,
.icon-heading {
    padding: .25rem calc(var(--bs-gutter-x) / 2) .5rem;
}

/* Set atypical styles to icon-outline variety */

.icon-heading.icon-outline {
    padding-top: .25rem;
    padding-right: .25rem;

    font-size: 1.25rem;
    color: var(--deep-1);
    --ionicon-stroke-width: 40px;
}

@media (max-width: 575.98px) {
    .icon-heading.icon-outline {
        font-size: 1.5rem;
    }
}

/**
 * Detail stats container
 *
 * Typically assigned to the <aside> element and wraps the '.stats-activity' ul
 *
 * 1. Establish alignment of elements within
 * 2. Clear margin left in order to position elements to the right
 */

.detail-stats {
    align-self: center;
    margin-left: auto;
    margin-top: auto;
    padding-right: .8rem;

    line-height: 0;

    color: var(--deep-1);
}

/* Set typical icon label */

.icon-label {
    vertical-align: bottom;
    padding-left: 1rem;
    color: var(--deep-1);

    font-size: 1.1rem;
    --ionicon-stroke-width: 16px;
}

/**
 * Stats activity list container
 *
 * This configures a list of badges associated with a parent list item.
 * Local adjustments as required per '*-activity' class
 *
 */

.stats-activity {
    display: flex;
    flex-wrap: nowrap;
    overflow: hidden;

    width: 100%;
    padding-top: .25rem;
    padding-bottom: .5rem;
    margin-bottom: .5rem;

    align-items: center;
    justify-content: space-between;

    list-style: none;
}

.list-dates time {
    font-size: 0.8125rem;
    line-height: 1.1875rem;
}

.specialization-activity .stats-activity {
    margin-bottom: 0;
    justify-content: end;
}

.proficiency-activity .stats-activity {
    justify-content: end;
    padding-top: 0;
    padding-bottom: 0;
}

.proficiency-activity .icon-heading {
    font-size: 1.75rem;

    color: var(--deep-2);
    text-shadow: #fff 0 .5px 0, #D7D7D6 0 -.5px 0;
    -webkit-font-smoothing: antialiased;
}

.experience-activity .stats-activity {
    justify-content: end !important;
}

.repo-activity .stats-activity {
    text-wrap: none;
}

/* Data badges
   ========================================================================== */

/**
 * Attributes are assigned to elements that carry data to be presented as content
 * to facilitate label styling and streamline potential data assignments from
 * local or public databases in a future release.
 *
 * All custom [data-*] attributes are children of the '.data-stats' class.
 * Attributes in the repo section share the additional '.data-repo' class.
 */

/**
 * Typical badge label
 *
 * This styles the badge text label for badge items as a pseudo :before.
 * Labels are modeled after superscript/subscript positioning.
 * Content set to --label property by default; assign value within scope.
 *
 * The typical badge, from left to right, includes:
 * 1. icon-label (hardcoded ion-icon in index.html)
 * 2. text-label (pseudo :before element)
 * 3. badge-value (pseudo :after element)
 */

[data-awards-count]:before,
[data-honors-count]:before,
[data-coverage-project-count]:before,
[data-coverage-time]:before {
    position: relative;
    bottom: -.25em;

    vertical-align: baseline;

    font-size: .7rem;
    font-family: attribute-text;
    font-weight: 300;
    letter-spacing: .02rem;
    line-height: 0;

    color: var(--deep-1);
    content: var(--label);
}

/* Declare variable values for the custom property '--label' accessible
 * to and for the given attributes' scope.
 */

[data-honors-count] { --label: 'honors \00a0'; }
[data-awards-count] { --label: 'awards \00a0'; }
[data-coverage-time] { --label: 'years \00a0'; }
[data-coverage-project-count] { --label: 'projects \00a0'; }

/**
 * Typical badge value
 *
 * This styles the status badge value for all badges except repo stats as a
 * pseudo :after element. It is a bespoke appropriation of the Boostrap
 * '.badge' and '.badge-notification' classes.
 */

[data-awards-count]:after,
[data-honors-count]:after,
[data-coverage-time]:after,
[data-coverage-project-count]:after {
    display: inline-block;
    padding: .2em .45em;
    margin-top: -.1rem;
    margin-left: -.5rem;

    border-radius: 50rem;
    border: 2px solid var(--white);

    font-size: .75rem;
    font-family: attribute-mono, sans-serif;
    font-weight: 500;
    line-height: 1;
    text-align: center;
    white-space: nowrap;
    vertical-align: baseline;

    background-color: #fbfbfb;
    color: #757575;

    text-shadow:
            0 1px 0 0 #A4A4A4,
            0 -1px 0 0 #fafafa;

    box-shadow:
            inset 0 1px 0 rgba(0, 0, 0, 0.3),
            inset 0 -1px 0 rgba(255, 255, 255, 0.5);

    -webkit-transition: all .3s .75s;
    -o-transition: all .3s .75s;
    transition: all .3s .75s;
}

/* Set content to attr(*) and assign color for typical badge values */

[data-honors-count]:after { content: attr(data-honors-count); color: #f93154; }
[data-awards-count]:after { content: attr(data-awards-count); color: #1266f1; }
[data-coverage-time]:after { content: attr(data-coverage-time); color: #f93154; }
[data-coverage-project-count]:after { content: attr(data-coverage-project-count); color: #1266f1; }

/**
 * Repo badge value
 *
 * This styles the badge value for GitHub repository stats in a pseudo
 * :after element. It is a bespoke version of the Boostrap '.badge' class.
 *
 * Repo badges are <a> links to the scope's source.
 *
 * A typical repo badge, from left to right, includes:
 * 1. icon-label (hardcoded ion-icon in index.html)
 * 2. badge-value (pseudo :after element)
 */

[data-repo-status]:after,
[data-repo-commit-count]:after,
[data-repo-size]:after,
[data-repo-branch-count]:after {
    display: inline-block;
    padding: .25em .5em;
    font-size: .75em;
    font-weight: 600;
    line-height: 1;

    border-radius:50rem;

    text-align: center;
    white-space: nowrap;
    vertical-align: baseline;

    background-color: #FBFBFB;
    color: #757575;
}

/* Declare variable values for the custom property '--label' accessible
 * to and for the given attributes' scope.
 */

[data-repo-commit-count] { --label: '\00a0 commits'; }
[data-repo-size] { --label: '\00a0 mb'; }

/* Set content to attr(*) and label property for repo badge values */

[data-repo-size]:after { content: attr(data-repo-size) var(--label); }
[data-repo-branch-count]:after { content: attr(data-repo-branch-count); }
[data-repo-commit-count]:after { content: attr(data-repo-commit-count) var(--label); }
[data-repo-status]:after { content: attr(data-repo-status); }

/* Style project status colors based on provided status class.
 * Classes '.active' '.current' '.next' and '.prospective' are added to the parent list item
 * to effectively assign and select states of a project.
 */

.active [data-repo-status]:after { color: #00b74a; }
.current [data-repo-status]:after { color: #1266f1; }
.next [data-repo-status]:after { color: #f93154; }
.prospective [data-repo-status]:after { color: #b23cfd; }

/* Repo badge link hover state */

.data-repo:hover::after {
    background-color: #0d6efd;
    color: #e9ecef !important;
}

/* Set transparent hover states for the parent element.
 * This ensures that only the badge is highlighted, not the icon.
 */

.data-repo:hover {
    background-color: transparent;
}

/* Remove text label when side menu is active. */

.body-nav.show ~ .body-main .data-stats {
    --label: "" !important;
}

/* Progress bars
   ========================================================================== */

/**
 * GitHub's color and progress bar styles are used to directly convey language
 * coverage of a given repository.
 */

/* Language stats container */

.language-activity {
    margin: .5rem;
    padding-right: 1.5rem;
}

/* Language title container */

.language-item {
    display: inline-flex;
    flex-wrap: nowrap;
    align-items: center;

    margin-right: 1rem;

    font-size: .875rem;
}

/* Style icon dot between language titles */

.language-item ion-icon {
    font-size: 8px;
}

/**
 * Github language colors
 *
 * '.repo-*' color and '.progress-*' background color assigned to the dot
 * ion-icon and the corresponding progress bar, respectively.
 */

.repo-html{ color: #E14C30; }
.progress-html { background-color: #E14C30; }
.repo-css { color: #543D76; }
.progress-css { background-color: #543D76; }
.repo-python { color: #3973A3; }
.progress-python { background-color: #3973A3; }
.repo-javascript { color: #F1DF64; }
.progress-javascript { background-color: #F1DF64; }
.repo-typescript { color: #2b7489; }
.progress-typescript { background-color: #2b7489; }

/* ==========================================================================
   DETAILS/SUMMARY ELEMENT CONFIGS
   ========================================================================== */

summary::-webkit-details-marker {
    display: none;
}

details,
summary {
    position: relative;
    outline: none !important;
}

/* Hiding The disclosure widget */
/* https://medium.com/an-idea/the-details-of-a-dropdown-a817dc27e545 */

/* Style summary "read more" icon return transition */

details > summary .read-more-icon {
    position: relative;

    -webkit-animation: appear-225 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;
            animation: appear-225 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;

    -webkit-transition: all var(--flashing) var(--zip) var(--late);
    -o-transition: all var(--flashing) var(--zip) var(--late);
    transition: all var(--flashing) var(--zip) var(--late);
}

/* Style active summary "read more" icon active transition */

details[open] .read-more-icon {
    position: relative;

    -webkit-animation: disappear-225 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;
            animation: disappear-225 var(--flashing) var(--swoop) var(--early) 1 normal forwards running;

    -webkit-transition: all var(--passing) var(--zip) var(--early);
    -o-transition: all var(--passing) var(--zip) var(--early);
    transition: all var(--passing) var(--zip) var(--early);
}

/* Icon configs */

.read-more-icon {
    color: black;
    font-size: 32px;
}

/* Position "read more" container */

.read-more {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;

    -webkit-box-pack: end;
        -ms-flex-pack: end;
            justify-content: end;

    list-style: none;
    cursor: pointer;

    font-family: attribute-mono, sans-serif;
}

/* Type configs */

.read-more .read-text {
    margin-top: .5rem;
    padding-right: 1rem;

    font-size: .875rem;
    -webkit-font-feature-settings: 'smcp';
            font-feature-settings: 'smcp';
}

/* Hover state */

.read-text:hover {
    text-underline-color: #157FFC;
    text-underline: #157FFC !important;
    border-bottom: 1px solid #157FFC;
}

/* A bespoke dropdown summary item, combining elements from bs.min.css
 * No popper. */

.summary-content {
    position: absolute;
    z-index: 5;
    width: 68vw;

    -ms-flex-line-pack: end;
        align-content: end;
    padding: .5rem;
    margin: 1.125rem 0 0;

    border: 2px solid var(--white) !important;
    border-radius: .75rem;

    background-clip: padding-box;
    background: var(--pearl) !important;
    color: #212529;

    font-size: 1rem;
    text-align: left;

    list-style: none;

    -webkit-box-shadow:
            0 -8px var(--blur-sm) rgba(0, 0, 0, 0.2),
            0 6px var(--blur-sm) rgba(0, 0, 0, 0.4);

    box-shadow:
            0 -8px var(--blur-sm) rgba(0, 0, 0, 0.2),
            0 6px var(--blur-sm) rgba(0, 0, 0, 0.4);
}

.summary-item {
    padding: 5rem 1rem 1rem;
    margin-bottom: .5rem;
    border-radius: var(--radius-2);
    border: 1px solid var(--grey) !important;
    background: var(--white);
}

/* Adjust width of summary content when side menu is shown */

.body-nav.show ~ .body-main .summary-content {
    width: 40vw;
}

@media (max-width: 575.98px) {
    .summary-content {
        position: static;
        top: 0;
        right: 0;
        left: .4rem;

        width: 55vw;
        height: 40vh;
        overflow: scroll !important;
        -webkit-overflow-scrolling: touch;
        scroll-behavior: smooth;
    }
}

@media (min-width: 576px) and (max-width: 991.98px) {
    .summary-content {
        width: 40vw;
        overflow: scroll;
    }
}

/* Summary appear icon animation keyframes */

@-webkit-keyframes appear-225 {
    0% {
        -webkit-transform: rotateZ(225deg);
                transform: rotateZ(225deg);
    }
    50% {
        -webkit-transform: scaleX(0);
                transform: scaleX(0);
    }
    100% {
        -webkit-transform: scaleX(1);
                transform: scaleX(1);
    }
}

@keyframes appear-225 {
    0% {
        -webkit-transform: rotateZ(225deg);
                transform: rotateZ(225deg);
    }
    50% {
        -webkit-transform: scaleX(0);
                transform: scaleX(0);
    }
    100% {
        -webkit-transform: scaleX(1);
                transform: scaleX(1);
    }
}

/* Summary disappear icon animation keyframes */

@-webkit-keyframes disappear-225 {
    0% {
        -webkit-transform: scaleX(1);
                transform: scaleX(1);
    }
    50% {
        -webkit-transform: scaleX(0);
                transform: scaleX(0);
    }
    100% {
        -webkit-transform: rotateZ(225deg);
                transform: rotateZ(225deg);
    }
}

@keyframes disappear-225 {
    0% {
        -webkit-transform: scaleX(1);
                transform: scaleX(1);
    }
    50% {
        -webkit-transform: scaleX(0);
                transform: scaleX(0);
    }
    100% {
        -webkit-transform: rotateZ(225deg);
                transform: rotateZ(225deg);
    }
}

/* ==========================================================================
   Recommendations and awards sections
   ========================================================================== */

/**
 * Recommendation <blockquote>s and awards <li> are direct documentation with
 * assigned css rulesets from LinkedIn's public profile section.
 *
 * Minor adjustments are made to suit the site's global styles.
 *
 * CREDIT: (modified) Embed LinkedIn Recommendations with HTML and CSS
 *         https://www.damosdesigns.com/LinkedinRecommendationsOnWebsite/
 */

/* Configure first sub section to accommodate <summary> dropdown overflow */

#target-six .inner-left {
    overflow: scroll;
}

@media (min-width: 992px) {
    #target-six .outer-first {
        overflow: visible;
    }

    #target-six .inner-left {
        overflow: visible;
    }
}

/* Wrap LinkedIn elements in <figure> element with site signature styles */

figure {
    border-radius: .6rem;
    background: var(--gradient-2);
}

.pv-recommendation-entity:first-child {
    padding-top: 0;
    border-top: none;
}

.pv-recommendation-entity {
    margin-right: 0;
    display: flex;
    border-top: 1px solid #e6e9ec;
    padding: 16px 0;
}

/* Recommender image */

.pv-recommendation-entity img {
    border-radius: 50%;
}

.pv-recommendation-entity__header {
    width: 33%;
}

.pv-recommendation-entity__highlights {
    width: 66%;
    padding-left: 16px;
}

.pv-profile-wrapper a:visited {
    color: #fff;
}

.pv-profile-wrapper a {
    text-decoration: none;
}

.pv-recommendation-entity__member {
    display: block;
    overflow: auto;
    text-decoration: none;
}

a.pv-recommendation-entity__member {
    color: #fff;
    text-decoration: none;
    -webkit-transition: all .2s linear;
    transition: all .2s linear;
    border-bottom: 0 #fff;
}

/* Recommender name */

.t-16 {
    padding-top: 20px;
    font-size: 1.25rem;
    line-height: 1.33333;
}

/* Recommender title */

.t-14 {
    font-size: 1.0rem;
    line-height: 1.42857;
}

/* Date of relationship */

.t-12 {
    font-size: .9rem;
    line-height: 1.33333;
}

/* Miscellaneous text styles */

.t-black {
    color: rgba(0,0,0,.9);
}

.t-bold {
    font-weight: 600;
}

.t-normal {
    font-weight: 400;
}

.t-black--light {
    color: rgba(0,0,0,.6);
}

/* Size of recommendation text */

blockquote {
    font-size: 1rem;
    line-height: 1.3333;
    font-weight: 200;
    color: rgba(0,0,0,.75);
}

blockquote, q {
    quotes: none;
}

.pv-accomplishments-block {
    position: relative;
    display: flex;
    padding: 16px 0 0 12px;
}

.pv-accomplishment-entity {
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: center;
    min-height: 72px;
    animation: fade-in 334ms cubic-bezier(.4,0,1,1);
    padding-right: 1rem;
}

.pv-accomplishment-entity h6,
.pv-accomplishment-entity p {
    margin-left: 16.667%;
    padding-left: .4rem;
}

.pv-accomplishment-entity__description {
    font-size: 12px;
    line-height:1.5;
}

@media (min-width: 992px) {
    .pv-accomplishment-entity__description {
        display: none;
    }
}

.visually-hidden {
    position: absolute!important;
    height: 1px;
    width: 1px;
    overflow: hidden;
    clip: rect(1px 1px 1px 1px);
    clip: rect(1px,1px,1px,1px);
    white-space: nowrap;
}

.pv-accomplishments-block__count,
.awards-icon i {
    color:var(--green,var(--moss,#234D3E));
}

.pv-accomplishments-block__count {
    min-width:64px;
    text-align:right;
    line-height:36px;
    margin-top:-3px;
}

.awards-icon i {
    width: 32px;
    height: 32px;
}

.pv-accomplishments-block__expand {
    position: absolute;
    width: 16.667%;
    text-align: center;
    top: 16px;
    z-index: 1;
}

/* ==========================================================================
   Brand/logo and CTA button hover colors
   ========================================================================== */

/* Styles icons at intro section when button is pressed. */

.btn:active .social-icon { color: #4f4f4f !important; }

/* Styles pressed and hover states for menu/nav icons and containers */

[class*="icon"].btn:active { background-color: transparent !important; }
.nav-links .btn:hover .social-icon { color: var(--paper) !important; }

/* Apply feedback colors for linkedin button links at side menu */

.btn.icon-linkedin:hover { background-color: var(--link-linkedin); }
.btn.icon-linkedin:focus { background-color: var(--link-linkedin); }

/* Apply feedback colors for Github button links at side menu */

.btn.icon-github:hover { background-color: var(--link-github); }
.btn.icon-github:focus { background-color: var(--link-github); }

/* Apply feedback colors for Dev button links at side menu */

.btn.icon-dev:hover { background-color: var(--link-dev); }
.btn.icon-dev:focus { background-color: var(--link-dev); }

/* Apply feedback colors for CTA buttons at side menu */

.btn.icon-download:hover { background-color: var(--cta-download); }
.btn.icon-download:focus { background-color: var(--cta-download); }
.btn.icon-email:hover { background-color: var(--cta-email); }
.btn.icon-email:focus { background-color: var(--cta-email); }
.btn.icon-call:hover { background-color: var(--cta-call); }
.btn.icon-call:focus { background-color: var(--cta-call); }

/* Follow same logic for buttons at intro section */

.btn:hover .social-linkedin { color: var(--link-linkedin); }
.btn:focus .social-linkedin { color: var(--link-linkedin); }
.btn.social-linkedin:active { background-color: var(--link-linkedin); }

.btn:hover .social-github { color: var(--link-github); }
.btn:focus .social-github { color: var(--link-github); }
.btn.social-github:active { background-color: var(--link-github); }

.btn:hover .social-dev { color: var(--link-dev); }
.btn:focus .social-dev { color: var(--link-dev); }
.btn.social-dev:active { background-color: var(--link-dev); }

.btn:hover .social-portfolio { color: var(--link-folio); }
.btn:focus .social-portfolio { color: var(--link-folio); }
.btn.social-portfolio:active { background-color: var(--link-folio); }

.btn:hover .social-download { color: var(--cta-download); }
.btn:focus .social-download { color: var(--cta-download); }
.btn.social-download:active { background-color: var(--cta-download); }

/* Style icon colors for external links and cta buttons */

.icon-link { color: var(--link-github); }
.icon-linkedin { color: var(--link-linkedin); }
.icon-github { color: var(--link-github); }
.icon-dev { color: var(--link-dev); }
.icon-portfolio { color: var(--link-folio); }
.icon-download { color: var(--cta-download); }
.icon-email { color: var(--cta-email); }
.icon-call { color: var(--cta-call); }

/* ==========================================================================
   Local section color variables
   ========================================================================== */

::selection { background: var(--matte); }
::-moz-selection { background: var(--matte); }

#target-one h4 { background-color: var(--matte); }
#target-one b { color: var(--denim); }
/*#target-one a { color: var(--denim); }*/

#target-two h4 { background-color: var(--slate); }
#target-two b { color: #817567; }
#target-two a { color: #817567; }

#target-three h4 { background-color: var(--ruby); }
#target-three b { color: var(--ruby); }
#target-three a { color: var(--red); }

#target-four h4 { background-color: var(--denim); }
#target-four b { color: var(--denim); }
#target-four a { color: var(--blue); }

#target-five h4 { background-color: var(--canary); }
#target-five b { color: var(--canary); }
#target-five a { color: var(--yellow); }

#target-six h4 { background-color: var(--moss); }
#target-six b { color: var(--moss); }
#target-six a { color: var(--green); }

#target-seven h4 { background-color: var(--obsidian); }
#target-seven b { color: var(--obsidian); }
#target-seven a { color: var(--raisin); }

/* Style icon colors for side menu icons */

.icon-one { color: var(--obsidian); }
.icon-two { color: var(--slate); }
.icon-three { color: var(--red); }
.icon-four { color: var(--blue); }
.icon-five { color: var(--yellow); }
.icon-six { color: var(--green); }
.icon-seven { color: var(--raisin); }


/* ==========================================================================
   Nav outline and pagination color variables
   ========================================================================== */

/*
 * Pagination item specific active states.
 *
 * Attach signature colors to pagination items to transition when given
 * scrollspy's '.active' class via general sibling selector.
 */

.nav-pills.menu-sidebar .link-one.active ~ .nav-one:after { border-top-color: var(--obsidian); }
.nav-pills.menu-sidebar .link-two.active ~ .nav-two:after { border-top-color: var(--slate); }
.nav-pills.menu-sidebar .link-three.active ~ .nav-three:after { border-top-color: var(--ruby); }
.nav-pills.menu-sidebar .link-four.active ~ .nav-four:after { border-top-color: var(--denim); }
.nav-pills.menu-sidebar .link-five.active ~ .nav-five:after { border-top-color: var(--canary); }
.nav-pills.menu-sidebar .link-six.active ~ .nav-six:after { border-top-color: var(--moss); }
.nav-pills.menu-sidebar .link-seven.active ~ .nav-seven:after { border-top-color: var(--obsidian); }

/*
 * Scrollspy specific active states.
 *
 * Attach signature colors to scrollspy's '.active' class when added to link items
 * in nav outline
 */

.nav-pills.menu-sidebar .link-one.active { color: var(--slate); border-left-color: var(--green); }
.nav-pills.menu-sidebar .link-two.active { color: var(--grey); border-left-color: var(--grey); }
.nav-pills.menu-sidebar .link-three.active { color: var(--red); border-left-color: var(--red); }
.nav-pills.menu-sidebar .link-four.active { color: var(--blue); border-left-color: var(--blue); }
.nav-pills.menu-sidebar .link-five.active { color: var(--yellow); border-left-color: var(--yellow); }
.nav-pills.menu-sidebar .link-six.active { color: var(--green); border-left-color: var(--green); }
.nav-pills.menu-sidebar .link-seven.active { color: var(--grey); border-left-color: var(--grey); }

/* Attach signature colors to hovered link items in nav outline */

.link-one.nav-link:hover { color: var(--grey); }
.link-two.nav-link:hover { color: var(--grey); }
.link-three.nav-link:hover { color: var(--red); }
.link-four.nav-link:hover { color: var(--blue); }
.link-five.nav-link:hover { color: var(--canary); }
.link-six.nav-link:hover { color: var(--green); }
.link-seven.nav-link:hover { color: var(--yellow); }

/* Attach signature styles to nav-link pseudo :before element to transition
 * border colors when given scrollspy's '.active' class in nav outline.
 */

.nav-pills.menu-sidebar .link-one.active:before { border-top-color: var(--obsidian); }
.nav-pills.menu-sidebar .link-two.active:before { border-top-color: var(--slate); }
.nav-pills.menu-sidebar .link-three.active:before { border-top-color: var(--ruby); }
.nav-pills.menu-sidebar .link-four.active:before { border-top-color: var(--denim); }
.nav-pills.menu-sidebar .link-five.active:before { border-top-color: var(--canary); }
.nav-pills.menu-sidebar .link-six.active:before { border-top-color: var(--moss); }
.nav-pills.menu-sidebar .link-seven.active:before { border-top-color: var(--raisin); }

/* ==========================================================================
   Header button feedback and color variables
   ========================================================================== */

[id^="control"] * {
    transition: all 0.3s var(--glide) 0.2s;
}

[data-toggle="collapse"][aria-expanded="true"] .header-icon ion-icon {
    --ionicon-stroke-width: 32px;
    padding-bottom: .25rem;
}

[data-toggle="collapse"][aria-expanded="true"] .header-text:before {
    font-weight: 500;
}

/**
 * Header text feedback
 *
 * This changes the color of the forward slash '/' in each article's header
 * button to the section's signature color when the section is open.
 */

#control-one [aria-expanded="true"] .header-text:before { color: var(--white); }
#control-two [aria-expanded="true"] .header-text:before { color: var(--grey); }
#control-three [aria-expanded="true"] .header-text:before { color: var(--red); }
#control-four [aria-expanded="true"] .header-text:before { color: var(--blue); }
#control-five [aria-expanded="true"] .header-text:before { color: var(--canary); }
#control-six [aria-expanded="true"] .header-text:before { color: var(--green); }
#control-seven [aria-expanded="true"] .header-text:before { color: var(--raisin); }

/**
 * Pseudo-horizontals feedback
 *
 * This changes the border color of the horizontal line in each article's
 * header button to the section's signature color when hovered over.
 */

#control-one .header-title:hover::after { border-color: var(--white); }
#control-one .header-title:focus::after { border-color: var(--white); }
#control-two .header-title:hover::after { border-color: var(--grey); }
#control-two .header-title:focus::after { border-color: var(--grey); }
#control-three .header-title:hover::after { border-color: var(--red); }
#control-three .header-title:focus::after { border-color: var(--red); }
#control-four .header-title:hover::after { border-color: var(--blue); }
#control-four .header-title:focus::after { border-color: var(--blue); }
#control-five .header-title:hover::after { border-color: var(--canary); }
#control-five .header-title:focus::after { border-color: var(--canary); }
#control-six .header-title:hover::after { border-color: var(--green); }
#control-six .header-title:focus::after { border-color: var(--green); }
#control-seven .header-title:hover::after { border-color: var(--yellow); }
#control-seven .header-title:focus::after { border-color: var(--yellow); }

/* ==========================================================================
   Landing animation
   ========================================================================== */

/* CREDIT (helper tool) https://cubic-bezier.com/#.23,-0.09,.18,1.25 */
/* CREDIT (inspiration) specific timing functions are inspired by: https://codeconvey.com/pure-css-accordion-menu/ */
/* Reference: understanding the timing function https://www.quackit.com/css/css3/properties/css_animation-timing-function.cfm */
/* Reference: the mathematical function http://morrow.github.io/css-reference/html/partial/timing-function.html */
/* In cubic-bezier(x1, y1, x2, y2), x is time, y is progression; x(time) cannot go below 0 or over 1, but y(progression) can */
/* With a careful understanding of the definition, below are custom keywords with custom time functions  */


/* Loads up from down */
/* BUG: Animation from Side Nav toggle is carried over */
/*#resumeStack { animation: load-down .75s var(--glide) 0s;  }*/

#target-zero {
    position: relative;
    text-align: center;

    animation: load-up 1s var(--glide) var(--early) 1 normal forwards running;
    -webkit-animation: load-up 1s var(--glide) var(--early) 1 normal forwards running;

    -webkit-transition: all var(--bustling) var(--swoop) var(--early);
    -o-transition: all var(--bustling) var(--swoop) var(--early);
    transition: all var(--bustling) var(--swoop) var(--early);
}

article {
    position: relative;
    animation: article .75s var(--glide) 0s;
    -webkit-animation: article .75s var(--glide) 0s;

    -webkit-transition: all var(--flashing) var(--glide) var(--late);
    -o-transition: all var(--flashing) var(--glide) var(--late);
    transition: all var(--flashing) var(--glide) var(--late);
}

@-webkit-keyframes article {
    0% {
        height: 3rem;
        top: 900px;
    }
    100% {
        height: auto;
        top: 0;
    }
}
@keyframes article {
    0% {
        height: 3rem;
        top: 900px;
    }
    100% {
        height: auto;
        top: 0;
    }
}


@-webkit-keyframes load-up {
    0% {
        top: -500px;
    }
    100% {
        top: 0;
    }
}

@keyframes load-up {
    0% {
        top: -500px;
    }
    100% {
        top: 0;
    }
}


@keyframes fade-in {
    0% { opacity: 0; }
    100% { opacity: 1; }
}

@-webkit-keyframes fade-in {
    0% { opacity: 0; }
    100% { opacity: 1; }
}

/* Helper animation attached to root that hides global animations on page load. */

:root:after {
    position: absolute;
    z-index: 1100;
    top: 0;
    right: 0;
    bottom: 0;

    content: "";

     -webkit-animation: root var(--dashing) var(--glide) var(--early) 1 normal forwards running;
    animation: root var(--dashing) var(--glide) var(--early) 1 normal forwards running;

    -webkit-transition: all var(--flashing) var(--glide) var(--flashing);
    -o-transition: all var(--flashing) var(--glide) var(--flashing);
    transition: all var(--flashing) var(--glide) var(--flashing);
}

@-webkit-keyframes root {
    0% {
        width: 100%;
        height: 100%;
        border-bottom: 48rem solid var(--paper);
        border-left: 48rem solid var(--paper);
        border-right: 48rem solid var(--paper);
        border-bottom-left-radius: 2rem;
        border-top: 32rem solid var(--paper);
    }
    15% {
        border-bottom: 32rem solid var(--paper);
        border-left: 32rem solid var(--paper);
        border-right: 32rem solid var(--paper);
        border-bottom-left-radius: 2rem;
        border-top: 14rem solid var(--paper);

    }
    50% {
        border-bottom: 14rem solid var(--paper);
        border-left: 14rem solid var(--paper);
        border-right: 14rem solid var(--paper);
        border-bottom-left-radius: 2rem;
        border-top: 6rem solid var(--paper);
    }
    75% {
        background: var(--gradient-2);
        border-bottom: 14rem solid var(--paper);
        border-left: 14rem solid var(--paper);
        border-right: 14rem solid var(--paper);
        border-bottom-left-radius: 2rem;
        border-top: 6rem solid var(--paper);

    }
    99% {
        width: 100%;
        height: 100%;
    }
    100% {
        width: 0;
        height: 0;
        border-bottom: 0 solid var(--paper);
        border-left: 0 solid var(--paper);
        border-right: 0 solid var(--paper);
        border-bottom-left-radius: 2rem;
        border-top: 0 solid var(--paper);
        background: transparent;
    }
}

@keyframes root {
    0% {
        width: 100%;
        height: 100%;
        border-bottom: 48rem solid var(--paper);
        border-left: 48rem solid var(--paper);
        border-right: 48rem solid var(--paper);
        border-bottom-left-radius: 2rem;
        border-top: 32rem solid var(--paper);
    }
    15% {
        border-bottom: 32rem solid var(--paper);
        border-left: 32rem solid var(--paper);
        border-right: 32rem solid var(--paper);
        border-bottom-left-radius: 2rem;
        border-top: 14rem solid var(--paper);

    }
    50% {
        border-bottom: 14rem solid var(--paper);
        border-left: 14rem solid var(--paper);
        border-right: 14rem solid var(--paper);
        border-bottom-left-radius: 2rem;
        border-top: 6rem solid var(--paper);
    }
    75% {
        background: var(--gradient-2);
        border-bottom: 14rem solid var(--paper);
        border-left: 14rem solid var(--paper);
        border-right: 14rem solid var(--paper);
        border-bottom-left-radius: 2rem;
        border-top: 6rem solid var(--paper);

    }
    99% {
        width: 100%;
        height: 100%;
    }
    100% {
        width: 0;
        height: 0;
        border-bottom: 0 solid var(--paper);
        border-left: 0 solid var(--paper);
        border-right: 0 solid var(--paper);
        border-bottom-left-radius: 2rem;
        border-top: 0 solid var(--paper);
        background: transparent;
    }
}

