Refactored and refined login and admin UI

This commit is contained in:
CasVT
2025-05-17 20:01:19 +02:00
parent 39847f18cd
commit 77a2a67232
20 changed files with 2431 additions and 1291 deletions

View File

@@ -1,160 +1,108 @@
main {
position: relative;
}
main a {
color: var(--color-light);
}
.action-buttons {
--spacing: .5rem;
position: absolute;
margin: var(--spacing);
inset: 0 0 auto 0;
height: var(--nav-width);
display: flex;
justify-content: center;
align-items: center;
gap: calc(var(--spacing) * 3);
flex-wrap: wrap;
gap: 1rem;
padding: var(--spacing);
border-radius: 4px;
background-color: var(--color-gray);
padding: 1rem .5rem;
& > button {
width: 10rem;
display: flex;
justify-content: center;
align-items: center;
gap: .75rem;
padding: .5rem;
border-radius: 4px;
background-color: var(--color-gray);
color: var(--color-light);
transition:
background-color 150ms ease-in-out,
box-shadow 150ms ease-in-out;
&:hover {
background-color: var(--color-light-gray);
box-shadow: var(--default-shadow);
}
&.submit-error {
background-color: var(--color-error);
}
& > svg {
height: 1.8rem;
width: 2rem;
}
}
}
.action-buttons > button {
height: 100%;
#grid-container {
--grid-spacing: 1.25rem;
display: flex;
justify-content: center;
align-items: center;
width: min(100%, 80rem + 3 * var(--grid-spacing));
margin-inline: auto;
display: grid;
grid-template: auto auto auto auto / 1fr 1fr;
gap: var(--grid-spacing);
padding: var(--grid-spacing);
padding-bottom: 3rem;
}
#grid-container > section {
max-height: 40rem;
min-width: 0;
padding: .5rem;
border-radius: 4px;
border: 3px solid var(--color-gray);
background-color: var(--color-dark);
color: var(--color-light);
transition: background-color .1s ease-in-out;
}
.action-buttons > button:hover {
background-color: var(--color-gray);
}
.action-buttons > button > svg {
height: 1.8rem;
width: 2rem;
}
.form-container {
height: calc(100vh - var(--header-height));
overflow-y: auto;
padding: .5rem;
padding-top: var(--nav-width);
}
#settings-form,
#hosting-form {
display: flex;
flex-direction: column;
align-items: center;
gap: 1.5rem;
box-shadow: 0px 0px 8px 3px rgba(0 0 0 / 0.8);
}
h2 {
width: 100%;
padding: .4rem .75rem;
border-bottom: 1px solid var(--color-gray);
padding: 1rem 1rem .25rem 1rem;
font-size: clamp(1rem, 10vw, 2rem);
}
.settings-table-container,
.user-table-container {
width: 100%;
overflow-x: auto;
.collaps-table {
--min-width: 18rem;
--max-width: 40rem;
--header-width: 30%;
--min-data-width: 15rem;
}
#power-section > .table-container {
padding: 1rem;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 1rem;
}
.settings-table {
--max-width: 55rem;
width: 100%;
max-width: var(--max-width);
min-width: 20rem;
border-spacing: 0px;
border: none;
tr:has(:where(input, select).changed) label {
color: var(--color-changed);
}
.settings-table td {
--middle-spacing: .75rem;
padding-bottom: 1rem;
vertical-align: top;
:where(input, select).changed,
div.input-style:has(input.changed) {
border-color: var(--color-changed);
}
.settings-table td:first-child {
width: 50%;
padding-right: var(--middle-spacing);
padding-top: .55rem;
text-align: right;
#backup-settings-section td:has(div.checked-input-container) {
height: 6.6rem;
}
.settings-table td:nth-child(2) {
min-width: calc(var(--max-width) * 0.5);
padding-left: var(--middle-spacing);
}
.add-item-container {
margin: 1rem;
.settings-table td p {
color: var(--color-light-gray);
font-size: .9rem;
}
.settings-table td > p {
margin-top: .25rem;
}
.number-input {
width: fit-content;
display: flex;
align-items: center;
border: 2px solid var(--color-gray);
border-radius: 4px;
box-shadow: var(--default-shadow);
}
.number-input > input {
width: auto;
border: none;
box-shadow: none;
text-align: right;
}
.number-input > * {
padding: .5rem 1rem;
}
.number-input > p {
padding-left: 0;
}
.settings-table select {
width: auto;
}
.add-user-container,
.database-container {
margin-top: 2rem;
margin-bottom: 1rem;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
@@ -162,140 +110,103 @@ h2 {
flex-wrap: wrap;
}
#download-logs-button,
#save-hosting-button,
#add-user-button,
#upload-db-button,
#restart-button,
#shutdown-button {
width: min(15rem, 100%);
.entries-table {
margin-inline: auto;
margin-bottom: 1rem;
padding: .5rem 1rem;
border-radius: 4px;
background-color: var(--color-gray);
box-shadow: var(--default-shadow);
width: clamp(22rem, 100%, 40rem);
}
.database-container:has(#download-logs-button) {
margin: 0;
}
#save-hosting-button {
align-self: center;
}
#add-user-button {
height: 2rem;
}
#add-user-button > svg {
aspect-ratio: 1/1;
height: 1rem;
width: min-content;
}
#user-table,
#backup-table {
min-width: 25rem;
border-spacing: 0px;
}
:where(#user-table, #backup-table) :where(th, td) {
height: 2.65rem;
padding: .25rem .5rem;
text-align: left;
}
:where(#user-table, #backup-table) tr td {
border-top: 1px solid var(--color-gray);
}
:where(#user-table, #backup-table) :where(th, td):first-child {
width: 10rem;
padding-left: 2rem;
}
:where(#user-table, #backup-table) :where(th, td):nth-child(2) {
width: 15rem;
}
:where(#user-table, #backup-table) :where(th, td):last-child {
width: 5.75rem;
display: flex;
align-items: center;
gap: 1rem;
padding-right: 2rem;
}
:where(#user-table, #backup-table) button {
height: 1.25rem;
}
:where(#user-table, #backup-table) svg {
aspect-ratio: 1/1;
height: 100%;
width: auto;
}
#user-table input {
#user-table td:first-child {
width: 100%;
padding: .25rem;
}
#upload-database-form {
#user-table td:last-child {
width: 6rem;
}
#backup-table {
width: clamp(30rem, 100%, 40rem);
}
#backup-table td:first-child {
width: 100%;
}
#backup-table td:nth-child(2) {
text-wrap-mode: nowrap;
}
#add-user-form,
#edit-user-form {
width: 16rem;
height: 8rem;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 1rem;
margin-block: 2rem 1rem;
}
#hosting-form > p,
#upload-database-form > p {
max-width: 50rem;
margin-inline: auto;
#edit-user-form:has(div.hidden) {
height: unset;
}
dialog span {
font-weight: bold;
}
dialog:where(#upload-db-dialog, #import-db-dialog) {
--max-height: 25rem;
}
:where(#upload-db-dialog, #import-db-dialog) .dialog-content > p {
padding-inline: 1rem;
text-align: center;
word-wrap: break-word;
}
#backup-table :where(th, td):first-child {
width: 20rem;
#upload-db-form tr:first-child td:last-child {
height: 6.1rem;
}
@media (max-width: 40rem) {
#reset-settings-dialog .dialog-content {
height: calc(100% - 2 * 3.2rem);
justify-content: flex-start;
overflow-y: auto;
}
#reset-settings-form {
width: 100%;
}
#reset-table {
max-width: 30rem;
}
@media (max-width: 24rem) {
.action-buttons button {
width: 100%;
&:last-of-type {
flex-direction: row-reverse;
}
}
}
@media (max-width: 29rem) {
.entries-table {
--inline-padding: 0;
}
}
@media (max-width: 52.25rem) {
#grid-container {
grid-template: repeat(8, auto) / 1fr;
padding-bottom: var(--grid-spacing);
}
h2 {
text-align: center;
padding-inline: 0;
}
.settings-table-container,
.user-table-container {
align-items: flex-start;
}
.settings-table tbody {
display: flex;
flex-direction: column;
}
.settings-table tr {
display: inline-flex;
flex-direction: column;
padding-left: 1rem;
}
.settings-table td {
width: 100%;
}
.settings-table td:first-child {
width: 100%;
text-align: left;
}
.settings-table td:nth-child(2) {
min-width: 0;
}
}

View File

@@ -2,28 +2,41 @@
box-sizing: border-box;
margin: 0;
padding: 0;
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans',
'Helvetica Neue', sans-serif;
font-size: 1rem;
}
:root {
--color-light: #ffffff;
--color-light-gray: #6b6b6b;
--color-gray: #3c3c3c;
--color-dark: #1b1b1b;
--color-mid-gray: #5c5c5c;
--color-gray: #232323;
--color-dark: #111111;
--color-changed: #b87000;
--color-error: #db5461;
--color-dim-error: #bc4551;
--color-success: #54db68;
--header-height: 4.5rem;
--nav-width: 4rem;
--scrollbar-width: 12px;
--rem-clamp: clamp(.5rem, 2vw, 1rem);
--default-shadow: 0 1px 2px 0 rgb(0 0 0 / 60%), 0 2px 6px 2px rgb(0 0 0 / 30%);
--default-shadow:
0 1px 2px 0 rgb(0 0 0 / 60%),
0 2px 6px 2px rgb(0 0 0 / 30%);
}
/* */
/* Default properties */
/* */
dialog {
margin: auto;
}
img {
width: 100%;
}
@@ -31,9 +44,6 @@ img {
button,
label {
border: 0;
border-radius: 4px;
background-color: var(--color-dark);
color: var(--color-light);
}
button:hover,
@@ -41,22 +51,6 @@ label:hover {
cursor: pointer;
}
input:not([type="checkbox"]),
select,
textarea,
.as-button {
border: 2px solid var(--color-gray);
border-radius: 4px;
padding: .6rem;
outline: 0;
background-color: var(--color-dark);
color: var(--color-light);
box-shadow: var(--default-shadow);
font-size: 1rem;
}
input::placeholder,
textarea::placeholder {
color: var(--color-gray);
@@ -66,14 +60,21 @@ input[type="datetime-local"] {
color-scheme: dark;
}
svg path,
svg rect {
svg :where(path, rect) {
fill: var(--color-light);
}
a {
color: var(--color-light);
}
table {
border-spacing: 0px;
}
::-webkit-scrollbar {
width: 12px;
height: 12px;
width: var(--scrollbar-width);
height: var(--scrollbar-width);
background-color: var(--color-dark);
}
@@ -120,11 +121,255 @@ svg rect {
font-size: 1rem !important;
}
button.spinning svg,
svg.spinning {
animation: spin-element 2.5s linear infinite forwards;
}
@keyframes spin-element {
from { transform: rotate(0deg) }
to { transform: rotate(360deg) }
}
:where(input, textarea, select, button, div).input-style {
height: 2.7rem;
width: 100%;
border: 2px solid var(--color-gray);
border-radius: 4px;
outline: 0;
background-color: var(--color-dark);
color: var(--color-light);
box-shadow: var(--default-shadow);
transition: background-color 150ms ease-in-out;
font-size: 1rem;
}
:where(input, textarea, select, button, div).input-style:focus-within {
border-color: var(--color-light-gray);
}
:where(input, textarea, select, button).input-style,
div.input-style > :where(input, p) {
padding: .5rem;
}
button:has(> svg).input-style {
display: flex;
justify-content: center;
align-items: center;
}
button.input-style > svg {
height: 1.3rem;
width: auto;
}
div.input-style {
width: fit-content;
display: flex;
align-items: center;
& > input {
width: 100%;
height: 100%;
border: 0;
outline: 0;
background-color: var(--color-dark);
color: var(--color-light);
}
}
button.input-style:hover {
background-color: var(--color-gray);
}
div.input-style > input[type="number"],
input[type="number"].input-style {
max-width: 6rem;
}
div.input-style > input[type="file"],
input[type="file"].input-style {
max-width: 20rem;
}
div.input-style > :where(input[type="text"], select),
:where(input[type="text"], select).input-style {
max-width: 16rem;
}
button.input-style {
max-width: 16rem;
}
:where(input, textarea, select, button).long-input-style,
div.long-input-style > input {
max-width: 25rem;
}
.checked-input-container {
position: relative;
height: 100%;
max-height: 2.7rem;
width: 100%;
max-width: 16rem;
transition: max-height 50ms ease-in-out,
border-color 50ms ease-in-out;
}
.checked-input-container.error-input-container {
max-height: 4.1rem;
}
.checked-input-container.error-input-container input {
border-color: var(--color-error);
}
.checked-input-container :where(input, textarea) {
position: relative;
z-index: 1;
}
.checked-input-container p {
position: absolute;
bottom: 0;
height: 1.9rem;
width: 100%;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
border: 2px solid var(--color-error);
padding: .6rem .65rem .3rem .65rem;
background-color: var(--color-dim-error);
color: var(--color-light);
font-size: .7rem;
}
.table-container {
width: 100%;
overflow: auto;
}
.entries-table {
--inline-padding: 1.5rem;
position: relative;
padding-inline: var(--inline-padding);
}
.entries-table::before {
content: "";
position: absolute;
inset: 0 auto 0 var(--inline-padding);
width: 1.4rem;
background: linear-gradient(90deg, var(--color-dark), transparent);
}
.entries-table::after {
content: "";
position: absolute;
inset: 0 var(--inline-padding) 0 auto;
width: 1.4rem;
background: linear-gradient(270deg, var(--color-dark), transparent);
}
.entries-table > tbody > tr {
transition: background-color 200ms ease-in-out;
&:hover {
background-color: var(--color-gray);
}
}
.entries-table :where(th, td) {
height: 2.65rem;
padding: .25rem .5rem;
text-align: left;
}
.entries-table td {
border-top: 1px solid var(--color-gray);
}
.entries-table :where(th, td):first-child {
padding-left: 2rem;
}
.entries-table :where(th, td):last-child {
padding-right: 2rem;
}
.entries-table td:last-child:has(button) {
display: flex;
align-items: center;
gap: .75rem;
}
.entries-table td:last-child button {
height: 1.25rem;
background-color: transparent;
}
.entries-table svg {
aspect-ratio: 1/1;
height: 100%;
width: auto;
}
.collaps-table {
--min-width: 20rem;
--max-width: 55rem;
--header-width: 50%;
--min-data-width: 25rem;
width: clamp(var(--min-width), 100%, var(--max-width));
padding-inline: 1rem;
}
.collaps-table tr:first-of-type :where(th, td) {
padding-top: 1rem;
}
.collaps-table :where(th, td) {
--middle-spacing: .75rem;
padding-bottom: 1rem;
vertical-align: top;
&:first-child {
width: var(--header-width);
padding-right: var(--middle-spacing);
text-align: right;
}
&:last-child {
min-width: var(--min-data-width);
padding-left: var(--middle-spacing);
}
& > p {
margin-top: .25rem;
color: var(--color-light-gray);
font-size: .9rem;
}
}
/* */
/* General styling */
/* */
body {
height: 100vh;
height: 100dvh;
overflow-x: hidden;
background-color: var(--color-dark);
@@ -141,44 +386,23 @@ noscript {
padding: 1rem;
background-color: var(--color-error);
color: var(--color-light);
text-align: center;
}
/* */
/* Header */
/* */
header {
width: 100%;
height: var(--header-height);
display: flex;
align-items: center;
padding: 1rem;
box-shadow: var(--default-shadow);
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
background-color: var(--color-gray);
}
header > div {
height: 100%;
transform: translateX(-2.6rem);
display: flex;
align-items: center;
gap: 1rem;
transition: transform .3s ease-in-out;
}
#toggle-nav {
--height: 1.5rem;
height: var(--height);
background-color: transparent;
}
#toggle-nav svg {
height: var(--height);
width: var(--height);
box-shadow: var(--default-shadow);
}
header img {
@@ -186,152 +410,207 @@ header img {
width: fit-content;
}
/* */
/* Nav */
/* */
.nav-divider {
position: relative;
height: calc(100% - var(--header-height));
dialog {
--ani-duration: 100ms;
--max-height: 23rem;
width: min(100%, 40rem);
height: min(100%, var(--max-height));
border-radius: 6px;
border: 4px solid var(--color-gray);
background-color: var(--color-dark);
color: var(--color-light);
box-shadow: 0px 0px 20px 5px rgba(0 0 0 / 0.8);
display: flex;
padding-block: var(--rem-clamp);
animation: vanish-dialog var(--ani-duration);
}
body:has(#nav-switch:checked) .nav-divider > nav {
left: var(--rem-clamp);
dialog[open] {
animation: appear-dialog var(--ani-duration);
}
body:has(#nav-switch:checked) .nav-divider > .window-container {
margin-left: calc(var(--nav-width) + var(--rem-clamp));
dialog::backdrop {
backdrop-filter: blur(3px);
}
nav {
--padding: .5rem;
z-index: 1;
position: absolute;
left: var(--rem-clamp);
height: calc(100% - (2 * var(--rem-clamp)));
width: var(--nav-width);
dialog[open]::backdrop {
animation: appear-dialog-bg var(--ani-duration);
}
@keyframes appear-dialog {
from {
opacity: 0;
translate: 0 -5%;
}
to {
opacity: 1;
translate: 0 0;
}
}
@keyframes vanish-dialog {
from {
display: block;
opacity: 1;
translate: 0 0;
}
to {
display: none;
opacity: 0;
translate: 0 -5%;
}
}
@keyframes appear-dialog-bg {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.dialog-container {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
gap: var(--padding);
overflow-y: auto;
padding: var(--padding);
border-radius: 4px;
background-color: var(--color-gray);
transition: left .3s ease-in-out;
}
nav > div {
width: 100%;
.dialog-header, .dialog-footer {
height: 3.2rem;
display: flex;
align-items: center;
gap: 1rem;
padding: .4rem .75rem;
&.dialog-header {
justify-content: flex-start;
border-bottom: 2px solid var(--color-gray);
}
&.dialog-footer {
justify-content: flex-end;
border-top: 2px solid var(--color-gray);
}
}
.dialog-header h2 {
padding: 0;
border-bottom: 0;
}
.dialog-footer > button,
.confirm-container > button {
width: 5rem;
height: 2.3rem;
padding: 0;
&:first-of-type:where(:hover, :focus-within) {
background-color: var(--color-dim-error);
}
&:last-of-type:where(:hover, :focus-within) {
background-color: var(--color-success);
}
}
.dialog-content {
flex-grow: 1;
display: flex;
flex-direction: column;
gap: var(--padding);
}
nav > div > button {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
padding: .5rem;
border: 0;
border-radius: 4px;
background-color: var(--color-dark);
color: var(--color-light);
transition: background-color .1s ease-in-out;
gap: 1rem;
}
nav > div > button:hover {
background-color: var(--color-gray);
}
nav > div > button svg {
height: 1.8rem;
width: 2rem;
}
/* */
/* Window management */
/* */
.window-container {
margin-left: calc(4rem + var(--rem-clamp));
width: 100%;
.confirm-container {
display: flex;
overflow: hidden;
transition: margin-left .3s ease-in-out;
flex-direction: row-reverse;
gap: 1rem;
}
.window-container > :where(#home, .extra-window-container) {
width: 100%;
flex: 0 0 auto;
translate: 0 0;
transition: translate .5s ease-in-out;
}
.window-container.inter-window-ani > :where(#home, .extra-window-container) {
transition: translate .5s ease-in-out,
transform .5s ease-in-out;
}
.extra-window-container {
--y-offset: 0%;
transform: translateY(var(--y-offset));
}
.extra-window-container > div {
height: 100%;
overflow-y: auto;
}
.window-container.show-window > :where(#home, .extra-window-container) {
translate: -100% 0;
}
.window-container.show-window > .extra-window-container {
transform: translateY(var(--y-offset));
}
/* */
/* Styling extra window */
/* */
.extra-window-container > div {
padding: var(--rem-clamp);
}
.extra-window-container > div > h2 {
text-align: center;
font-size: clamp(1.3rem, 5vw, 2rem);
margin-bottom: 2rem;
}
.extra-window-container > div > h2:not(:first-of-type) {
margin-top: 1.5rem;
}
.extra-window-container > div > p {
text-align: center;
}
@media (max-width: 543px) {
.window-container {
margin-left: 0;
.confirm-container > button {
width: 6rem;
&:first-of-type:where(:hover, :focus-within) {
background-color: var(--color-success);
}
nav {
left: -100%;
&:last-of-type:where(:hover, :focus-within) {
background-color: var(--color-dim-error);
}
}
@media (prefers-reduced-motion) {
* {
animation-duration: 0ms !important;
transition-duration: 0ms !important;
}
}
@media (max-width: 29rem) {
.collaps-table tbody {
display: flex;
flex-direction: column;
}
.collaps-table tr {
display: inline-flex;
flex-direction: column;
padding-left: .5rem;
}
.collaps-table tr:first-of-type > td {
padding-top: 0rem;
}
.collaps-table :where(th, td) {
width: 100%;
&:first-child {
width: 100%;
text-align: left;
}
&:last-child {
min-width: unset;
}
}
dialog {
margin: 0;
width: 100%;
height: 100%;
max-width: 100vw;
max-height: 100vh;
border-radius: 0;
border: 0;
}
@keyframes appear-dialog {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes vanish-dialog {
from {
display: block;
opacity: 1;
}
to {
display: none;
opacity: 0;
}
}
}

View File

@@ -126,6 +126,7 @@ body:has(#wide-toggle:checked) .tab-container > div {
border-radius: 4px;
padding: .75rem;
background-color: var(--color);
color: var(--color-light);
}
button.entry.fit {

View File

@@ -1,65 +1,46 @@
main {
height: calc(100vh - var(--header-height));
overflow-y: hidden;
}
main:has(#form-switch:checked) .form-container {
transform: translateY(-100%);
}
.form-container {
height: inherit;
display: flex;
justify-content: center;
align-items: center;
padding: 1rem;
transition: transform .25s ease-in-out;
}
form {
width: 30rem;
margin-inline: auto;
height: calc(100% - var(--header-height));
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 1rem;
}
.login-container {
position: relative;
width: min(40rem, 90%);
height: 22rem;
display: flex;
flex-direction: row-reverse;
flex-wrap: wrap;
overflow: hidden;
border-radius: 4px;
padding: 1rem;
background-color: var(--color-gray);
color: var(--color-light);
box-shadow: 0px 0px 20px 3px rgba(0 0 0 / 0.25);
}
form {
height: inherit;
flex: 1 0 auto;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
gap: 1rem;
padding: 2rem;
transition: translate 100ms ease-in-out;
}
form h2 {
font-size: clamp(1.2rem, 7vw, 2rem);
}
#username-error-container,
#password-error-container {
width: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: .5rem;
}
form input {
width: min(100%, 20rem);
}
#username-error-container p,
#password-error-container p {
width: min(100%, 19rem);
}
.switch-button {
border: 0;
background-color: transparent;
@@ -69,12 +50,53 @@ form input {
text-align: center;
}
.switch-button:hover {
cursor: pointer;
}
button[type="submit"] {
width: 7rem;
padding: .5rem 1rem;
border-radius: 4px;
background-color: var(--color-mid-gray);
color: var(--color-light);
font-size: 1.1rem;
transition:
background-color 150ms ease-in-out,
box-shadow 150ms ease-in-out;
}
button[type="submit"]:hover {
background-color: var(--color-light-gray);
box-shadow: var(--default-shadow);
}
#form-cover {
position: absolute;
left: 0;
height: 100%;
width: 50%;
z-index: 2;
display: flex;
padding: 3rem;
border-radius: 4px;
background-color: var(--color-gray);
box-shadow: 0px 0px 20px 3px rgba(0 0 0 / 0.25);
transition: left 100ms ease-in-out;
}
main:has(#form-switch:checked) #form-cover {
left: 50%;
}
@media (max-width: 594px) {
#form-cover {
display: none;
}
main:has(#form-switch:checked) form {
translate: 0 -100%;
}
}

View File

@@ -0,0 +1,175 @@
/* */
/* Nav collapse button */
/* */
header > div {
height: 100%;
transform: translateX(-2.6rem);
display: flex;
align-items: center;
gap: 1rem;
transition: transform .3s ease-in-out;
}
#toggle-nav {
--height: 1.5rem;
height: var(--height);
background-color: transparent;
}
#toggle-nav svg {
height: var(--height);
width: var(--height);
}
/* */
/* Nav */
/* */
.nav-divider {
position: relative;
height: calc(100% - var(--header-height));
display: flex;
padding-block: var(--rem-clamp);
}
body:has(#nav-switch:checked) .nav-divider > nav {
left: var(--rem-clamp);
}
body:has(#nav-switch:checked) .nav-divider > .window-container {
margin-left: calc(var(--nav-width) + var(--rem-clamp));
}
nav {
--padding: .5rem;
z-index: 1;
position: absolute;
left: var(--rem-clamp);
height: calc(100% - (2 * var(--rem-clamp)));
width: var(--nav-width);
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
gap: var(--padding);
overflow-y: auto;
padding: var(--padding);
border-radius: 4px;
background-color: var(--color-gray);
transition: left .3s ease-in-out;
}
nav > div {
width: 100%;
display: flex;
flex-direction: column;
gap: var(--padding);
}
nav > div > button {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
padding: .5rem;
border: 0;
border-radius: 4px;
background-color: var(--color-dark);
color: var(--color-light);
transition: background-color .1s ease-in-out;
}
nav > div > button:hover {
background-color: var(--color-gray);
}
nav > div > button svg {
height: 1.8rem;
width: 2rem;
}
/* */
/* Window management */
/* */
.window-container {
margin-left: calc(4rem + var(--rem-clamp));
width: 100%;
display: flex;
overflow: hidden;
transition: margin-left .3s ease-in-out;
}
.window-container > :where(#home, .extra-window-container) {
width: 100%;
flex: 0 0 auto;
translate: 0 0;
transition: translate .5s ease-in-out;
}
.window-container.inter-window-ani > :where(#home, .extra-window-container) {
transition: translate .5s ease-in-out,
transform .5s ease-in-out;
}
.extra-window-container {
--y-offset: 0%;
transform: translateY(var(--y-offset));
}
.extra-window-container > div {
height: 100%;
overflow-y: auto;
}
.window-container.show-window > :where(#home, .extra-window-container) {
translate: -100% 0;
}
.window-container.show-window > .extra-window-container {
transform: translateY(var(--y-offset));
}
/* */
/* Styling extra window */
/* */
.extra-window-container > div {
padding: var(--rem-clamp);
}
.extra-window-container > div > h2 {
text-align: center;
font-size: clamp(1.3rem, 5vw, 2rem);
margin-bottom: 2rem;
}
.extra-window-container > div > h2:not(:first-of-type) {
margin-top: 1.5rem;
}
.extra-window-container > div > p {
text-align: center;
}
@media (max-width: 543px) {
.window-container {
margin-left: 0;
}
nav {
left: -100%;
}
}