Преглед изворни кода

mobile optimization

master
FlorianEisenmenger пре 22 часа
родитељ
комит
1b792b14f6
19 измењених фајлова са 255 додато и 1 уклоњено
  1. +8
    -0
      httpdocs/assets/styles/atoms/_mixins.scss
  2. +4
    -0
      httpdocs/assets/styles/atoms/_variables.scss
  3. +38
    -0
      httpdocs/assets/styles/components/_account.scss
  4. +9
    -0
      httpdocs/assets/styles/components/_crud.scss
  5. +27
    -0
      httpdocs/assets/styles/components/_entry-form.scss
  6. +14
    -0
      httpdocs/assets/styles/components/_entry-list.scss
  7. +3
    -0
      httpdocs/assets/styles/components/_greeting.scss
  8. +18
    -0
      httpdocs/assets/styles/components/_login.scss
  9. +3
    -0
      httpdocs/assets/styles/components/_main-nav.scss
  10. +5
    -0
      httpdocs/assets/styles/components/_month-calendar.scss
  11. +4
    -0
      httpdocs/assets/styles/components/_register.scss
  12. +6
    -0
      httpdocs/assets/styles/components/_stopwatch.scss
  13. +7
    -0
      httpdocs/assets/styles/components/_team.scss
  14. +11
    -0
      httpdocs/assets/styles/components/_week-nav.scss
  15. +6
    -0
      httpdocs/assets/styles/sections/_home.scss
  16. +63
    -0
      httpdocs/assets/styles/sections/_report.scss
  17. +11
    -0
      httpdocs/assets/styles/sections/_timetracking.scss
  18. +17
    -1
      httpdocs/assets/styles/themes/_minimal.scss
  19. +1
    -0
      httpdocs/templates/base.html.twig

+ 8
- 0
httpdocs/assets/styles/atoms/_mixins.scss Прегледај датотеку

@@ -51,3 +51,11 @@
white-space: nowrap; white-space: nowrap;
} }


@mixin tablet {
@media (max-width: $bp-tablet) { @content; }
}

@mixin mobile {
@media (max-width: $bp-mobile) { @content; }
}


+ 4
- 0
httpdocs/assets/styles/atoms/_variables.scss Прегледај датотеку

@@ -95,6 +95,10 @@ $transition-fast: 0.15s ease;
$transition-base: 0.2s ease; $transition-base: 0.2s ease;
$transition-slow: 0.3s ease; $transition-slow: 0.3s ease;


// ─── Breakpoints ─────────────────────────────────────────────────────────────
$bp-tablet: 980px;
$bp-mobile: 600px;

// ─── Layout ────────────────────────────────────────────────────────────────── // ─── Layout ──────────────────────────────────────────────────────────────────
$header-height: 88px; $header-height: 88px;
$content-max-width: 860px; $content-max-width: 860px;


+ 38
- 0
httpdocs/assets/styles/components/_account.scss Прегледај датотеку

@@ -10,6 +10,12 @@
.account-header { .account-header {
@include section-header; @include section-header;
padding: $space-6; padding: $space-6;

@include tablet {
flex-direction: column;
align-items: stretch;
gap: $space-3;
}
} }


.account-header__title { .account-header__title {
@@ -27,12 +33,21 @@
gap: $space-1; gap: $space-1;
backdrop-filter: blur(6px); backdrop-filter: blur(6px);
-webkit-backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);

@include tablet {
width: 100%;
}
} }


.account-tab { .account-tab {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
padding: $space-2 $space-5; padding: $space-2 $space-5;

@include tablet {
flex: 1;
justify-content: center;
}
font-size: $font-size-sm; font-size: $font-size-sm;
font-weight: $font-weight-medium; font-weight: $font-weight-medium;
color: var(--header-text-muted); color: var(--header-text-muted);
@@ -63,12 +78,18 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: $space-6; gap: $space-6;

@include tablet {
padding: 0 $space-4;
}
} }


// ─── Karte ─────────────────────────────────────────────────────────────────── // ─── Karte ───────────────────────────────────────────────────────────────────
.account-card { .account-card {
@include card; @include card;
padding: $space-8; padding: $space-8;

@include tablet { padding: $space-6 $space-5; }
} }


// ─── Formular-Grid ─────────────────────────────────────────────────────────── // ─── Formular-Grid ───────────────────────────────────────────────────────────
@@ -77,12 +98,23 @@
grid-template-columns: 160px 1fr; grid-template-columns: 160px 1fr;
gap: $space-4 $space-6; gap: $space-4 $space-6;
align-items: start; align-items: start;

@include tablet {
grid-template-columns: 1fr;
gap: $space-3;
}
} }


.account-form__label { .account-form__label {
@include form-label; @include form-label;
font-weight: $font-weight-medium; font-weight: $font-weight-medium;
padding-top: 7px; padding-top: 7px;

@include tablet {
text-align: left;
padding-right: 0;
padding-top: 0;
}
} }


.account-form__field { .account-form__field {
@@ -148,6 +180,12 @@
margin-top: $space-2; margin-top: $space-2;
padding-top: $space-4; padding-top: $space-4;
border-top: 1px solid $color-border; border-top: 1px solid $color-border;

@include tablet {
flex-direction: column;

.btn { width: 100%; }
}
} }


// ─── Toast ─────────────────────────────────────────────────────────────────── // ─── Toast ───────────────────────────────────────────────────────────────────


+ 9
- 0
httpdocs/assets/styles/components/_crud.scss Прегледај датотеку

@@ -6,6 +6,8 @@
max-width: $content-max-width; max-width: $content-max-width;
margin: 0 auto; margin: 0 auto;
padding: $space-6; padding: $space-6;

@include tablet { padding: $space-4; }
} }


.crud-page__header { .crud-page__header {
@@ -52,6 +54,8 @@
padding: $space-4 $space-6; padding: $space-4 $space-6;
transition: background $transition-fast; transition: background $transition-fast;


@include tablet { padding: $space-4; }

&:hover { &:hover {
background: rgba(var(--color-primary-rgb), 0.05); background: rgba(var(--color-primary-rgb), 0.05);


@@ -95,6 +99,7 @@
&--delete:hover{ background: rgba($color-error, 0.1); color: $color-error; } &--delete:hover{ background: rgba($color-error, 0.1); color: $color-error; }


@media (hover: none) { opacity: 1; } @media (hover: none) { opacity: 1; }
@include tablet { opacity: 1; }
} }


// ─── Edit-Formular innerhalb der Zeile ───────────────────────────────────────── // ─── Edit-Formular innerhalb der Zeile ─────────────────────────────────────────
@@ -102,6 +107,8 @@
padding: $space-4 $space-6; padding: $space-4 $space-6;
background: rgba(var(--color-primary-rgb), 0.04); background: rgba(var(--color-primary-rgb), 0.04);
border-top: 1px solid rgba($color-border, 0.5); border-top: 1px solid rgba($color-border, 0.5);

@include tablet { padding: $space-4; }
} }


// ─── Create-Formular oben ────────────────────────────────────────────────────── // ─── Create-Formular oben ──────────────────────────────────────────────────────
@@ -112,6 +119,8 @@
display: none; display: none;


&--visible { display: block; } &--visible { display: block; }

@include tablet { padding: $space-4; }
} }


// ─── Tabs (Aktiv / Archiviert) ───────────────────────────────────────────────── // ─── Tabs (Aktiv / Archiviert) ─────────────────────────────────────────────────


+ 27
- 0
httpdocs/assets/styles/components/_entry-form.scss Прегледај датотеку

@@ -5,6 +5,8 @@
.entry-form { .entry-form {
@include card($color-card); @include card($color-card);
padding: $space-6 $space-8; padding: $space-6 $space-8;

@include tablet { padding: $space-5 $space-4; }
} }


.entry-form__grid { .entry-form__grid {
@@ -12,6 +14,11 @@
grid-template-columns: 120px 1fr; grid-template-columns: 120px 1fr;
gap: $space-4 $space-6; gap: $space-4 $space-6;
align-items: center; align-items: center;

@include tablet {
grid-template-columns: 1fr;
gap: $space-3;
}
} }


.entry-form__label { .entry-form__label {
@@ -21,6 +28,11 @@
text-align: right; text-align: right;
padding-right: $space-2; padding-right: $space-2;
white-space: nowrap; white-space: nowrap;

@include tablet {
text-align: left;
padding-right: 0;
}
} }


.entry-form__field { .entry-form__field {
@@ -51,6 +63,15 @@
flex: 1; flex: 1;
min-width: 180px; min-width: 180px;
} }

@include tablet {
flex-direction: column;

.select {
min-width: 0;
width: 100%;
}
}
} }


.entry-form__actions { .entry-form__actions {
@@ -59,6 +80,12 @@
align-items: center; align-items: center;
gap: $space-4; gap: $space-4;
padding-top: $space-2; padding-top: $space-2;

@include tablet {
grid-column: 1;

.btn { width: 100%; }
}
} }


// ─── Rate Mode (Radio: Default / Custom) ──────────────────────────────────── // ─── Rate Mode (Radio: Default / Custom) ────────────────────────────────────


+ 14
- 0
httpdocs/assets/styles/components/_entry-list.scss Прегледај датотеку

@@ -29,6 +29,8 @@
justify-content: flex-end; justify-content: flex-end;
padding: $space-3 calc(#{$space-8} + #{$icon-btn-size} + #{$icon-btn-size} + #{$space-2} + #{$space-2}); padding: $space-3 calc(#{$space-8} + #{$icon-btn-size} + #{$icon-btn-size} + #{$space-2} + #{$space-2});
border-top: 1px solid $color-border; border-top: 1px solid $color-border;

@include tablet { padding: $space-3 $space-4; }
} }


.entry-list__total { .entry-list__total {
@@ -75,6 +77,10 @@


.entry-row__btn { opacity: 1; } .entry-row__btn { opacity: 1; }
} }

@include tablet {
padding: $space-4;
}
} }


.entry-row__info { .entry-row__info {
@@ -126,6 +132,7 @@
&--delete:hover{ background: rgba($color-error, 0.1); color: $color-error; } &--delete:hover{ background: rgba($color-error, 0.1); color: $color-error; }


@media (hover: none) { opacity: 1; } @media (hover: none) { opacity: 1; }
@include tablet { opacity: 1; }
} }


// ─── Lock-Indikator (invoiced) ──────────────────────────────────────────── // ─── Lock-Indikator (invoiced) ────────────────────────────────────────────
@@ -152,6 +159,8 @@
padding: $space-4 $space-8; padding: $space-4 $space-8;
background: rgba(var(--color-primary-rgb), 0.04); background: rgba(var(--color-primary-rgb), 0.04);
border-top: 1px solid rgba($color-border, 0.5); border-top: 1px solid rgba($color-border, 0.5);

@include tablet { padding: $space-4; }
} }


.entry-form__grid--inline { .entry-form__grid--inline {
@@ -159,4 +168,9 @@
grid-template-columns: 130px 1fr; grid-template-columns: 130px 1fr;
gap: $space-3 $space-6; gap: $space-3 $space-6;
align-items: center; align-items: center;

@include tablet {
grid-template-columns: 1fr;
gap: $space-3;
}
} }

+ 3
- 0
httpdocs/assets/styles/components/_greeting.scss Прегледај датотеку

@@ -1,4 +1,5 @@
@use '../atoms/variables' as *; @use '../atoms/variables' as *;
@use '../atoms/mixins' as *;


// ─── Begrüßung zwischen Header und Formular ─────────────────────────────────── // ─── Begrüßung zwischen Header und Formular ───────────────────────────────────
.greeting { .greeting {
@@ -7,6 +8,8 @@
margin: 0 auto; margin: 0 auto;
padding: $space-5 $space-6 0; padding: $space-5 $space-6 0;


@include tablet { padding: $space-4 $space-4 0; }

&__text { &__text {
font-size: $font-size-lg; font-size: $font-size-lg;
font-weight: $font-weight-bold; font-weight: $font-weight-bold;


+ 18
- 0
httpdocs/assets/styles/components/_login.scss Прегледај датотеку

@@ -16,6 +16,12 @@
padding: $space-10 $space-12; padding: $space-10 $space-12;
width: 100%; width: 100%;
max-width: 540px; max-width: 540px;

@include tablet {
padding: $space-8 $space-5;
margin: $space-4;
max-width: calc(100% - #{$space-8});
}
} }


.login-card__title { .login-card__title {
@@ -43,11 +49,21 @@
gap: $space-5 $space-4; gap: $space-5 $space-4;
align-items: center; align-items: center;
margin-bottom: $space-5; margin-bottom: $space-5;

@include mobile {
grid-template-columns: 1fr;
gap: $space-3;
}
} }


.login-form__label { .login-form__label {
@include form-label; @include form-label;
font-size: $font-size-base; font-size: $font-size-base;

@include mobile {
text-align: left;
padding-right: 0;
}
} }


.login-form__field { .login-form__field {
@@ -138,4 +154,6 @@
.login-form__submit { .login-form__submit {
padding: $space-3 $space-10; padding: $space-3 $space-10;
font-size: $font-size-md; font-size: $font-size-md;

@include tablet { width: 100%; }
} }

+ 3
- 0
httpdocs/assets/styles/components/_main-nav.scss Прегледај датотеку

@@ -1,4 +1,5 @@
@use '../atoms/variables' as *; @use '../atoms/variables' as *;
@use '../atoms/mixins' as *;


// ─── Dunkle Top-Navigation ──────────────────────────────────────────────────── // ─── Dunkle Top-Navigation ────────────────────────────────────────────────────
.main-nav { .main-nav {
@@ -12,6 +13,8 @@
position: sticky; position: sticky;
top: 0; top: 0;
z-index: 200; z-index: 200;

@include tablet { display: none; }
} }


.main-nav__left, .main-nav__left,


+ 5
- 0
httpdocs/assets/styles/components/_month-calendar.scss Прегледај датотеку

@@ -17,6 +17,11 @@
opacity 0.28s ease, opacity 0.28s ease,
transform 0.28s ease; transform 0.28s ease;


@include mobile {
width: calc(100vw - #{$space-8});
right: -#{$space-4};
}

&--hidden { &--hidden {
opacity: 0; opacity: 0;
transform: scaleY(0.92) translateY(-8px); transform: scaleY(0.92) translateY(-8px);


+ 4
- 0
httpdocs/assets/styles/components/_register.scss Прегледај датотеку

@@ -19,6 +19,8 @@
.register-card { .register-card {
@include card($color-card-white, $radius-xl); @include card($color-card-white, $radius-xl);
padding: $space-10 $space-12; padding: $space-10 $space-12;

@include tablet { padding: $space-8 $space-5; }
} }


.register-card__brand { .register-card__brand {
@@ -114,6 +116,8 @@
grid-template-columns: 1fr 1fr; grid-template-columns: 1fr 1fr;
gap: $space-4; gap: $space-4;
margin-bottom: $space-5; margin-bottom: $space-5;

@include mobile { grid-template-columns: 1fr; }
} }


// ─── Actions ────────────────────────────────────────────────────────────────── // ─── Actions ──────────────────────────────────────────────────────────────────


+ 6
- 0
httpdocs/assets/styles/components/_stopwatch.scss Прегледај датотеку

@@ -88,6 +88,12 @@
gap: $space-3; gap: $space-3;
box-shadow: $shadow-calendar; box-shadow: $shadow-calendar;


@include mobile {
width: calc(100vw - #{$space-8});
left: 0;
transform: none;
}

&::before { &::before {
content: ''; content: '';
position: absolute; position: absolute;


+ 7
- 0
httpdocs/assets/styles/components/_team.scss Прегледај датотеку

@@ -33,6 +33,11 @@
max-width: 460px; max-width: 460px;
padding: 0; padding: 0;
overflow: hidden; overflow: hidden;

@include tablet {
margin: $space-4;
max-width: calc(100% - #{$space-8});
}
} }


.modal-card__header { .modal-card__header {
@@ -78,6 +83,8 @@
display: grid; display: grid;
grid-template-columns: 1fr 1fr; grid-template-columns: 1fr 1fr;
gap: $space-4; gap: $space-4;

@include mobile { grid-template-columns: 1fr; }
} }


.form-field { .form-field {


+ 11
- 0
httpdocs/assets/styles/components/_week-nav.scss Прегледај датотеку

@@ -11,6 +11,11 @@
padding: $space-1 $space-2; padding: $space-1 $space-2;
backdrop-filter: blur(6px); backdrop-filter: blur(6px);
-webkit-backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);

@include tablet {
width: 100%;
justify-content: center;
}
} }


// ─── Pfeile ────────────────────────────────────────────────────────────────── // ─── Pfeile ──────────────────────────────────────────────────────────────────
@@ -58,6 +63,12 @@
transition: background $transition-fast; transition: background $transition-fast;
user-select: none; user-select: none;


@include tablet {
width: auto;
flex: 1;
min-width: 0;
}

&:hover:not(.week-nav__day--active) { &:hover:not(.week-nav__day--active) {
background: var(--header-overlay); background: var(--header-overlay);
} }


+ 6
- 0
httpdocs/assets/styles/sections/_home.scss Прегледај датотеку

@@ -37,6 +37,8 @@
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: $space-12 $space-8; padding: $space-12 $space-8;

@include tablet { padding: $space-8 $space-4; }
} }


.home-hero__inner { .home-hero__inner {
@@ -50,6 +52,8 @@
color: $color-text-dark; color: $color-text-dark;
line-height: 1.2; line-height: 1.2;
margin-bottom: $space-6; margin-bottom: $space-6;

@include mobile { font-size: 2rem; }
} }


.home-hero__sub { .home-hero__sub {
@@ -62,4 +66,6 @@
.home-hero__cta { .home-hero__cta {
font-size: $font-size-md; font-size: $font-size-md;
padding: $space-4 $space-10; padding: $space-4 $space-10;

@include tablet { width: 100%; }
} }

+ 63
- 0
httpdocs/assets/styles/sections/_report.scss Прегледај датотеку

@@ -10,6 +10,12 @@
.report-header { .report-header {
@include section-header; @include section-header;
padding: $space-4 $space-6; padding: $space-4 $space-6;

@include tablet {
flex-direction: column;
align-items: stretch;
gap: $space-3;
}
} }


.report-header__title { .report-header__title {
@@ -22,6 +28,10 @@
display: flex; display: flex;
align-items: center; align-items: center;
gap: $space-4; gap: $space-4;

@include tablet {
flex-wrap: wrap;
}
} }


// ─── Account-Name Anzeige ──────────────────────────────────────────────────── // ─── Account-Name Anzeige ────────────────────────────────────────────────────
@@ -61,12 +71,18 @@
width: 100%; width: 100%;
margin: $space-6 auto; margin: $space-6 auto;
padding: 0 $space-6; padding: 0 $space-6;

@include tablet {
padding: 0 $space-4;
}
} }


// ─── Karte ─────────────────────────────────────────────────────────────────── // ─── Karte ───────────────────────────────────────────────────────────────────
.report-card { .report-card {
@include card; @include card;
overflow: hidden; overflow: hidden;

@include tablet { overflow-x: auto; }
} }


// ─── Toolbar ───────────────────────────────────────────────────────────────── // ─── Toolbar ─────────────────────────────────────────────────────────────────
@@ -76,6 +92,11 @@
justify-content: space-between; justify-content: space-between;
padding: $space-3 $space-5; padding: $space-3 $space-5;
border-bottom: 1px solid $color-border; border-bottom: 1px solid $color-border;

@include tablet {
flex-wrap: wrap;
gap: $space-3;
}
} }


.report-toolbar__left { .report-toolbar__left {
@@ -135,6 +156,8 @@
// ─── Tabelle ───────────────────────────────────────────────────────────────── // ─── Tabelle ─────────────────────────────────────────────────────────────────
.report-table { .report-table {
width: 100%; width: 100%;

@include tablet { min-width: 900px; }
} }


.report-table__head, .report-table__head,
@@ -254,6 +277,8 @@


svg { width: $icon-svg-size; height: $icon-svg-size; } svg { width: $icon-svg-size; height: $icon-svg-size; }


@include tablet { opacity: 1; }

&:hover { &:hover {
color: $color-text-muted; color: $color-text-muted;
background: rgba($color-text-dark, 0.06); background: rgba($color-text-dark, 0.06);
@@ -301,10 +326,20 @@
gap: $space-3 $space-5; gap: $space-3 $space-5;
align-items: center; align-items: center;
max-width: 680px; max-width: 680px;

@include tablet {
grid-template-columns: 1fr;
gap: $space-3;
}
} }


.report-row__edit-label { .report-row__edit-label {
@include form-label; @include form-label;

@include tablet {
text-align: left;
padding-right: 0;
}
} }


.report-row__edit-field { .report-row__edit-field {
@@ -319,6 +354,15 @@
flex: 1; flex: 1;
min-width: 160px; min-width: 160px;
} }

@include tablet {
flex-direction: column;

.select {
min-width: 0;
width: 100%;
}
}
} }


.textarea { .textarea {
@@ -331,6 +375,12 @@
display: flex; display: flex;
gap: $space-3; gap: $space-3;
padding-top: $space-2; padding-top: $space-2;

@include tablet {
grid-column: 1;

.btn { flex: 1; }
}
} }


// ─── Pagination-Footer ──────────────────────────────────────────────────────── // ─── Pagination-Footer ────────────────────────────────────────────────────────
@@ -409,12 +459,19 @@ button.report-toolbar__action {
.report-filter__body { .report-filter__body {
display: flex; display: flex;
gap: $space-10; gap: $space-10;

@include tablet {
flex-direction: column;
gap: $space-6;
}
} }


.report-filter__col { .report-filter__col {
flex: 1; flex: 1;
min-width: 0; min-width: 0;
max-width: 66%; max-width: 66%;

@include tablet { max-width: 100%; }
} }


.report-filter__heading { .report-filter__heading {
@@ -437,6 +494,10 @@ button.report-toolbar__action {


&:last-child { border-bottom: none; } &:last-child { border-bottom: none; }


@include mobile {
grid-template-columns: 1fr;
}

&--inactive { &--inactive {
.filter-select, .filter-select,
.filter-note-input, .filter-note-input,
@@ -505,6 +566,8 @@ button.report-toolbar__action {
.filter-note-input { .filter-note-input {
width: 300px; width: 300px;
max-width: 100%; max-width: 100%;

@include tablet { width: 100%; }
} }


&--period { &--period {


+ 11
- 0
httpdocs/assets/styles/sections/_timetracking.scss Прегледај датотеку

@@ -14,6 +14,13 @@
position: sticky; position: sticky;
top: 0; top: 0;
z-index: 100; z-index: 100;

@include tablet {
flex-direction: column;
align-items: stretch;
gap: $space-3;
min-height: auto;
}
} }


.tt-header__meta { .tt-header__meta {
@@ -44,4 +51,8 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: $space-4; gap: $space-4;

@include tablet {
padding: $space-4;
}
} }

+ 17
- 1
httpdocs/assets/styles/themes/_minimal.scss Прегледај датотеку

@@ -173,8 +173,15 @@ body[data-theme="minimal"] {
// ─── Hamburger-Nav (immer im DOM, per CSS im Standard versteckt) ────────────── // ─── Hamburger-Nav (immer im DOM, per CSS im Standard versteckt) ──────────────


.hamburger-nav { .hamburger-nav {
display: none; // Standard: versteckt
display: none;
position: relative; position: relative;

@include tablet {
display: flex;
align-items: center;
justify-content: space-between;
padding: $space-3 $space-4;
}
} }


.hamburger-nav__toggle { .hamburger-nav__toggle {
@@ -369,6 +376,10 @@ body[data-theme="minimal"] {
display: flex; display: flex;
gap: $space-3; gap: $space-3;
flex-wrap: wrap; flex-wrap: wrap;

@include tablet {
flex-direction: column;
}
} }


.theme-option { .theme-option {
@@ -383,6 +394,11 @@ body[data-theme="minimal"] {
transition: border-color $transition-fast, background $transition-fast; transition: border-color $transition-fast, background $transition-fast;
user-select: none; user-select: none;


@include tablet {
min-width: 0;
width: 100%;
}

input[type="radio"] { display: none; } input[type="radio"] { display: none; }


&:hover { border-color: var(--color-primary-light); background: rgba($color-primary, 0.02); } &:hover { border-color: var(--color-primary-light); background: rgba($color-primary, 0.02); }


+ 1
- 0
httpdocs/templates/base.html.twig Прегледај датотеку

@@ -2,6 +2,7 @@
<html> <html>
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}Welcome!{% endblock %}</title> <title>{% block title %}Welcome!{% endblock %}</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text><text y=%221.3em%22 x=%220.2em%22 font-size=%2276%22 fill=%22%23fff%22>sf</text></svg>"> <link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text><text y=%221.3em%22 x=%220.2em%22 font-size=%2276%22 fill=%22%23fff%22>sf</text></svg>">
{% block stylesheets %} {% block stylesheets %}


Loading…
Откажи
Сачувај