diff --git a/.prettierignore b/.prettierignore index ce02aa4..a5aef14 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,2 @@ # **/templates/**/*.html -base.html \ No newline at end of file +# base.html \ No newline at end of file diff --git a/.worktime b/.worktime index 0cc171a..cd3c49d 100644 --- a/.worktime +++ b/.worktime @@ -7,4 +7,5 @@ 15.07.2022 - 3h 24.07.2022 - 3h 30 mins 25.07.2022 - 3h 30 mins -26.07.2022 - 1h 30 mins \ No newline at end of file +26.07.2022 - 1h 30 mins +27.07.2022 - 4h \ No newline at end of file diff --git a/core/admin.py b/core/admin.py index 464841f..6f406f9 100644 --- a/core/admin.py +++ b/core/admin.py @@ -24,6 +24,7 @@ apps = [ 'gpb', 'tournaments', 'membership', + 'youth', 'atu', 'core' ] diff --git a/core/context_processors.py b/core/context_processors.py index 20e3faa..0159074 100644 --- a/core/context_processors.py +++ b/core/context_processors.py @@ -1,6 +1,36 @@ + from .models import * +from db.main.models import * +from db.administration.models import * +from db.league.models import * +from db.calendar.models import * +from db.gpb.models import * +from db.tournaments.models import * +from db.membership.models import * +from db.youth.models import * +from db.atu.models import * def load_config(request): - config = {'nav': Button.objects.all()} - return {'config': config} + return { + 'nav': Button.objects.all(), + 'gpw': GrandPrixW.load(), + 'posts': Post.objects.all(), + 'czlonkowie': Member.objects.all(), + 'statut': Statute.objects.first(), + 'ogloszenia': Announcement.objects.all(), + 'protokoly': Protocol.objects.all(), + 'regulaminy': Regulation.objects.all(), + 'rodos': RODO.objects.all(), + 'leagues': { + 'Wyniki I Ligi': FirstLeague.objects.all(), + 'Wyniki II Ligi': SecondLeague.objects.all(), + 'Wyniki III Ligi': ThirdLeague.objects.all() + }, + 'calendars': Calendar.objects.all(), + 'gpb': GrandPrixB.load(), + 'tournaments': Tournament.objects.all(), + 'memberships': Membership.objects.all(), + 'youth': Youth.load(), + 'atu': Atu.load() + } diff --git a/core/static/labs.jpg b/core/static/labs.jpg new file mode 100644 index 0000000..a20896e Binary files /dev/null and b/core/static/labs.jpg differ diff --git a/core/static/podlzbs.jpg b/core/static/podlzbs.jpg new file mode 100644 index 0000000..9f5bf08 Binary files /dev/null and b/core/static/podlzbs.jpg differ diff --git a/core/templates/administration.html b/core/templates/administration.html index 28c9ec0..5a3fc5f 100644 --- a/core/templates/administration.html +++ b/core/templates/administration.html @@ -6,63 +6,77 @@
-

Zarząd PodlZBS

+

Zarząd PodlZBS

{% block adm_content %} -

- - {{ statut.title }} - -

+ +

{{ statut.title }}

+
-

Dane adresowe

+

Dane adresowe

- Adres Podlaskiego ZBS - 15-057 Białystok - ul. B. Chrobrego 5B m.33 - Konto: PKO SA O/B-tok 43 1240 5211 1111 0000 4919 1721 - NIP: 542 258 14 53 REGON 050816091 + Adres Podlaskiego ZBS - 15-057 Białystok + ul. B. Chrobrego 5B m.33 + Konto: PKO SA O/B-tok + 43 1240 5211 1111 0000 4919 1721 + + NIP: 542 258 14 53 + REGON: 050816091

-

Członkowie

+

Członkowie

{% if czlonkowie %}
{% for member in czlonkowie %}

{{ member.function }}
diff --git a/core/templates/atu.html b/core/templates/atu.html index 695e34d..831bb31 100644 --- a/core/templates/atu.html +++ b/core/templates/atu.html @@ -2,8 +2,10 @@ {% block title %}ATU | pdlzbs{% endblock %} -{% load static tailwind_tags %} {% block content %} +{% load static tailwind_tags tablepipe %} {% block content %}
-
{{ atu.content | safe }}
+
+ {{ atu.content | tablescroll | safe }} +
{% endblock %} diff --git a/core/templates/base.html b/core/templates/base.html index 3463da6..9b57589 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -20,18 +20,32 @@
-
-
-
+
+
+ +
+
-

Podlaski Związek
Brydża Sportowego

+

+ Podlaski Związek
+ Brydża Sportowego +

- {% if config.nav %} + {% if nav %}
-
+
{% block content %}{% endblock %}
diff --git a/core/templates/calendar.html b/core/templates/calendar.html index 3c5c517..4650240 100644 --- a/core/templates/calendar.html +++ b/core/templates/calendar.html @@ -1,16 +1,14 @@ {% extends 'base.html' %} {% block title %}Kalendarz | pdlzbs{% endblock %} {% -load static tailwind_tags %} {% block content %} +load static tailwind_tags tablepipe %} {% block content %}
{% for calendar in calendars %}
-

- Kalendarz {{ calendar.year }} -

-
{{ calendar.content | safe }}
+ {{ calendar.content | tablescroll | safe }}
{% if not forloop.last %}
{% endif %} {% empty %} Brak kalendarzy - {% endfor %} {% endblock %} + {% endfor %}
+{% endblock %} diff --git a/core/templates/grandprix.html b/core/templates/grandprix.html index 668ca94..ab58452 100644 --- a/core/templates/grandprix.html +++ b/core/templates/grandprix.html @@ -2,11 +2,6 @@ {% block title %}Grand Prix Białegostoku | pdlzbs{% endblock %} -{% load static tailwind_tags %} {% block content %} -
-

- Grand Prix Białegostoku -

-
{{ gp.content | safe }}
-
+{% load static tailwind_tags tablepipe %} {% block content %} +
{{ gpb.content | tablescroll | safe }}
{% endblock %} diff --git a/core/templates/home.html b/core/templates/home.html index 76a4889..936b1d1 100644 --- a/core/templates/home.html +++ b/core/templates/home.html @@ -1,15 +1,14 @@ {% extends 'base.html' %} {% block title %}Strona główna | pdlzbs{% endblock %} -{% load static tailwind_tags %} {% block content %} +{% load static tailwind_tags tablepipe %} {% block content %}
-

Grand Prix Województwa

- {{ gpw.content | safe }} + {{ gpw.content | tablescroll | safe }}
-
+

Aktualności PodlZBS

@@ -18,14 +17,14 @@
-

{{ post.title }}

-
{{ post.content | safe }}
+ {% if post.title %} +

{{ post.title }}

+ {% endif %} +
{{ post.content | tablescroll | safe }}
{% if not forloop.last %}
- {% endif %} {% empty %} -

Więcej wpisów nie ma

- {% endfor %} + {% endif %} {% endfor %}
{% endblock %} diff --git a/core/templates/league.html b/core/templates/league.html index 35dbba3..dfd9c2c 100644 --- a/core/templates/league.html +++ b/core/templates/league.html @@ -1,24 +1,34 @@ {% extends 'base.html' %} -{% block title %}Liga | pdlzbs{% endblock %} +{% block title %}Ligi | pdlzbs{% endblock %} {% load static tailwind_tags %} {% block content %} -

Wyniki III ligi

+ + {% if leagues %} - +
{% else %} -

Brak wyników

+

Brak wyników

{% endif %} {% endblock %} diff --git a/core/templates/membership.html b/core/templates/membership.html index 34c0774..59b8524 100644 --- a/core/templates/membership.html +++ b/core/templates/membership.html @@ -2,24 +2,14 @@ {% block title %}Składki Członkowskie | pdlzbs{% endblock %} -{% load static tailwind_tags %} {% block content %} -

- Składki członkowskie -

-{% if memberships %} -
    +{% load static tailwind_tags tablepipe %} {% block content %} +
    {% for membership in memberships %} -
  • - -

    {{ membership }}

    -
    -
  • +
    {{ membership.content | safe }}
    + {% if not forloop.last %} +
    + {% endif %} {% empty %} + Brak dokumentów {% endfor %} -
-{% else %} -

Brak dokumentów

-{% endif %} {% endblock %} +
+{% endblock %} diff --git a/core/templates/tournaments.html b/core/templates/tournaments.html index 4ffdf22..705da01 100644 --- a/core/templates/tournaments.html +++ b/core/templates/tournaments.html @@ -2,13 +2,13 @@ {% block title %}Składki Członkowskie | pdlzbs{% endblock %} -{% load static tailwind_tags %} {% block content %} -

Inne turnieje

+{% load static tailwind_tags tablepipe %} {% block content %} +

Inne turnieje

{% if tournaments %}
{% for tournament in tournaments %}
{% if tournament.title %}

{{ tournament.title }}

@@ -23,7 +23,7 @@ Wyniki @@ -34,5 +34,5 @@ {% endif %} {% endfor %}
{% else %} -

Brak turniejów

+

Brak turniejów

{% endif %} {% endblock %} diff --git a/core/templates/youth.html b/core/templates/youth.html new file mode 100644 index 0000000..af007c7 --- /dev/null +++ b/core/templates/youth.html @@ -0,0 +1,7 @@ +{% extends 'base.html' %} + +{% block title %}Młodzież | pdlzbs{% endblock %} + +{% load static tailwind_tags tablepipe %} {% block content %} +
{{ youth.content | safe }}
+{% endblock %} diff --git a/core/templatetags/__init__.py b/core/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/templatetags/tablepipe.py b/core/templatetags/tablepipe.py new file mode 100644 index 0000000..3453c71 --- /dev/null +++ b/core/templatetags/tablepipe.py @@ -0,0 +1,10 @@ +from django import template +import re + +register = template.Library() + + +@register.filter(name='tablescroll') +def get_due_date_string(value): + a = re.sub(r']*?>', '
\g<0>', value) + return re.sub(r'<\/table>', '
', a) diff --git a/core/urls.py b/core/urls.py index 8356469..5e2d613 100644 --- a/core/urls.py +++ b/core/urls.py @@ -12,10 +12,11 @@ urlpatterns = [ name='administration_regulations'), path('zarzad/rodo', AdministrationRODOView.as_view(), name='administration_rodos'), - path('liga', LeagueView.as_view(), name='league'), + path('ligi', LeagueView.as_view(), name='league'), path('kalendarz', CalendarView.as_view(), name='calendar'), path('grandprixbialegostoku', GrandPrixView.as_view(), name='gpx'), path('inneturnieje', TournamentView.as_view(), name='tournaments'), path('skladki', MembershipView.as_view(), name='membership'), + path('mlodziez', YouthView.as_view(), name='youth'), path('atu', AtuView.as_view(), name='atu'), ] diff --git a/core/views.py b/core/views.py index bb14481..1490613 100644 --- a/core/views.py +++ b/core/views.py @@ -3,136 +3,59 @@ from django.views.generic import TemplateView import importlib import pkgutil -from db.main.models import * -from db.administration.models import * -from db.league.models import * -from db.calendar.models import * -from db.gpb.models import * -from db.tournaments.models import * -from db.membership.models import * -from db.atu.models import * - # Create your views here. class HomeView(TemplateView): template_name = 'home.html' - - def get_context_data(self, **kwargs): - return { - **super().get_context_data(**kwargs), - 'home': 'active', - 'gpw': GrandPrixW.load(), - 'posts': Post.objects.all(), - } + extra_context = { + 'home': 'active' + } class AdministrationView(TemplateView): template_name = 'administration.html' - def get_context_data(self, **kwargs): - return { - **super().get_context_data(**kwargs), - 'czlonkowie': Member.objects.all(), - 'statut': Statute.objects.first(), - } - class AdministrationAnnouncementsView(TemplateView): template_name = 'administration/announcements.html' - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context['ogloszenia'] = Announcement.objects.all() - - return context - class AdministrationProtocolsView(TemplateView): template_name = 'administration/protocols.html' - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context['protokoly'] = Protocol.objects.all() - - return context - class AdministrationRegulationsView(TemplateView): template_name = 'administration/regulations.html' - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context['regulaminy'] = Regulation.objects.all() - - return context - class AdministrationRODOView(TemplateView): template_name = 'administration/rodos.html' - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context['rodos'] = RODO.objects.all() - - return context - class LeagueView(TemplateView): template_name = 'league.html' - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context['leagues'] = League.objects.all() - - return context - class CalendarView(TemplateView): template_name = 'calendar.html' - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context['calendars'] = Calendar.objects.all() - - return context - class GrandPrixView(TemplateView): template_name = 'grandprix.html' - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context['gp'] = GrandPrixB.load() - - return context - class TournamentView(TemplateView): template_name = "tournaments.html" - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context['tournaments'] = Tournament.objects.all() - - return context - class MembershipView(TemplateView): template_name = 'membership.html' - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context['memberships'] = Membership.objects.all() - return context +class YouthView(TemplateView): + template_name = "youth.html" class AtuView(TemplateView): template_name = 'atu.html' - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context['atu'] = Atu.load() - - return context diff --git a/db/league/migrations/0003_firstleague_secondleague_rename_league_thirdleague_and_more.py b/db/league/migrations/0003_firstleague_secondleague_rename_league_thirdleague_and_more.py new file mode 100644 index 0000000..d11a11e --- /dev/null +++ b/db/league/migrations/0003_firstleague_secondleague_rename_league_thirdleague_and_more.py @@ -0,0 +1,43 @@ +# Generated by Django 4.0.5 on 2022-07-27 00:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('league', '0002_alter_league_options'), + ] + + operations = [ + migrations.CreateModel( + name='FirstLeague', + fields=[ + ('year', models.IntegerField(primary_key=True, serialize=False, verbose_name='Rok')), + ('link', models.CharField(max_length=512, verbose_name='Link do wyników')), + ], + options={ + 'verbose_name': 'Wyniki I ligi', + 'verbose_name_plural': 'Wyniki I ligi', + }, + ), + migrations.CreateModel( + name='SecondLeague', + fields=[ + ('year', models.IntegerField(primary_key=True, serialize=False, verbose_name='Rok')), + ('link', models.CharField(max_length=512, verbose_name='Link do wyników')), + ], + options={ + 'verbose_name': 'Wyniki II ligi', + 'verbose_name_plural': 'Wyniki II ligi', + }, + ), + migrations.RenameModel( + old_name='League', + new_name='ThirdLeague', + ), + migrations.AlterModelOptions( + name='thirdleague', + options={'verbose_name': 'Wyniki III ligi', 'verbose_name_plural': 'Wyniki III ligi'}, + ), + ] diff --git a/db/league/models.py b/db/league/models.py index e3d75b2..5a9883e 100644 --- a/db/league/models.py +++ b/db/league/models.py @@ -4,13 +4,37 @@ from django.db import models class League(models.Model): + rank = '_' year = models.IntegerField('Rok', primary_key=True) link = models.CharField('Link do wyników', max_length=512) def __str__(self): - return f'Liga {self.year}' + return f'{self.rank} Liga {self.year}' class Meta: - verbose_name = 'Wyniki ligi' - verbose_name_plural = 'Wyniki ligi' + abstract = True ordering = ['-year'] + + +class FirstLeague(League): + rank = 'I' + + class Meta: + verbose_name = 'Wyniki I ligi' + verbose_name_plural = 'Wyniki I ligi' + + +class SecondLeague(League): + rank = 'II' + + class Meta: + verbose_name = 'Wyniki II ligi' + verbose_name_plural = 'Wyniki II ligi' + + +class ThirdLeague(League): + rank = 'III' + + class Meta: + verbose_name = 'Wyniki III ligi' + verbose_name_plural = 'Wyniki III ligi' diff --git a/db/membership/migrations/0002_remove_membership_attachment_membership_content.py b/db/membership/migrations/0002_remove_membership_attachment_membership_content.py new file mode 100644 index 0000000..2f261ae --- /dev/null +++ b/db/membership/migrations/0002_remove_membership_attachment_membership_content.py @@ -0,0 +1,23 @@ +# Generated by Django 4.0.5 on 2022-07-27 01:06 + +from django.db import migrations +import tinymce.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('membership', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='membership', + name='attachment', + ), + migrations.AddField( + model_name='membership', + name='content', + field=tinymce.models.HTMLField(blank=True, default='', verbose_name='Treść'), + ), + ] diff --git a/db/membership/models.py b/db/membership/models.py index 22c95b0..a07494b 100644 --- a/db/membership/models.py +++ b/db/membership/models.py @@ -1,11 +1,12 @@ from django.db import models +from tinymce.models import HTMLField # Create your models here. class Membership(models.Model): year = models.IntegerField('Rok', primary_key=True) - attachment = models.FileField('Plik pdf', upload_to='skladki') + content = HTMLField('Treść', default='', blank=True) def __str__(self): return f'Składki członkowskie {self.year}' diff --git a/db/tournaments/models.py b/db/tournaments/models.py index f186aad..4d3dbc5 100644 --- a/db/tournaments/models.py +++ b/db/tournaments/models.py @@ -14,7 +14,7 @@ class Tournament(OrderableModel): link = models.TextField('Link do wyników') def __str__(self): - return self.title or '(bez tytułu)' + return self.title or '(brak tytułu)' class Meta(OrderableModel.Meta): verbose_name = 'Inny turniej' diff --git a/db/youth/__init__.py b/db/youth/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/db/youth/apps.py b/db/youth/apps.py new file mode 100644 index 0000000..ce8090e --- /dev/null +++ b/db/youth/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class YouthConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'db.youth' + verbose_name = '8. Młodzież' diff --git a/db/youth/migrations/0001_initial.py b/db/youth/migrations/0001_initial.py new file mode 100644 index 0000000..28307f1 --- /dev/null +++ b/db/youth/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# Generated by Django 4.0.5 on 2022-07-26 22:29 + +from django.db import migrations, models +import tinymce.models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Youth', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('content', tinymce.models.HTMLField(blank=True, default='', verbose_name='Tekst')), + ], + options={ + 'verbose_name': 'Młodzież', + 'verbose_name_plural': 'Młodzież', + }, + ), + ] diff --git a/db/youth/migrations/__init__.py b/db/youth/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/db/youth/models.py b/db/youth/models.py new file mode 100644 index 0000000..bf7b5bf --- /dev/null +++ b/db/youth/models.py @@ -0,0 +1,16 @@ +from django.db import models +from tinymce.models import HTMLField +from core.utils import SingletonModel + +# Create your models here. + + +class Youth(SingletonModel): + content = HTMLField('Tekst', default='', blank=True) + + def __str__(self): + return 'Młodzież' + + class Meta: + verbose_name = 'Młodzież' + verbose_name_plural = 'Młodzież' diff --git a/pdlzbs/settings.py b/pdlzbs/settings.py index a747b30..24b8195 100644 --- a/pdlzbs/settings.py +++ b/pdlzbs/settings.py @@ -50,6 +50,7 @@ INSTALLED_APPS = [ 'db.gpb', 'db.tournaments', 'db.membership', + 'db.youth', 'db.atu', 'theme', 'core' diff --git a/static/css/dist/styles.css b/static/css/dist/styles.css index c5b585b..0de7b27 100644 --- a/static/css/dist/styles.css +++ b/static/css/dist/styles.css @@ -1081,19 +1081,12 @@ select { margin-bottom: 0; } -.nav-item > a { +.button { display: inline-block; border-radius: 0.375rem; border-width: 1px; - border-color: rgb(187 247 208 / var(--tw-border-opacity)); - --tw-border-opacity: 1; - border-bottom-color: rgb(34 197 94 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(220 252 231 / var(--tw-bg-opacity)); - padding-left: 0.5rem; - padding-right: 0.5rem; - padding-bottom: 10px; - padding-top: 0.5rem; + -webkit-text-decoration-line: none; + text-decoration-line: none; --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); @@ -1102,41 +1095,19 @@ select { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter; transition-duration: 300ms; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + padding-left: 1rem; + padding-right: 1rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + font-weight: 600; } -.nav-item > a:hover { - border-bottom-width: 4px; - border-color: rgb(134 239 172 / var(--tw-border-opacity)); - --tw-border-opacity: 1; - border-bottom-color: rgb(22 163 74 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(187 247 208 / var(--tw-bg-opacity)); - padding-bottom: 7px; -} - -.active > a { - border-bottom-width: 4px; - border-color: rgb(134 239 172 / var(--tw-border-opacity)); - --tw-border-opacity: 1; - border-bottom-color: rgb(22 163 74 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(134 239 172 / var(--tw-bg-opacity)); - padding-bottom: 7px; -} - -.adm_nav-item > a { +.nbutton { display: inline-block; border-radius: 0.375rem; border-width: 1px; - border-color: rgb(191 219 254 / var(--tw-border-opacity)); - --tw-border-opacity: 1; - border-bottom-color: rgb(59 130 246 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(219 234 254 / var(--tw-bg-opacity)); - padding-left: 0.5rem; - padding-right: 0.5rem; - padding-bottom: 10px; - padding-top: 0.5rem; + -webkit-text-decoration-line: none; + text-decoration-line: none; --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); @@ -1145,27 +1116,122 @@ select { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter; transition-duration: 300ms; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + padding-left: 0.5rem; + padding-right: 0.5rem; + padding-bottom: 10px; + padding-top: 0.5rem; } -.adm_nav-item > a:hover { +.nbutton:hover { border-bottom-width: 4px; - border-color: rgb(147 197 253 / var(--tw-border-opacity)); - --tw-border-opacity: 1; - border-bottom-color: rgb(37 99 235 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(191 219 254 / var(--tw-bg-opacity)); padding-bottom: 7px; } -.adm_active > a { - border-bottom-width: 4px; - border-color: rgb(147 197 253 / var(--tw-border-opacity)); - --tw-border-opacity: 1; - border-bottom-color: rgb(37 99 235 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(147 197 253 / var(--tw-bg-opacity)); - padding-bottom: 7px; -} +.nbutton.active { + border-bottom-width: 4px; + } + +.nbutton.active { + padding-bottom: 7px; + } + +.nbutton.home { + --tw-border-opacity: 1; + border-color: rgb(187 247 208 / var(--tw-border-opacity)); + } + +.nbutton.home { + --tw-border-opacity: 1; + border-bottom-color: rgb(34 197 94 / var(--tw-border-opacity)); + } + +.nbutton.home { + --tw-bg-opacity: 1; + background-color: rgb(220 252 231 / var(--tw-bg-opacity)); + } + +.nbutton.home:hover { + --tw-border-opacity: 1; + border-color: rgb(134 239 172 / var(--tw-border-opacity)); + } + +.nbutton.home:hover { + --tw-border-opacity: 1; + border-bottom-color: rgb(22 163 74 / var(--tw-border-opacity)); + } + +.nbutton.home:hover { + --tw-bg-opacity: 1; + background-color: rgb(187 247 208 / var(--tw-bg-opacity)); + } + +.nbutton.home.active { + --tw-border-opacity: 1; + border-color: rgb(134 239 172 / var(--tw-border-opacity)); + } + +.nbutton.home.active { + --tw-border-opacity: 1; + border-bottom-color: rgb(22 163 74 / var(--tw-border-opacity)); + } + +.nbutton.home.active { + --tw-bg-opacity: 1; + background-color: rgb(134 239 172 / var(--tw-bg-opacity)); + } + +.nbutton.administration { + --tw-border-opacity: 1; + border-color: rgb(191 219 254 / var(--tw-border-opacity)); + } + +.nbutton.administration { + --tw-border-opacity: 1; + border-bottom-color: rgb(59 130 246 / var(--tw-border-opacity)); + } + +.nbutton.administration { + --tw-bg-opacity: 1; + background-color: rgb(219 234 254 / var(--tw-bg-opacity)); + } + +.nbutton.administration:hover { + --tw-border-opacity: 1; + border-color: rgb(147 197 253 / var(--tw-border-opacity)); + } + +.nbutton.administration:hover { + --tw-border-opacity: 1; + border-bottom-color: rgb(37 99 235 / var(--tw-border-opacity)); + } + +.nbutton.administration:hover { + --tw-bg-opacity: 1; + background-color: rgb(191 219 254 / var(--tw-bg-opacity)); + } + +.nbutton.administration.active { + border-bottom-width: 4px; + } + +.nbutton.administration.active { + --tw-border-opacity: 1; + border-color: rgb(147 197 253 / var(--tw-border-opacity)); + } + +.nbutton.administration.active { + --tw-border-opacity: 1; + border-bottom-color: rgb(37 99 235 / var(--tw-border-opacity)); + } + +.nbutton.administration.active { + --tw-bg-opacity: 1; + background-color: rgb(147 197 253 / var(--tw-bg-opacity)); + } + +.nbutton.administration.active { + padding-bottom: 7px; + } .sr-only { position: absolute; @@ -1218,14 +1284,18 @@ select { margin-bottom: 0.5rem; } -.mb-8 { - margin-bottom: 2rem; -} - .mb-0 { margin-bottom: 0px; } +.mt-6 { + margin-top: 1.5rem; +} + +.mb-8 { + margin-bottom: 2rem; +} + .mb-4 { margin-bottom: 1rem; } @@ -1242,10 +1312,6 @@ select { display: block; } -.inline-block { - display: inline-block; -} - .inline { display: inline; } @@ -1290,12 +1356,16 @@ select { max-height: 18rem; } -.min-h-\[125px\] { - min-height: 125px; +.max-h-24 { + max-height: 6rem; } -.w-screen { - width: 100vw; +.max-h-\[200px\] { + max-height: 200px; +} + +.min-h-\[125px\] { + min-height: 125px; } .w-full { @@ -1322,8 +1392,20 @@ select { max-width: 100%; } -.basis-3\/5 { - flex-basis: 60%; +.max-w-screen-sm { + max-width: 640px; +} + +.max-w-screen-md { + max-width: 768px; +} + +.max-w-\[48px\] { + max-width: 48px; +} + +.basis-1\/2 { + flex-basis: 50%; } .border-collapse { @@ -1382,10 +1464,6 @@ select { gap: 2rem; } -.self-end { - align-self: flex-end; -} - .self-center { align-self: center; } @@ -1426,31 +1504,6 @@ select { border-color: rgb(214 211 209 / var(--tw-border-opacity)); } -.border-rose-200 { - --tw-border-opacity: 1; - border-color: rgb(254 205 211 / var(--tw-border-opacity)); -} - -.border-pink-200 { - --tw-border-opacity: 1; - border-color: rgb(251 207 232 / var(--tw-border-opacity)); -} - -.border-indigo-200 { - --tw-border-opacity: 1; - border-color: rgb(199 210 254 / var(--tw-border-opacity)); -} - -.border-sky-200 { - --tw-border-opacity: 1; - border-color: rgb(186 230 253 / var(--tw-border-opacity)); -} - -.border-red-200 { - --tw-border-opacity: 1; - border-color: rgb(254 202 202 / var(--tw-border-opacity)); -} - .bg-white { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity)); @@ -1466,31 +1519,6 @@ select { background-color: rgb(250 250 249 / var(--tw-bg-opacity)); } -.bg-pink-100 { - --tw-bg-opacity: 1; - background-color: rgb(252 231 243 / var(--tw-bg-opacity)); -} - -.bg-rose-100 { - --tw-bg-opacity: 1; - background-color: rgb(255 228 230 / var(--tw-bg-opacity)); -} - -.bg-sky-100 { - --tw-bg-opacity: 1; - background-color: rgb(224 242 254 / var(--tw-bg-opacity)); -} - -.bg-indigo-100 { - --tw-bg-opacity: 1; - background-color: rgb(224 231 255 / var(--tw-bg-opacity)); -} - -.bg-red-100 { - --tw-bg-opacity: 1; - background-color: rgb(254 226 226 / var(--tw-bg-opacity)); -} - .bg-gray-50 { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity)); @@ -1524,6 +1552,11 @@ select { padding-bottom: 0.5rem; } +.px-16 { + padding-left: 4rem; + padding-right: 4rem; +} + .pb-1 { padding-bottom: 0.25rem; } @@ -1548,10 +1581,6 @@ select { font-family: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; } -.text-\[2\.25rem\] { - font-size: 2.25rem; -} - .text-xl { font-size: 1.25rem; line-height: 1.75rem; @@ -1572,11 +1601,6 @@ select { line-height: 1rem; } -.text-4xl { - font-size: 2.25rem; - line-height: 2.5rem; -} - .text-\[15px\] { font-size: 15px; } @@ -1585,15 +1609,15 @@ select { font-size: 13px; } +.text-\[2\.25rem\] { + font-size: 2.25rem; +} + .text-5xl { font-size: 3rem; line-height: 1; } -.font-extrabold { - font-weight: 800; -} - .font-medium { font-weight: 500; } @@ -1635,11 +1659,6 @@ select { color: rgb(255 255 255 / var(--tw-text-opacity)); } -.no-underline { - -webkit-text-decoration-line: none; - text-decoration-line: none; -} - .antialiased { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; @@ -1664,22 +1683,126 @@ select { filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } -.transition { - transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.duration-300 { - transition-duration: 300ms; -} - .ease-in-out { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } +.color.pink { + --tw-border-opacity: 1; + border-color: rgb(251 207 232 / var(--tw-border-opacity)); + } + +.color.pink { + --tw-bg-opacity: 1; + background-color: rgb(252 231 243 / var(--tw-bg-opacity)); + } + +.color.pink:hover { + --tw-border-opacity: 1; + border-color: rgb(249 168 212 / var(--tw-border-opacity)); + } + +.color.pink:hover { + --tw-bg-opacity: 1; + background-color: rgb(251 207 232 / var(--tw-bg-opacity)); + } + +.color.rose { + --tw-border-opacity: 1; + border-color: rgb(254 205 211 / var(--tw-border-opacity)); + } + +.color.rose { + --tw-bg-opacity: 1; + background-color: rgb(255 228 230 / var(--tw-bg-opacity)); + } + +.color.rose:hover { + --tw-border-opacity: 1; + border-color: rgb(253 164 175 / var(--tw-border-opacity)); + } + +.color.rose:hover { + --tw-bg-opacity: 1; + background-color: rgb(254 205 211 / var(--tw-bg-opacity)); + } + +.color.sky { + --tw-border-opacity: 1; + border-color: rgb(186 230 253 / var(--tw-border-opacity)); + } + +.color.sky { + --tw-bg-opacity: 1; + background-color: rgb(224 242 254 / var(--tw-bg-opacity)); + } + +.color.sky:hover { + --tw-border-opacity: 1; + border-color: rgb(125 211 252 / var(--tw-border-opacity)); + } + +.color.sky:hover { + --tw-bg-opacity: 1; + background-color: rgb(186 230 253 / var(--tw-bg-opacity)); + } + +.color.indigo { + --tw-border-opacity: 1; + border-color: rgb(199 210 254 / var(--tw-border-opacity)); + } + +.color.indigo { + --tw-bg-opacity: 1; + background-color: rgb(224 231 255 / var(--tw-bg-opacity)); + } + +.color.indigo:hover { + --tw-border-opacity: 1; + border-color: rgb(165 180 252 / var(--tw-border-opacity)); + } + +.color.indigo:hover { + --tw-bg-opacity: 1; + background-color: rgb(199 210 254 / var(--tw-bg-opacity)); + } + +.color.red { + --tw-border-opacity: 1; + border-color: rgb(254 202 202 / var(--tw-border-opacity)); + } + +.color.red { + --tw-bg-opacity: 1; + background-color: rgb(254 226 226 / var(--tw-bg-opacity)); + } + +.color.red:hover { + --tw-border-opacity: 1; + border-color: rgb(252 165 165 / var(--tw-border-opacity)); + } + +.color.red:hover { + --tw-bg-opacity: 1; + background-color: rgb(254 202 202 / var(--tw-bg-opacity)); + } + +h1 { + font-size: 2.25em; + font-weight: 500; +} + +h2 { + text-align: center; + font-size: 1.5em; + font-weight: 300; +} + +h4 { + text-align: center; + font-size: 1.25em; +} + #atu { transition: all 0.2s ease, visibility 0s; border-radius: 0px; @@ -1689,95 +1812,40 @@ select { display: block; } -.hover\:border-pink-300:hover { - --tw-border-opacity: 1; - border-color: rgb(249 168 212 / var(--tw-border-opacity)); -} - -.hover\:border-rose-300:hover { - --tw-border-opacity: 1; - border-color: rgb(253 164 175 / var(--tw-border-opacity)); -} - -.hover\:border-sky-300:hover { - --tw-border-opacity: 1; - border-color: rgb(125 211 252 / var(--tw-border-opacity)); -} - -.hover\:border-indigo-300:hover { - --tw-border-opacity: 1; - border-color: rgb(165 180 252 / var(--tw-border-opacity)); -} - -.hover\:border-red-300:hover { - --tw-border-opacity: 1; - border-color: rgb(252 165 165 / var(--tw-border-opacity)); -} - -.hover\:bg-pink-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(251 207 232 / var(--tw-bg-opacity)); -} - -.hover\:bg-rose-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(254 205 211 / var(--tw-bg-opacity)); -} - -.hover\:bg-sky-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(186 230 253 / var(--tw-bg-opacity)); -} - -.hover\:bg-indigo-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(199 210 254 / var(--tw-bg-opacity)); -} - -.hover\:bg-red-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(254 202 202 / var(--tw-bg-opacity)); -} - -.prose-h2\:text-center :is(:where(h2):not(:where([class~="not-prose"] *))) { - text-align: center; -} - -.prose-h2\:text-2xl :is(:where(h2):not(:where([class~="not-prose"] *))) { - font-size: 1.5rem; - line-height: 2rem; +.prose-h2\:mb-2 :is(:where(h2):not(:where([class~="not-prose"] *))) { + margin-bottom: 0.5rem; } .prose-h2\:font-normal :is(:where(h2):not(:where([class~="not-prose"] *))) { font-weight: 400; } -.prose-h2\:font-light :is(:where(h2):not(:where([class~="not-prose"] *))) { - font-weight: 300; -} - .prose-h3\:font-normal :is(:where(h3):not(:where([class~="not-prose"] *))) { font-weight: 400; } -.prose-h4\:text-center :is(:where(h4):not(:where([class~="not-prose"] *))) { - text-align: center; -} - -.prose-h4\:text-xl :is(:where(h4):not(:where([class~="not-prose"] *))) { - font-size: 1.25rem; - line-height: 1.75rem; -} - .prose-h4\:font-normal :is(:where(h4):not(:where([class~="not-prose"] *))) { font-weight: 400; } +.prose-p\:my-\[0\.3em\] :is(:where(p):not(:where([class~="not-prose"] *))) { + margin-top: 0.3em; + margin-bottom: 0.3em; +} + .prose-a\:text-center :is(:where(a):not(:where([class~="not-prose"] *))) { text-align: center; } +.prose-img\:m-1 :is(:where(img):not(:where([class~="not-prose"] *))) { + margin: 0.25rem; +} + @media (min-width: 1024px) { + .lg\:w-screen { + width: 100vw; + } + .lg\:flex-row { flex-direction: row; } @@ -1794,7 +1862,13 @@ select { align-items: flex-end; } - .lg\:text-right { - text-align: right; + .lg\:self-end { + align-self: flex-end; + } +} + +@media (min-width: 1280px) { + .xl\:max-w-screen-xl { + max-width: 1280px; } } diff --git a/static/django_tinymce/init_tinymce.js b/static/django_tinymce/init_tinymce.js index 9143ef3..250f689 100644 --- a/static/django_tinymce/init_tinymce.js +++ b/static/django_tinymce/init_tinymce.js @@ -36,7 +36,7 @@ if (el.dataset.mceGzConf) { tinyMCE_GZ.init(JSON.parse(el.dataset.mceGzConf)); } - if (!tinyMCE.editors[id]) { + if (!tinyMCE.get(id)) { tinyMCE.init(mce_conf); } } @@ -53,18 +53,24 @@ } } + function initializeTinyMCE(element, formsetName) { + Array.from(element.querySelectorAll('.tinymce')).forEach(area => initTinyMCE(area)); + } + ready(function() { // initialize the TinyMCE editors on load - document.querySelectorAll('.tinymce').forEach(function(el) { - initTinyMCE(el); - }); + initializeTinyMCE(document); // initialize the TinyMCE editor after adding an inline in the django admin context. if (typeof(django) !== 'undefined' && typeof(django.jQuery) !== 'undefined') { - django.jQuery(document).on('formset:added', function(event, $row, formsetName) { - $row.find('textarea.tinymce').each(function() { - initTinyMCE(this); - }); + django.jQuery(document).on('formset:added', (event, $row, formsetName) => { + if (event.detail && event.detail.formsetName) { + // Django >= 4.1 + initializeTinyMCE(event.target); + } else { + // Django < 4.1, use $row + initializeTinyMCE($row.get(0)); + } }); } }); diff --git a/static/labs.jpg b/static/labs.jpg new file mode 100644 index 0000000..a20896e Binary files /dev/null and b/static/labs.jpg differ diff --git a/static/podlzbs.jpg b/static/podlzbs.jpg new file mode 100644 index 0000000..9f5bf08 Binary files /dev/null and b/static/podlzbs.jpg differ diff --git a/theme/static/css/dist/styles.css b/theme/static/css/dist/styles.css index 40b511f..0de7b27 100644 --- a/theme/static/css/dist/styles.css +++ b/theme/static/css/dist/styles.css @@ -1081,19 +1081,12 @@ select { margin-bottom: 0; } -.nav-item > a { +.button { display: inline-block; border-radius: 0.375rem; border-width: 1px; - border-color: rgb(187 247 208 / var(--tw-border-opacity)); - --tw-border-opacity: 1; - border-bottom-color: rgb(34 197 94 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(220 252 231 / var(--tw-bg-opacity)); - padding-left: 0.5rem; - padding-right: 0.5rem; - padding-bottom: 10px; - padding-top: 0.5rem; + -webkit-text-decoration-line: none; + text-decoration-line: none; --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); @@ -1102,41 +1095,19 @@ select { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter; transition-duration: 300ms; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + padding-left: 1rem; + padding-right: 1rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + font-weight: 600; } -.nav-item > a:hover { - border-bottom-width: 4px; - border-color: rgb(134 239 172 / var(--tw-border-opacity)); - --tw-border-opacity: 1; - border-bottom-color: rgb(22 163 74 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(187 247 208 / var(--tw-bg-opacity)); - padding-bottom: 7px; -} - -.active > a { - border-bottom-width: 4px; - border-color: rgb(134 239 172 / var(--tw-border-opacity)); - --tw-border-opacity: 1; - border-bottom-color: rgb(22 163 74 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(134 239 172 / var(--tw-bg-opacity)); - padding-bottom: 7px; -} - -.adm_nav-item > a { +.nbutton { display: inline-block; border-radius: 0.375rem; border-width: 1px; - border-color: rgb(191 219 254 / var(--tw-border-opacity)); - --tw-border-opacity: 1; - border-bottom-color: rgb(59 130 246 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(219 234 254 / var(--tw-bg-opacity)); - padding-left: 0.5rem; - padding-right: 0.5rem; - padding-bottom: 10px; - padding-top: 0.5rem; + -webkit-text-decoration-line: none; + text-decoration-line: none; --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); @@ -1145,27 +1116,122 @@ select { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter; transition-duration: 300ms; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + padding-left: 0.5rem; + padding-right: 0.5rem; + padding-bottom: 10px; + padding-top: 0.5rem; } -.adm_nav-item > a:hover { +.nbutton:hover { border-bottom-width: 4px; - border-color: rgb(147 197 253 / var(--tw-border-opacity)); - --tw-border-opacity: 1; - border-bottom-color: rgb(37 99 235 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(191 219 254 / var(--tw-bg-opacity)); padding-bottom: 7px; } -.adm_active > a { - border-bottom-width: 4px; - border-color: rgb(147 197 253 / var(--tw-border-opacity)); - --tw-border-opacity: 1; - border-bottom-color: rgb(37 99 235 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(147 197 253 / var(--tw-bg-opacity)); - padding-bottom: 7px; -} +.nbutton.active { + border-bottom-width: 4px; + } + +.nbutton.active { + padding-bottom: 7px; + } + +.nbutton.home { + --tw-border-opacity: 1; + border-color: rgb(187 247 208 / var(--tw-border-opacity)); + } + +.nbutton.home { + --tw-border-opacity: 1; + border-bottom-color: rgb(34 197 94 / var(--tw-border-opacity)); + } + +.nbutton.home { + --tw-bg-opacity: 1; + background-color: rgb(220 252 231 / var(--tw-bg-opacity)); + } + +.nbutton.home:hover { + --tw-border-opacity: 1; + border-color: rgb(134 239 172 / var(--tw-border-opacity)); + } + +.nbutton.home:hover { + --tw-border-opacity: 1; + border-bottom-color: rgb(22 163 74 / var(--tw-border-opacity)); + } + +.nbutton.home:hover { + --tw-bg-opacity: 1; + background-color: rgb(187 247 208 / var(--tw-bg-opacity)); + } + +.nbutton.home.active { + --tw-border-opacity: 1; + border-color: rgb(134 239 172 / var(--tw-border-opacity)); + } + +.nbutton.home.active { + --tw-border-opacity: 1; + border-bottom-color: rgb(22 163 74 / var(--tw-border-opacity)); + } + +.nbutton.home.active { + --tw-bg-opacity: 1; + background-color: rgb(134 239 172 / var(--tw-bg-opacity)); + } + +.nbutton.administration { + --tw-border-opacity: 1; + border-color: rgb(191 219 254 / var(--tw-border-opacity)); + } + +.nbutton.administration { + --tw-border-opacity: 1; + border-bottom-color: rgb(59 130 246 / var(--tw-border-opacity)); + } + +.nbutton.administration { + --tw-bg-opacity: 1; + background-color: rgb(219 234 254 / var(--tw-bg-opacity)); + } + +.nbutton.administration:hover { + --tw-border-opacity: 1; + border-color: rgb(147 197 253 / var(--tw-border-opacity)); + } + +.nbutton.administration:hover { + --tw-border-opacity: 1; + border-bottom-color: rgb(37 99 235 / var(--tw-border-opacity)); + } + +.nbutton.administration:hover { + --tw-bg-opacity: 1; + background-color: rgb(191 219 254 / var(--tw-bg-opacity)); + } + +.nbutton.administration.active { + border-bottom-width: 4px; + } + +.nbutton.administration.active { + --tw-border-opacity: 1; + border-color: rgb(147 197 253 / var(--tw-border-opacity)); + } + +.nbutton.administration.active { + --tw-border-opacity: 1; + border-bottom-color: rgb(37 99 235 / var(--tw-border-opacity)); + } + +.nbutton.administration.active { + --tw-bg-opacity: 1; + background-color: rgb(147 197 253 / var(--tw-bg-opacity)); + } + +.nbutton.administration.active { + padding-bottom: 7px; + } .sr-only { position: absolute; @@ -1218,14 +1284,18 @@ select { margin-bottom: 0.5rem; } -.mb-8 { - margin-bottom: 2rem; -} - .mb-0 { margin-bottom: 0px; } +.mt-6 { + margin-top: 1.5rem; +} + +.mb-8 { + margin-bottom: 2rem; +} + .mb-4 { margin-bottom: 1rem; } @@ -1242,10 +1312,6 @@ select { display: block; } -.inline-block { - display: inline-block; -} - .inline { display: inline; } @@ -1290,12 +1356,16 @@ select { max-height: 18rem; } -.min-h-\[125px\] { - min-height: 125px; +.max-h-24 { + max-height: 6rem; } -.w-screen { - width: 100vw; +.max-h-\[200px\] { + max-height: 200px; +} + +.min-h-\[125px\] { + min-height: 125px; } .w-full { @@ -1322,12 +1392,16 @@ select { max-width: 100%; } +.max-w-screen-sm { + max-width: 640px; +} + .max-w-screen-md { max-width: 768px; } -.max-w-screen-sm { - max-width: 640px; +.max-w-\[48px\] { + max-width: 48px; } .basis-1\/2 { @@ -1390,10 +1464,6 @@ select { gap: 2rem; } -.self-end { - align-self: flex-end; -} - .self-center { align-self: center; } @@ -1434,31 +1504,6 @@ select { border-color: rgb(214 211 209 / var(--tw-border-opacity)); } -.border-rose-200 { - --tw-border-opacity: 1; - border-color: rgb(254 205 211 / var(--tw-border-opacity)); -} - -.border-pink-200 { - --tw-border-opacity: 1; - border-color: rgb(251 207 232 / var(--tw-border-opacity)); -} - -.border-indigo-200 { - --tw-border-opacity: 1; - border-color: rgb(199 210 254 / var(--tw-border-opacity)); -} - -.border-sky-200 { - --tw-border-opacity: 1; - border-color: rgb(186 230 253 / var(--tw-border-opacity)); -} - -.border-red-200 { - --tw-border-opacity: 1; - border-color: rgb(254 202 202 / var(--tw-border-opacity)); -} - .bg-white { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity)); @@ -1474,31 +1519,6 @@ select { background-color: rgb(250 250 249 / var(--tw-bg-opacity)); } -.bg-pink-100 { - --tw-bg-opacity: 1; - background-color: rgb(252 231 243 / var(--tw-bg-opacity)); -} - -.bg-rose-100 { - --tw-bg-opacity: 1; - background-color: rgb(255 228 230 / var(--tw-bg-opacity)); -} - -.bg-sky-100 { - --tw-bg-opacity: 1; - background-color: rgb(224 242 254 / var(--tw-bg-opacity)); -} - -.bg-indigo-100 { - --tw-bg-opacity: 1; - background-color: rgb(224 231 255 / var(--tw-bg-opacity)); -} - -.bg-red-100 { - --tw-bg-opacity: 1; - background-color: rgb(254 226 226 / var(--tw-bg-opacity)); -} - .bg-gray-50 { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity)); @@ -1532,6 +1552,11 @@ select { padding-bottom: 0.5rem; } +.px-16 { + padding-left: 4rem; + padding-right: 4rem; +} + .pb-1 { padding-bottom: 0.25rem; } @@ -1556,10 +1581,6 @@ select { font-family: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; } -.text-\[2\.25rem\] { - font-size: 2.25rem; -} - .text-xl { font-size: 1.25rem; line-height: 1.75rem; @@ -1580,11 +1601,6 @@ select { line-height: 1rem; } -.text-4xl { - font-size: 2.25rem; - line-height: 2.5rem; -} - .text-\[15px\] { font-size: 15px; } @@ -1593,15 +1609,15 @@ select { font-size: 13px; } +.text-\[2\.25rem\] { + font-size: 2.25rem; +} + .text-5xl { font-size: 3rem; line-height: 1; } -.font-extrabold { - font-weight: 800; -} - .font-medium { font-weight: 500; } @@ -1643,11 +1659,6 @@ select { color: rgb(255 255 255 / var(--tw-text-opacity)); } -.no-underline { - -webkit-text-decoration-line: none; - text-decoration-line: none; -} - .antialiased { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; @@ -1672,22 +1683,126 @@ select { filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } -.transition { - transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.duration-300 { - transition-duration: 300ms; -} - .ease-in-out { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } +.color.pink { + --tw-border-opacity: 1; + border-color: rgb(251 207 232 / var(--tw-border-opacity)); + } + +.color.pink { + --tw-bg-opacity: 1; + background-color: rgb(252 231 243 / var(--tw-bg-opacity)); + } + +.color.pink:hover { + --tw-border-opacity: 1; + border-color: rgb(249 168 212 / var(--tw-border-opacity)); + } + +.color.pink:hover { + --tw-bg-opacity: 1; + background-color: rgb(251 207 232 / var(--tw-bg-opacity)); + } + +.color.rose { + --tw-border-opacity: 1; + border-color: rgb(254 205 211 / var(--tw-border-opacity)); + } + +.color.rose { + --tw-bg-opacity: 1; + background-color: rgb(255 228 230 / var(--tw-bg-opacity)); + } + +.color.rose:hover { + --tw-border-opacity: 1; + border-color: rgb(253 164 175 / var(--tw-border-opacity)); + } + +.color.rose:hover { + --tw-bg-opacity: 1; + background-color: rgb(254 205 211 / var(--tw-bg-opacity)); + } + +.color.sky { + --tw-border-opacity: 1; + border-color: rgb(186 230 253 / var(--tw-border-opacity)); + } + +.color.sky { + --tw-bg-opacity: 1; + background-color: rgb(224 242 254 / var(--tw-bg-opacity)); + } + +.color.sky:hover { + --tw-border-opacity: 1; + border-color: rgb(125 211 252 / var(--tw-border-opacity)); + } + +.color.sky:hover { + --tw-bg-opacity: 1; + background-color: rgb(186 230 253 / var(--tw-bg-opacity)); + } + +.color.indigo { + --tw-border-opacity: 1; + border-color: rgb(199 210 254 / var(--tw-border-opacity)); + } + +.color.indigo { + --tw-bg-opacity: 1; + background-color: rgb(224 231 255 / var(--tw-bg-opacity)); + } + +.color.indigo:hover { + --tw-border-opacity: 1; + border-color: rgb(165 180 252 / var(--tw-border-opacity)); + } + +.color.indigo:hover { + --tw-bg-opacity: 1; + background-color: rgb(199 210 254 / var(--tw-bg-opacity)); + } + +.color.red { + --tw-border-opacity: 1; + border-color: rgb(254 202 202 / var(--tw-border-opacity)); + } + +.color.red { + --tw-bg-opacity: 1; + background-color: rgb(254 226 226 / var(--tw-bg-opacity)); + } + +.color.red:hover { + --tw-border-opacity: 1; + border-color: rgb(252 165 165 / var(--tw-border-opacity)); + } + +.color.red:hover { + --tw-bg-opacity: 1; + background-color: rgb(254 202 202 / var(--tw-bg-opacity)); + } + +h1 { + font-size: 2.25em; + font-weight: 500; +} + +h2 { + text-align: center; + font-size: 1.5em; + font-weight: 300; +} + +h4 { + text-align: center; + font-size: 1.25em; +} + #atu { transition: all 0.2s ease, visibility 0s; border-radius: 0px; @@ -1697,95 +1812,40 @@ select { display: block; } -.hover\:border-pink-300:hover { - --tw-border-opacity: 1; - border-color: rgb(249 168 212 / var(--tw-border-opacity)); -} - -.hover\:border-rose-300:hover { - --tw-border-opacity: 1; - border-color: rgb(253 164 175 / var(--tw-border-opacity)); -} - -.hover\:border-sky-300:hover { - --tw-border-opacity: 1; - border-color: rgb(125 211 252 / var(--tw-border-opacity)); -} - -.hover\:border-indigo-300:hover { - --tw-border-opacity: 1; - border-color: rgb(165 180 252 / var(--tw-border-opacity)); -} - -.hover\:border-red-300:hover { - --tw-border-opacity: 1; - border-color: rgb(252 165 165 / var(--tw-border-opacity)); -} - -.hover\:bg-pink-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(251 207 232 / var(--tw-bg-opacity)); -} - -.hover\:bg-rose-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(254 205 211 / var(--tw-bg-opacity)); -} - -.hover\:bg-sky-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(186 230 253 / var(--tw-bg-opacity)); -} - -.hover\:bg-indigo-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(199 210 254 / var(--tw-bg-opacity)); -} - -.hover\:bg-red-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(254 202 202 / var(--tw-bg-opacity)); -} - -.prose-h2\:text-center :is(:where(h2):not(:where([class~="not-prose"] *))) { - text-align: center; -} - -.prose-h2\:text-2xl :is(:where(h2):not(:where([class~="not-prose"] *))) { - font-size: 1.5rem; - line-height: 2rem; +.prose-h2\:mb-2 :is(:where(h2):not(:where([class~="not-prose"] *))) { + margin-bottom: 0.5rem; } .prose-h2\:font-normal :is(:where(h2):not(:where([class~="not-prose"] *))) { font-weight: 400; } -.prose-h2\:font-light :is(:where(h2):not(:where([class~="not-prose"] *))) { - font-weight: 300; -} - .prose-h3\:font-normal :is(:where(h3):not(:where([class~="not-prose"] *))) { font-weight: 400; } -.prose-h4\:text-center :is(:where(h4):not(:where([class~="not-prose"] *))) { - text-align: center; -} - -.prose-h4\:text-xl :is(:where(h4):not(:where([class~="not-prose"] *))) { - font-size: 1.25rem; - line-height: 1.75rem; -} - .prose-h4\:font-normal :is(:where(h4):not(:where([class~="not-prose"] *))) { font-weight: 400; } +.prose-p\:my-\[0\.3em\] :is(:where(p):not(:where([class~="not-prose"] *))) { + margin-top: 0.3em; + margin-bottom: 0.3em; +} + .prose-a\:text-center :is(:where(a):not(:where([class~="not-prose"] *))) { text-align: center; } +.prose-img\:m-1 :is(:where(img):not(:where([class~="not-prose"] *))) { + margin: 0.25rem; +} + @media (min-width: 1024px) { + .lg\:w-screen { + width: 100vw; + } + .lg\:flex-row { flex-direction: row; } @@ -1802,7 +1862,13 @@ select { align-items: flex-end; } - .lg\:text-right { - text-align: right; + .lg\:self-end { + align-self: flex-end; + } +} + +@media (min-width: 1280px) { + .xl\:max-w-screen-xl { + max-width: 1280px; } } diff --git a/theme/static_src/src/styles.css b/theme/static_src/src/styles.css index 5eeda30..98225fc 100644 --- a/theme/static_src/src/styles.css +++ b/theme/static_src/src/styles.css @@ -2,25 +2,75 @@ @tailwind components; @tailwind utilities; +h1 { + @apply text-[2.25em] font-medium; +} + +h2 { + @apply text-[1.5em] text-center font-light; +} + +h4 { + @apply text-[1.25em] text-center; +} + @layer components { - .nav-item > a { - @apply rounded-md transition ease-in-out duration-300 inline-block px-2 pb-[10px] hover:pb-[7px] pt-2 - bg-green-100 hover:bg-green-200 shadow-md - border border-green-200 hover:border-green-300 border-b-green-500 hover:border-b-green-600 hover:border-b-4; + .btn { + @apply transition ease-in-out duration-300 + inline-block rounded-md shadow-md + border no-underline; } - .active > a { - @apply bg-green-300 border-green-300 border-b-4 border-b-green-600 pb-[7px]; + .button { + @apply btn font-semibold px-4 py-3; } - .adm_nav-item > a { - @apply rounded-md transition ease-in-out duration-300 inline-block px-2 pb-[10px] hover:pb-[7px] pt-2 - bg-blue-100 hover:bg-blue-200 shadow-md - border border-blue-200 hover:border-blue-300 border-b-blue-500 hover:border-b-blue-600 hover:border-b-4; - } + .nbutton { + @apply btn px-2 pb-[10px] hover:pb-[7px] pt-2 hover:border-b-4; - .adm_active > a { - @apply bg-blue-300 border-blue-300 border-b-4 border-b-blue-600 pb-[7px]; + &.active { + @apply border-b-4 pb-[7px]; + } + + &.home { + @apply bg-green-100 hover:bg-green-200 border-green-200 hover:border-green-300 border-b-green-500 hover:border-b-green-600; + + &.active { + @apply bg-green-300 border-green-300 border-b-green-600; + } + } + + &.administration { + @apply bg-blue-100 hover:bg-blue-200 border-blue-200 hover:border-blue-300 border-b-blue-500 hover:border-b-blue-600; + + &.active { + @apply bg-blue-300 border-blue-300 border-b-4 border-b-blue-600 pb-[7px]; + } + } + } +} + +@layer utilities { + .color { + &.pink { + @apply border-pink-200 bg-pink-100 hover:border-pink-300 hover:bg-pink-200; + } + + &.rose { + @apply border-rose-200 bg-rose-100 hover:border-rose-300 hover:bg-rose-200; + } + + &.sky { + @apply border-sky-200 bg-sky-100 hover:border-sky-300 hover:bg-sky-200; + } + + &.indigo { + @apply border-indigo-200 bg-indigo-100 hover:border-indigo-300 hover:bg-indigo-200; + } + + &.red { + @apply border-red-200 bg-red-100 hover:border-red-300 hover:bg-red-200; + } } }