diff options
Diffstat (limited to 'htdocs/src/scss/layout')
| -rw-r--r-- | htdocs/src/scss/layout/_footer.scss | 24 | ||||
| -rw-r--r-- | htdocs/src/scss/layout/_grid.scss | 44 | ||||
| -rw-r--r-- | htdocs/src/scss/layout/_header.scss | 121 | ||||
| -rw-r--r-- | htdocs/src/scss/layout/_main.scss | 109 | ||||
| -rw-r--r-- | htdocs/src/scss/layout/_nav.scss | 64 | ||||
| -rw-r--r-- | htdocs/src/scss/layout/_toolbar.scss | 30 |
6 files changed, 392 insertions, 0 deletions
diff --git a/htdocs/src/scss/layout/_footer.scss b/htdocs/src/scss/layout/_footer.scss new file mode 100644 index 0000000..776ea57 --- /dev/null +++ b/htdocs/src/scss/layout/_footer.scss @@ -0,0 +1,24 @@ +@use "../abstracts/functions" as fun; +@use "../abstracts/mixins" as mix; + +.footer { + background: fun.get-var(color-bg-secondary); + padding: fun.get-var(spacing-sm) fun.get-var(spacing-md) + calc(#{fun.get-var(toolbar-height)} + #{fun.get-var(spacing-sm)}); + + @include mix.media("screen") { + @include mix.dimensions("lg") { + padding: fun.get-var(spacing-sm) fun.get-var(spacing-md); + } + } +} + +.copyright { + align-items: center; + display: flex; + flex-flow: row wrap; + font-family: fun.get-var(font-family-secondary); + font-size: fun.get-var(font-size-md); + gap: fun.get-var(spacing-3xs); + justify-content: center; +} diff --git a/htdocs/src/scss/layout/_grid.scss b/htdocs/src/scss/layout/_grid.scss new file mode 100644 index 0000000..5a61f1a --- /dev/null +++ b/htdocs/src/scss/layout/_grid.scss @@ -0,0 +1,44 @@ +@use "../abstracts/functions" as fun; +@use "../abstracts/mixins" as mix; + +.body { + display: grid; + grid-template-columns: minmax(0, 1fr); + grid-template-rows: minmax(0, 1fr) max-content; + height: 100vh; + position: relative; + + @include mix.media("screen") { + @include mix.dimensions("lg") { + grid-template-columns: 1.5fr 4fr; + } + + @include mix.dimensions("xl") { + grid-template-columns: 1fr 4fr; + } + } +} + +.header { + grid-column: 1; + grid-row: 1; + overflow-y: auto; + width: 100%; +} + +.main { + grid-column: 1; + grid-row: 1 / -1; + + @include mix.media("screen") { + @include mix.dimensions("lg") { + grid-column: 2; + } + } +} + +.footer { + grid-column: 1; + grid-row: 2; + width: 100%; +} diff --git a/htdocs/src/scss/layout/_header.scss b/htdocs/src/scss/layout/_header.scss new file mode 100644 index 0000000..622a100 --- /dev/null +++ b/htdocs/src/scss/layout/_header.scss @@ -0,0 +1,121 @@ +@use "../abstracts/functions" as fun; + +.header { + background: fun.get-var(color-bg-secondary); + padding: fun.get-var(spacing-md) + clamp(#{fun.get-var(spacing-md)}, 3vw, #{fun.get-var(spacing-lg)}); + z-index: 5; +} + +.branding { + margin-bottom: fun.get-var(spacing-sm); + text-align: center; + + &__title { + font-family: fun.get-var(font-family-secondary); + font-size: fun.get-var(font-size-3xl); + font-weight: 500; + margin: fun.get-var(spacing-xs) 0; + } + + &__link { + background: linear-gradient( + to top, + fun.get-var(color-primary-light) fun.convert-px(5), + transparent fun.convert-px(5) + ) + center / 0 100% no-repeat; + text-decoration: none; + transition: all 0.5s ease-in-out 0s; + + &:hover, + &:focus { + background-size: 100% 100%; + } + + &:active { + background-size: 0 100%; + } + } + + &__description { + font-family: fun.get-var(font-family-secondary); + font-size: fun.get-var(font-size-md); + font-weight: 400; + letter-spacing: fun.convert-px(1); + margin: 0; + text-transform: uppercase; + } +} + +.logo { + margin: auto; + position: relative; + width: max-content; + + &__image { + backface-visibility: hidden; + border: fun.convert-px(3) solid fun.get-var(color-border-light); + border-radius: 50%; + box-shadow: 0 0 fun.convert-px(6) fun.convert-px(1) + fun.get-var(color-shadow-darker); + left: 0; + position: absolute; + top: 0; + width: 100%; + + &--back { + transform: rotateY(180deg); + } + } + + &__link { + display: block; + height: clamp(#{fun.convert-px(75)}, 15vmin, #{fun.convert-px(90)}); + transform-style: preserve-3d; + transition: all 0.6s linear 0s; + width: clamp(#{fun.convert-px(75)}, 15vmin, #{fun.convert-px(90)}); + + &:hover, + &:focus { + outline: none; + transform: rotateY(180deg); + } + + &:hover &, + &:focus & { + &__image { + &---front { + transform: none; + } + + &--back { + transform: rotateY(180deg); + } + } + } + + &:focus & { + &__image { + box-shadow: 0 0 fun.convert-px(6) fun.convert-px(1) + fun.get-var(color-shadow-dark), + 0 0 0 fun.convert-px(5) fun.get-var(color-primary-light-opacity); + outline: none; + } + } + + &:active & { + &__image { + box-shadow: 0 0 fun.convert-px(6) fun.convert-px(1) + fun.get-var(color-shadow-dark), + 0 0 0 fun.convert-px(7) fun.get-var(color-primary-light-opacity); + } + } + } + + &:hover & { + &__link { + transform: rotateY(180deg); + } + } +} diff --git a/htdocs/src/scss/layout/_main.scss b/htdocs/src/scss/layout/_main.scss new file mode 100644 index 0000000..9adb18d --- /dev/null +++ b/htdocs/src/scss/layout/_main.scss @@ -0,0 +1,109 @@ +@use "../abstracts/functions" as fun; +@use "../abstracts/mixins" as mix; +@use "../abstracts/placeholders"; + +.main { + display: flex; + flex-flow: column nowrap; + + @include mix.media("screen") { + @include mix.dimensions("lg") { + display: grid; + grid-template-columns: 5fr 2fr; + } + + @include mix.dimensions("xl") { + grid-template-columns: 4fr 1fr; + } + } +} + +.instructions { + align-items: center; + background: fun.get-var(color-bg); + display: flex; + height: 100%; + justify-content: center; + padding: fun.get-var(spacing-md); + + @include mix.media("screen") { + @include mix.dimensions("lg") { + grid-column: 1 / -1; + } + } +} + +.project-preview { + background: fun.get-var(color-bg); + flex: 1; + width: 100%; + + @include mix.media("screen") { + @include mix.dimensions("lg") { + height: 100%; + } + } + + iframe { + border: 0; + height: 100%; + width: 100%; + } +} + +.project-details { + background: fun.get-var(color-bg-secondary); + display: flex; + flex-flow: column nowrap; + font-size: fun.get-var(font-size-sm); + padding: fun.get-var(spacing-md) fun.get-var(spacing-md) + calc(#{fun.get-var(toolbar-height)} + #{fun.get-var(spacing-md)}); + + @include mix.media("screen") { + @include mix.dimensions("lg") { + font-size: fun.get-var(font-size-md); + } + } + + .list { + &--tech { + padding-left: fun.get-var(spacing-sm); + } + + &--repos { + @extend %flex-list; + + gap: fun.get-var(spacing-xs); + } + + &__link { + background-repeat: no-repeat; + background-size: contain; + box-shadow: 0 0 0 0 fun.get-var(color-shadow); + display: block; + height: fun.convert-px(50); + transition: transform 0.3s ease-in-out 0s, + box-shadow 0.15s ease-in-out 0.15s; + width: fun.convert-px(50); + + &--github { + background: url(#{fun.encode-svg('<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><path style="fill:#1b1817;fill-opacity:1;opacity:1;stroke-width:6.55748" d="M0 0h100v100H0z"/><path d="M50.003 15.864C69.33 15.864 85 31.534 85 50.865c0 15.464-10.028 28.581-23.936 33.211-1.75.32-2.389-.76-2.389-1.689 0-.829.03-3.031.047-5.951 9.736 2.114 11.79-4.693 11.79-4.693 1.592-4.044 3.887-5.12 3.887-5.12 3.178-2.17-.241-2.127-.241-2.127-3.513.247-5.36 3.607-5.36 3.607-3.123 5.348-8.193 3.803-10.187 2.907-.318-2.26-1.22-3.803-2.222-4.677 7.772-.883 15.943-3.887 15.943-17.299 0-3.82-1.365-6.944-3.604-9.391.361-.886 1.563-4.444-.341-9.263 0 0-2.94-.941-9.626 3.588-2.791-.778-5.786-1.164-8.762-1.177-2.972.013-5.967.4-8.762 1.177-6.682-4.53-9.615-3.588-9.615-3.588-1.91 4.82-.71 8.377-.348 9.263-2.243 2.447-3.6 5.571-3.6 9.391 0 13.446 8.185 16.405 15.982 17.271-1.257 1.08-2.376 3.216-2.376 6.482 0 4.678.043 8.453.043 9.6 0 .937-.63 2.027-2.407 1.685C25.02 79.433 15 66.324 15 50.865c0-19.331 15.672-35.001 35.003-35.001" style="fill:#fff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:.999999"/></svg>')}); + } + + &--gitlab { + background: url(#{fun.encode-svg('<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><path style="opacity:1;fill:#ccc;fill-opacity:1;stroke-width:7.26231" d="M0 0h100v100H0z"/><path class="st3" d="m49.998 82.237 12.895-39.668H37.121Z" style="fill:#e24329;stroke-width:1"/><path class="st4" d="M19.058 42.57 15.13 54.62a2.67 2.67 0 0 0 .966 2.984l33.9 24.632Z" style="fill:#fca326;stroke-width:1"/><path class="st3" d="M19.058 42.57H37.12l-7.774-23.89c-.398-1.222-2.132-1.222-2.544 0z" style="fill:#e24329;stroke-width:1"/><path class="st4" d="m80.956 42.57 3.914 12.05a2.67 2.67 0 0 1-.966 2.984L49.998 82.237Z" style="fill:#fca326;stroke-width:1"/><path class="st3" d="M80.956 42.57H62.894l7.759-23.89c.398-1.222 2.132-1.222 2.544 0z" style="fill:#e24329;stroke-width:1"/><path style="fill:#fc6d26;stroke-width:4.82321" class="st5" d="m50.017 82.237 30.94-39.667H62.893Zm-.019 0L19.058 42.57H37.12z"/></svg>')}); + } + + &:hover, + &:focus { + box-shadow: fun.convert-px(-1) fun.convert-px(1) fun.convert-px(4) + fun.convert-px(2) fun.get-var(color-shadow-light); + transform: scale(1.15); + } + + &:active { + opacity: 1; + } + } + } +} diff --git a/htdocs/src/scss/layout/_nav.scss b/htdocs/src/scss/layout/_nav.scss new file mode 100644 index 0000000..f4508d0 --- /dev/null +++ b/htdocs/src/scss/layout/_nav.scss @@ -0,0 +1,64 @@ +@use "../abstracts/functions" as fun; +@use "../abstracts/placeholders"; + +.nav { + text-align: center; + + &__label { + font-weight: 600; + } + + &__list { + @extend %reset-list; + + .btn { + width: 100%; + } + } + + &__link { + &--back { + display: inline-block; + margin: fun.get-var(spacing-sm) 0; + + &::before { + content: "\1F810"; + display: inline-block; + text-decoration: none; + } + } + + &--app { + background: fun.get-var(color-bg); + border: fun.convert-px(1) solid fun.get-var(color-border); + display: block; + padding: fun.get-var(spacing-2xs); + position: relative; + text-decoration: none; + transition: all 0.3s ease-in-out 0s; + width: 100%; + + &:hover, + &:focus { + background: fun.get-var(color-primary); + color: fun.get-var(color-fg-inverted); + } + + &:active { + background: fun.get-var(color-bg); + color: fun.get-var(color-primary-dark); + text-decoration: fun.convert-px(1) solid underline; + } + } + } + + &__item:not(:first-child) & { + &__link { + border-top: 0; + } + } + + .btn { + margin: auto; + } +} diff --git a/htdocs/src/scss/layout/_toolbar.scss b/htdocs/src/scss/layout/_toolbar.scss new file mode 100644 index 0000000..585b3e6 --- /dev/null +++ b/htdocs/src/scss/layout/_toolbar.scss @@ -0,0 +1,30 @@ +@use "../abstracts/functions" as fun; + +.toolbar { + align-items: center; + background: fun.get-var(color-primary); + bottom: 0; + color: fun.get-var(color-fg-inverted); + display: flex; + flex-flow: row wrap; + gap: fun.get-var(spacing-xs); + height: fun.get-var(toolbar-height); + justify-content: center; + left: 0; + position: absolute; + right: 0; + + & > &__options { + background: fun.get-var(color-primary); + color: fun.get-var(color-fg-inverted); + font-size: fun.get-var(font-size-sm); + height: 85%; + padding: 0 fun.get-var(spacing-sm); + + &:hover, + &:focus { + background: fun.get-var(color-bg); + color: fun.get-var(color-primary); + } + } +} |
