diff --git a/app/app.vue b/app/app.vue old mode 100755 new mode 100644 index a738821..a084371 --- a/app/app.vue +++ b/app/app.vue @@ -1,11 +1,18 @@ - \ No newline at end of file + + \ No newline at end of file diff --git a/app/assets/styles/button.css b/app/assets/styles/button.css index 11a6a95..e334808 100755 --- a/app/assets/styles/button.css +++ b/app/assets/styles/button.css @@ -1,5 +1,5 @@ .Button { - --padding: .2rem; + --padding: var(--padding-xs); --background: var(--color-main-dark); --color: var(--color-lightest); --background-hover: var(--color-main-dark); @@ -8,7 +8,7 @@ display: flex; justify-content: center; align-items: center; - gap: 1rem; + gap: var(--padding-default); cursor: pointer; transition: var(--transition-default); outline: none; @@ -19,13 +19,13 @@ &.transparent { --background: transparent; box-shadow: none; - padding: .5em 1.5em; + padding: var(--padding-s) var(--padding-l); border-radius: var(--radius-default); } &.raised { box-shadow: var(--box-shadow-z2); - padding: .5em 1.5em; + padding: var(--padding-s) var(--padding-l); border-radius: var(--radius-default); &.danger { @@ -37,7 +37,7 @@ &.text { --background: transparent; --color: var(--color-darkest); - padding: .5em 1.5em; + padding: var(--padding-s) var(--padding-l); border-radius: var(--radius-default); &:hover { @@ -62,13 +62,13 @@ justify-content: center; align-items: center; border-radius: 100%; - padding: .5rem; + padding: var(--padding-s); } &.cta { background: var(--background); color: var(--color); - padding: .5rem 1.5rem; + padding: var(--padding-s) var(--padding-l); border-radius: var(--radius-default); box-shadow: var(--box-shadow-z2); @@ -98,7 +98,7 @@ --color: var(--color-main-darkest); border-radius: 100%; padding: var(--padding); - font-size: 1.1em; + font-size: var(--font-size-l); &:hover { scale: 1.2; @@ -106,17 +106,17 @@ } &.mini-button { - padding: .5rem 1.5rem; + padding: var(--padding-s) var(--padding-l); display: flex; flex-direction: column; - gap: .5rem; + gap: var(--padding-xs); & > .icon { - font-size: 1.5rem; + font-size: var(--font-size-xl); } & > span { - font-size: .8rem; + font-size: var(--font-size-s); } } } \ No newline at end of file diff --git a/app/assets/styles/buttonGroup.css b/app/assets/styles/buttonGroup.css index 4b46732..bb8ffd8 100644 --- a/app/assets/styles/buttonGroup.css +++ b/app/assets/styles/buttonGroup.css @@ -9,8 +9,8 @@ display: flex; align-items: center; justify-content: center; - gap: .5rem; - padding: .5rem; + gap: var(--padding-xs); + padding: var(--padding-s); flex-grow: 1; background: var(--background); color: var(--color); diff --git a/app/assets/styles/dialog.css b/app/assets/styles/dialog.css index afa1065..0f44254 100644 --- a/app/assets/styles/dialog.css +++ b/app/assets/styles/dialog.css @@ -7,7 +7,7 @@ dialog { border: none; border-radius: var(--radius-default); background: var(--color-lightest); - font-size: 1rem; + font-size: var(--font-size-default); color: var(--color-darkest); position: relative; @@ -40,7 +40,7 @@ dialog { & > .wrapper { display: flex; flex-direction: column; - gap: 1rem; + gap: var(--padding-default); } & header { diff --git a/app/assets/styles/footer.css b/app/assets/styles/footer.css index baaa1fe..5d2f50c 100644 --- a/app/assets/styles/footer.css +++ b/app/assets/styles/footer.css @@ -12,27 +12,27 @@ & .bottom { display: flex; - gap: 1rem; + gap: var(--padding-default); justify-content: space-between; color: var(--color-light); } & .socials { - font-size: 1.5rem; + font-size: var(--font-size-xl); justify-content: center; - margin-bottom: 2rem; + margin-bottom: var(--padding-xl); } & .data-links { justify-content: flex-end; - font-size: .8rem; + font-size: var(--font-size-s); } & ul { list-style: none; display: flex; align-items: center; - gap: 1rem; + gap: var(--padding-default); & a { color: var(--color-lightest); diff --git a/app/assets/styles/form/search.css b/app/assets/styles/form/search.css index 5a30772..e03c6a4 100644 --- a/app/assets/styles/form/search.css +++ b/app/assets/styles/form/search.css @@ -1,15 +1,15 @@ .Search { border-radius: 9999px; background: var(--color-lightest); - padding: 0 1rem; + padding: 0 var(--padding-default); display: flex; align-items: center; justify-content: space-between; - gap: 1rem; + gap: var(--padding-default); & > input { all: unset; flex-grow: 1; - padding: .5rem 0; + padding: var(--padding-s) 0; } } \ No newline at end of file diff --git a/app/assets/styles/form/textfield.css b/app/assets/styles/form/textfield.css index b6c1959..d2cfaf8 100755 --- a/app/assets/styles/form/textfield.css +++ b/app/assets/styles/form/textfield.css @@ -1,9 +1,9 @@ .TextField { --border-color: var(--color-light); --label-color: var(--color-middle); - --label-position-top: 0.4em; - --label-font-size: 1rem; - --icon-color: var(--color-main-dark); + --label-position-top: var(--font-size-default); + --label-position-left: 2.5rem; + --label-font-size: var(--font-size-default); --message-color: var(--color-middle); position: relative; @@ -15,15 +15,11 @@ &:focus-within, &:has(input:not(:placeholder-shown)) { - --icon-color: var(--color-main-dark); --label-color: var(--color-main-dark); - --label-position-top: -11px; - --label-font-size: 0.8rem; } &.error { - --label-color: var(--color-error); - --icon-color: var(--color-error); + --label-color: var(--color-error) !important; --border-color: var(--color-error); --message-color: var(--color-error); } @@ -31,37 +27,46 @@ & .wrapper { display: flex; align-items: center; - padding: 0.1rem 0.5rem; + padding: var(--padding-xxs) var(--padding-xs); border: 1px solid var(--border-color); border-radius: var(--radius-default); } & label { position: absolute; - background: var(--color-lightest); - padding: 0.2rem; - left: 1.8rem; + display: flex; + align-items: center; color: var(--label-color); - top: var(--label-position-top); - font-size: var(--label-font-size); + gap: 2px; + top: -6px; + left: calc(var(--padding-xs) - 2px); + font-size: var(--font-size-s); transition: var(--transition-default); + + & > * { + background: var(--color-lightest); + padding: 0 2px; + } } & .icon { - color: var(--icon-color); + position: relative; + color: var(--label-color); + font-size: var(--font-size-default); + top: -1px; } & input { all: unset; - padding: var(--padding-small); - font-size: 1rem; + padding: var(--padding-xxs) var(--padding-s) var(--padding-xxs) 0; + font-size: var(--font-size-s); width: 100%; flex: 25% 1 0; color: var(--color-darkest); } - & span { + & > span { color: var(--message-color); - font-size: 0.6rem; + font-size: var(--font-size-xs); } } diff --git a/app/assets/styles/general.css b/app/assets/styles/general.css index 672acd2..99a8bc6 100755 --- a/app/assets/styles/general.css +++ b/app/assets/styles/general.css @@ -1,14 +1,7 @@ :root { - --padding-default: 1rem; - --padding-small: 0.5rem; - --padding-large: 2rem; - --radius-default: 3px; - --radius-border: 15px; - --transition-default: 150ms; - --color-success: #328104; --color-error: #a20606; - --color-blue-light: #0ddce7; + --color-blue-light: #d7e1f1; --color-blue: #05b0ff; --color-blue-dark: #0266f2; --color-blue-darkest: #013174; @@ -26,6 +19,7 @@ --color-green-darkest-most: #157c2a; --color-main: var(--color-blue); + --color-main-lightest: var(--color-blue-light); --color-main-light: var(--color-blue-light); --color-main-dark: var(--color-blue-dark); --color-main-darkest: var(--color-blue-darkest); @@ -35,6 +29,9 @@ --color-accent-dark: var(--color-green-dark); --color-accent-darkest: var(--color-green-darkest); + --color-text: var(--color-darkest); + --color-text-invert: var(--color-lightest); + --color-gradient-main: linear-gradient(to bottom right, var(--color-main), var(--color-main-light)); --color-gradient-main-dark: linear-gradient(to bottom right, var(--color-main-darkest), var(--color-main-dark)); --color-gradient-accent: linear-gradient(to bottom right, var(--color-accent), var(--color-accent-light)); @@ -45,6 +42,29 @@ --box-shadow-upper: 0 -3px 6px rgba(0, 0, 0, 0.16), 0 -3px 6px rgba(0, 0, 0, 0.23); --box-shadow-z2: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); --box-shadow-inset: inset 0 3px 6px rgba(0, 0, 0, 0.16), inset 0 3px 6px rgba(0, 0, 0, 0.23); + + /* Font Sizes & Scaling Factor*/ + --scaling-factor: 1.25; + --font-size-xs: calc(var(--font-size-s) / var(--scaling-factor)); + --font-size-s: calc(var(--font-size-default) / var(--scaling-factor)); + --font-size-default: 1rem; + --font-size-l: calc(var(--font-size-default) * var(--scaling-factor)); + --font-size-xl: calc(var(--font-size-l) * var(--scaling-factor)); + --font-size-xxl: calc(var(--font-size-xl) * var(--scaling-factor)); + + /* Paddings depend on Font-Size */ + --padding-xxs: calc(var(--padding-xs) / var(--scaling-factor)); + --padding-xs: calc(var(--padding-s) / var(--scaling-factor)); + --padding-default: var(--font-size-default); + --padding-s: calc(var(--padding-default) / var(--scaling-factor)); + --padding-l: calc(var(--padding-default) * var(--scaling-factor)); + --padding-xl: calc(var(--padding-l) * var(--scaling-factor)); + --padding-xxl: calc(var(--padding-xl) * var(--scaling-factor)); + + --radius-default: calc(var(--font-size-default) / 3); + --radius-border: var(--font-size-default); + + --transition-default: 150ms; } * { @@ -59,43 +79,29 @@ body { overflow-x: hidden; font-family: sans-serif; background: var(--color-main-darkest); + color: var(--color-text); + font-size: var(--font-size-default); } -.dot { - --size: 10px; - width: var(--size); - height: var(--size); - top: 5px; - right: 25%; - border-radius: 50%; - background-color: var(--color-accent); - display: inline-block; - margin-right: 0.5rem; - position: absolute; - box-shadow: var(--box-shadow-z2); - scale: 0; - transition: var(--transition-default); - - &.visible { - scale: 1; - animation: pulse 1s infinite; - } +h1, h2, h3 { + margin: var(--padding-xl) 0 var(--padding-default); + text-wrap: balance; + hyphens: auto; + font-size: var(--font-size-xl); } -@keyframes pulse { - 0% { - transform: scale(0.95); - box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.7); - } - 70% { - transform: scale(1); - box-shadow: 0 0 0 10px rgba(255, 255, 255, 0); - } +h2 { + margin: var(--padding-l) 0 var(--padding-default); + font-size: var(--font-size-l); +} - 100% { - transform: scale(0.95); - box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); - } +h3 { + margin: var(--padding-default) 0 var(--padding-default); + font-size: var(--font-size-default); +} + +a:has(button) { + text-decoration: none; } .card { @@ -115,7 +121,7 @@ body { } .text-white { - color: var(--color-lightest); + color: var(--color-text-invert); } .bg-main { @@ -130,12 +136,16 @@ body { background-color: var(--color-main-dark); } +.bg-main-darkest { + background-color: var(--color-main-darkest); +} + .bg-main-dark-hover:hover { background-color: var(--color-main-dark); } .gap-default { - gap: 1rem; + gap: var(--padding-default); } .bg-blue { @@ -147,13 +157,13 @@ body { } .padding { - gap: 1rem; + gap: var(--padding-default); padding: var(--padding-default); } .padding-small { - gap: 1rem; - padding: var(--padding-small); + gap: var(--padding-default); + padding: var(--padding-s); } .roboto-condensed { @@ -170,5 +180,5 @@ body { .grow { flex-grow: 1; - height: 10px; + height: var(--padding-s); } \ No newline at end of file diff --git a/app/assets/styles/header.css b/app/assets/styles/header.css index 6732374..6b61bc4 100755 --- a/app/assets/styles/header.css +++ b/app/assets/styles/header.css @@ -2,20 +2,37 @@ position: sticky; top: 0; z-index: 100; - background: var(--color-main-darkest); display: flex; align-items: center; - gap: 1rem; + gap: var(--padding-default); padding: var(--padding-default); + &:not(.lp) { + background: var(--color-main-darkest); + } + + &.lp { + position: absolute; + backdrop-filter: blur(10px); + mask: linear-gradient(to top, transparent, black 20%); + width: 100%; + top: 0; + } + & .logo { height: 40px; } + & .burger-button { + all: unset; + color: var(--color-lightest); + } + & header { display: flex; align-items: center; justify-content: space-between; + width: 100%; font-weight: bold; & a { @@ -26,7 +43,7 @@ & .header-text { display: flex; align-items: center; - gap: 1rem; + gap: var(--padding-default); & > div { display: flex; @@ -34,69 +51,35 @@ } & .big { - font-size: 1.5em; + font-size: var(--font-size-xl); } & .small { - font-size: .8em; + font-size: var(--font-size-s); font-weight: 100; } } + } - & input[type="checkbox"] { - display: none; + &:not(.lp) { + &:after, &:before { + content: ''; + display: block; + position: absolute; + bottom: calc(-1 * var(--radius-border)); + background: var(--color-blue-darkest); + width: var(--radius-border); + height: var(--radius-border); } - & input[type="checkbox"]:checked + nav { - translate: 0; - } - - & nav, - & ul { - gap: 1em; - } - - & nav { - position: fixed; - padding: var(--padding-default); - translate: 100% 0; - width: 100vw; + &:after { right: 0; - top: 0; - height: 100dvh; - transition: 150ms ease-in-out; - background: var(--color-lightest); - font-size: 2em; - align-items: end; - z-index: 100; + mask: radial-gradient(var(--radius-border) at 0 100%,#0000 98%,#000); } - & ul { - width: 100%; - align-items: center; - & li { - list-style: none; - } + &:before { + left: 0; + mask: radial-gradient(var(--radius-border) at 100% 100%,#0000 98%,#000); } } - - &:after, &:before { - content: ''; - display: block; - position: absolute; - bottom: calc(-1 * var(--radius-border)); - background: var(--color-blue-darkest); - width: var(--radius-border); - height: var(--radius-border); - } - - &:after { - right: 0; - mask: radial-gradient(var(--radius-border) at 0 100%,#0000 98%,#000); - } - - &:before { - left: 0; - mask: radial-gradient(var(--radius-border) at 100% 100%,#0000 98%,#000); - } } \ No newline at end of file diff --git a/app/assets/styles/landingpage.css b/app/assets/styles/landingpage.css new file mode 100644 index 0000000..5d45215 --- /dev/null +++ b/app/assets/styles/landingpage.css @@ -0,0 +1,30 @@ +.home-hero { + background-image: linear-gradient(rgba(0,0,0,0.4), rgba(0,0,0,0.4)), url("/img/hero-image.webp"); /* single color gradient for dark layer over image */ + background-repeat: no-repeat; + background-position: center center; + background-size: cover; + color: var(--color-text-invert); + text-align: center; + height: 100vh; + display: flex; + justify-content: center; + align-items: center; + + button { + margin: var(--padding-xxl) auto 0; + } + + .text { + padding: var(--padding-default); + } + + h1 { + font-size: var(--font-size-xxl); + } +} + +.home-text { + padding: var(--padding-xxl) var(--padding-default); + text-align: center; +} + diff --git a/app/assets/styles/navigation.css b/app/assets/styles/navigation.css new file mode 100644 index 0000000..2b12356 --- /dev/null +++ b/app/assets/styles/navigation.css @@ -0,0 +1,69 @@ +.Navigation { + position: fixed; + display: flex; + justify-content: flex-end; + align-items: center; + z-index: 5000; + width: 100vw; + height: 100dvh; + right: 0; + top: 0; + transition: 150ms ease-in-out; + pointer-events: none; + + &.open { + pointer-events: all; + background: rgba(0, 0, 0, .5); + + & nav { + translate: -1rem 0; + } + } + + nav { + background: var(--color-lightest); + align-items: end; + box-shadow: var(--box-shadow-z2); + padding: var(--padding-default); + height: calc(100% - var(--padding-xxl)); + width: 70%; + translate: 100% 0; + transition: 150ms ease-in-out; + border-radius: var(--radius-default); + } + + & button { + justify-self: flex-end; + font-size: var(--font-size-xl); + } + + & ul { + width: 100%; + align-items: flex-start; + font-size: var(--font-size-l); + gap: var(--padding-default); + + & li { + list-style: none; + width: 100%; + + & a { + text-decoration: none; + display: flex; + align-items: center; + gap: var(--padding-default); + color: var(--color-middle); + border-radius: var(--radius-default); + padding: var(--padding-xs) var(--padding-s); + transition: var(--transition-default); + background: transparent; + cursor: pointer; + + &.active { + background: var(--color-main-light); + color: var(--color-main-dark); + } + } + } + } +} \ No newline at end of file diff --git a/app/assets/styles/page.css b/app/assets/styles/page.css index d621995..7dd7b75 100644 --- a/app/assets/styles/page.css +++ b/app/assets/styles/page.css @@ -49,10 +49,18 @@ overflow: hidden; background: var(--color-lightest); height: 100%; + + h1:first-of-type, + h2:first-of-type, + h3:first-of-type, + p:first-of-type, + figure:first-of-type { + margin-top: 0; + } } .content-text { - padding: var(--padding-large) var(--padding-default) var(--padding-default); + padding: var(--padding-xl) var(--padding-default) 0; color: var(--color-darkest); text-align: center; } @@ -67,6 +75,6 @@ } .Legal { - padding: var(--padding-large) var(--padding-default); + padding: var(--padding-l) var(--padding-default); color: var(--color-darkest); } \ No newline at end of file diff --git a/app/assets/styles/priceCard.css b/app/assets/styles/priceCard.css index 4abf44e..655f581 100755 --- a/app/assets/styles/priceCard.css +++ b/app/assets/styles/priceCard.css @@ -15,7 +15,7 @@ & > * { flex-grow: 1; color: var(--color-lightest); - font-size: 2rem; + font-size: var(--font-size-xl); display: flex; align-items: center; @@ -26,13 +26,13 @@ & .bg-edit { background: var(--color-main-dark); - padding: 2rem; + padding: var(--padding-xl); text-align: left; } & .bg-delete { background: var(--color-error); - padding: 2rem; + padding: var(--padding-xl); text-align: right; justify-content: flex-end; } @@ -42,7 +42,7 @@ position: relative; background: var(--color-lightest); z-index: 2; - gap: 1rem; + gap: var(--padding-default); padding: var(--padding-default); &.animated { @@ -56,14 +56,14 @@ color: var(--color-darkest); & .icon { - font-size: 1rem; + font-size: var(--font-size-default); cursor: pointer; } } & .name-price { display: flex; - gap: .5rem; + gap: var(--padding-xs); & > span:nth-child(1) { font-weight: bold; @@ -75,7 +75,7 @@ & > span:nth-child(2)::before { content: '•'; - margin-right: .5rem; + margin-right: var(--padding-xs); color: var(--color-middle); } } @@ -84,19 +84,19 @@ display: flex; flex-direction: row; width: 100%; - gap: 1rem; + gap: var(--padding-default); justify-content: space-between; & > .info { flex-grow: 0; align-items: center; - gap: .25rem; + gap: var(--padding-xxs); font-weight: bold; & > .price { display: flex; align-items: center; - gap: .5rem; + gap: var(--padding-xs); & > .icon { color: var(--color-main-dark); @@ -104,7 +104,7 @@ } & > .pro { - font-size: .6rem; + font-size: var(--font-size-xs); color: var(--color-middle); font-weight: lighter; } diff --git a/app/assets/styles/toolbar.css b/app/assets/styles/toolbar.css index 7a39e32..d78e9f7 100755 --- a/app/assets/styles/toolbar.css +++ b/app/assets/styles/toolbar.css @@ -8,7 +8,6 @@ box-shadow: var(--box-shadow-upper); & > .Button { - --padding: 1rem; - font-size: 1rem; + font-size: var(--font-size-default); } } \ No newline at end of file diff --git a/app/components/Pp/Form/TextField.vue b/app/components/Pp/Form/TextField.vue index 0c4f803..4e84828 100755 --- a/app/components/Pp/Form/TextField.vue +++ b/app/components/Pp/Form/TextField.vue @@ -1,9 +1,11 @@