From 2946f008f469c6435d803886eb2ce07753a0c1dd Mon Sep 17 00:00:00 2001 From: Jan Skyva Date: Tue, 9 Apr 2024 10:49:53 +0200 Subject: [PATCH] initial commit --- .dockerignore | 5 + .env | 2 + .gitignore | 4 + .python-version | 1 + Dockerfile | 24 + accounts/__init__.py | 0 accounts/admin.py | 3 + accounts/apps.py | 6 + accounts/migrations/__init__.py | 0 accounts/models.py | 3 + accounts/tests.py | 3 + accounts/urls.py | 6 + accounts/views.py | 9 + blog/__init__.py | 0 blog/admin.py | 4 + blog/apps.py | 6 + blog/migrations/0001_initial.py | 29 + blog/migrations/0002_alter_post_author.py | 22 + blog/migrations/__init__.py | 0 blog/models.py | 17 + blog/tests.py | 77 + blog/urls.py | 16 + blog/views.py | 33 + django_project/__init__.py | 0 django_project/asgi.py | 16 + django_project/settings.py | 121 + django_project/urls.py | 10 + django_project/wsgi.py | 16 + fly.toml | 51 + manage.py | 22 + requirements.txt | 8 + static/css/base.css | 47 + .../admin/css/autocomplete.4a81fc4242d0.css | 275 + .../css/autocomplete.4a81fc4242d0.css.gz | Bin 0 -> 1147 bytes staticfiles/admin/css/autocomplete.css | 275 + staticfiles/admin/css/autocomplete.css.gz | Bin 0 -> 1147 bytes staticfiles/admin/css/base.64976e0f7339.css | 1138 ++ .../admin/css/base.64976e0f7339.css.gz | Bin 0 -> 4847 bytes staticfiles/admin/css/base.css | 1138 ++ staticfiles/admin/css/base.css.gz | Bin 0 -> 4737 bytes staticfiles/admin/css/changelists.css | 328 + staticfiles/admin/css/changelists.css.gz | Bin 0 -> 1563 bytes .../admin/css/changelists.f4631a29abad.css | 328 + .../admin/css/changelists.f4631a29abad.css.gz | Bin 0 -> 1563 bytes staticfiles/admin/css/dark_mode.css | 137 + staticfiles/admin/css/dark_mode.css.gz | Bin 0 -> 849 bytes .../admin/css/dark_mode.ef27a31af300.css | 137 + .../admin/css/dark_mode.ef27a31af300.css.gz | Bin 0 -> 849 bytes staticfiles/admin/css/dashboard.css | 29 + staticfiles/admin/css/dashboard.css.gz | Bin 0 -> 267 bytes .../admin/css/dashboard.e90f2068217b.css | 29 + .../admin/css/dashboard.e90f2068217b.css.gz | Bin 0 -> 267 bytes staticfiles/admin/css/forms.1dd11ef16031.css | 528 + .../admin/css/forms.1dd11ef16031.css.gz | Bin 0 -> 2225 bytes staticfiles/admin/css/forms.css | 528 + staticfiles/admin/css/forms.css.gz | Bin 0 -> 2191 bytes staticfiles/admin/css/login.586129c60a93.css | 61 + .../admin/css/login.586129c60a93.css.gz | Bin 0 -> 417 bytes staticfiles/admin/css/login.css | 61 + staticfiles/admin/css/login.css.gz | Bin 0 -> 417 bytes .../admin/css/nav_sidebar.269a1bd44627.css | 144 + .../admin/css/nav_sidebar.269a1bd44627.css.gz | Bin 0 -> 779 bytes staticfiles/admin/css/nav_sidebar.css | 144 + staticfiles/admin/css/nav_sidebar.css.gz | Bin 0 -> 779 bytes .../admin/css/responsive.76d4b69c4c82.css | 999 ++ .../admin/css/responsive.76d4b69c4c82.css.gz | Bin 0 -> 3434 bytes staticfiles/admin/css/responsive.css | 999 ++ staticfiles/admin/css/responsive.css.gz | Bin 0 -> 3434 bytes .../admin/css/responsive_rtl.97b066429fd8.css | 81 + .../css/responsive_rtl.97b066429fd8.css.gz | Bin 0 -> 527 bytes staticfiles/admin/css/responsive_rtl.css | 81 + staticfiles/admin/css/responsive_rtl.css.gz | Bin 0 -> 527 bytes staticfiles/admin/css/rtl.ac25b2aecb6e.css | 286 + staticfiles/admin/css/rtl.ac25b2aecb6e.css.gz | Bin 0 -> 1249 bytes staticfiles/admin/css/rtl.css | 286 + staticfiles/admin/css/rtl.css.gz | Bin 0 -> 1222 bytes .../select2/LICENSE-SELECT2.f94142512c91.md | 21 + .../LICENSE-SELECT2.f94142512c91.md.gz | Bin 0 -> 685 bytes .../css/vendor/select2/LICENSE-SELECT2.md | 21 + .../css/vendor/select2/LICENSE-SELECT2.md.gz | Bin 0 -> 685 bytes .../vendor/select2/select2.a2194c262648.css | 481 + .../select2/select2.a2194c262648.css.gz | Bin 0 -> 2232 bytes .../admin/css/vendor/select2/select2.css | 481 + .../admin/css/vendor/select2/select2.css.gz | Bin 0 -> 2232 bytes .../select2/select2.min.9f54e6414f87.css | 1 + .../select2/select2.min.9f54e6414f87.css.gz | Bin 0 -> 1978 bytes .../admin/css/vendor/select2/select2.min.css | 1 + .../css/vendor/select2/select2.min.css.gz | Bin 0 -> 1978 bytes .../admin/css/widgets.801bda05bd0d.css | 607 + .../admin/css/widgets.801bda05bd0d.css.gz | Bin 0 -> 2571 bytes staticfiles/admin/css/widgets.css | 607 + staticfiles/admin/css/widgets.css.gz | Bin 0 -> 2478 bytes staticfiles/admin/img/LICENSE | 20 + staticfiles/admin/img/LICENSE.2c54f4e1ca1c | 20 + staticfiles/admin/img/LICENSE.2c54f4e1ca1c.gz | Bin 0 -> 656 bytes staticfiles/admin/img/LICENSE.gz | Bin 0 -> 656 bytes staticfiles/admin/img/README.a70711a38d87.txt | 7 + .../admin/img/README.a70711a38d87.txt.gz | Bin 0 -> 214 bytes staticfiles/admin/img/README.txt | 7 + staticfiles/admin/img/README.txt.gz | Bin 0 -> 214 bytes .../admin/img/calendar-icons.39b290681a8b.svg | 14 + .../img/calendar-icons.39b290681a8b.svg.gz | Bin 0 -> 385 bytes staticfiles/admin/img/calendar-icons.svg | 14 + staticfiles/admin/img/calendar-icons.svg.gz | Bin 0 -> 385 bytes .../img/gis/move_vertex_off.7a23bf31ef8a.svg | 1 + .../gis/move_vertex_off.7a23bf31ef8a.svg.gz | Bin 0 -> 470 bytes staticfiles/admin/img/gis/move_vertex_off.svg | 1 + .../admin/img/gis/move_vertex_off.svg.gz | Bin 0 -> 470 bytes .../img/gis/move_vertex_on.0047eba25b67.svg | 1 + .../gis/move_vertex_on.0047eba25b67.svg.gz | Bin 0 -> 472 bytes staticfiles/admin/img/gis/move_vertex_on.svg | 1 + .../admin/img/gis/move_vertex_on.svg.gz | Bin 0 -> 472 bytes .../admin/img/icon-addlink.d519b3bab011.svg | 3 + .../img/icon-addlink.d519b3bab011.svg.gz | Bin 0 -> 206 bytes staticfiles/admin/img/icon-addlink.svg | 3 + staticfiles/admin/img/icon-addlink.svg.gz | Bin 0 -> 206 bytes .../admin/img/icon-alert.034cc7d8a67f.svg | 3 + .../admin/img/icon-alert.034cc7d8a67f.svg.gz | Bin 0 -> 329 bytes staticfiles/admin/img/icon-alert.svg | 3 + staticfiles/admin/img/icon-alert.svg.gz | Bin 0 -> 329 bytes .../admin/img/icon-calendar.ac7aea671bea.svg | 9 + .../img/icon-calendar.ac7aea671bea.svg.gz | Bin 0 -> 438 bytes staticfiles/admin/img/icon-calendar.svg | 9 + staticfiles/admin/img/icon-calendar.svg.gz | Bin 0 -> 438 bytes .../img/icon-changelink.18d2fd706348.svg | 3 + .../img/icon-changelink.18d2fd706348.svg.gz | Bin 0 -> 269 bytes staticfiles/admin/img/icon-changelink.svg | 3 + staticfiles/admin/img/icon-changelink.svg.gz | Bin 0 -> 269 bytes .../admin/img/icon-clock.e1d4dfac3f2b.svg | 9 + .../admin/img/icon-clock.e1d4dfac3f2b.svg.gz | Bin 0 -> 357 bytes staticfiles/admin/img/icon-clock.svg | 9 + staticfiles/admin/img/icon-clock.svg.gz | Bin 0 -> 357 bytes .../img/icon-deletelink.564ef9dc3854.svg | 3 + .../img/icon-deletelink.564ef9dc3854.svg.gz | Bin 0 -> 221 bytes staticfiles/admin/img/icon-deletelink.svg | 3 + staticfiles/admin/img/icon-deletelink.svg.gz | Bin 0 -> 221 bytes .../admin/img/icon-no.439e821418cd.svg | 3 + .../admin/img/icon-no.439e821418cd.svg.gz | Bin 0 -> 297 bytes staticfiles/admin/img/icon-no.svg | 3 + staticfiles/admin/img/icon-no.svg.gz | Bin 0 -> 297 bytes .../img/icon-unknown-alt.81536e128bb6.svg | 3 + .../img/icon-unknown-alt.81536e128bb6.svg.gz | Bin 0 -> 377 bytes staticfiles/admin/img/icon-unknown-alt.svg | 3 + staticfiles/admin/img/icon-unknown-alt.svg.gz | Bin 0 -> 377 bytes .../admin/img/icon-unknown.a18cb4398978.svg | 3 + .../img/icon-unknown.a18cb4398978.svg.gz | Bin 0 -> 377 bytes staticfiles/admin/img/icon-unknown.svg | 3 + staticfiles/admin/img/icon-unknown.svg.gz | Bin 0 -> 377 bytes .../admin/img/icon-viewlink.41eb31f7826e.svg | 3 + .../img/icon-viewlink.41eb31f7826e.svg.gz | Bin 0 -> 346 bytes staticfiles/admin/img/icon-viewlink.svg | 3 + staticfiles/admin/img/icon-viewlink.svg.gz | Bin 0 -> 346 bytes .../admin/img/icon-yes.d2f9f035226a.svg | 3 + .../admin/img/icon-yes.d2f9f035226a.svg.gz | Bin 0 -> 266 bytes staticfiles/admin/img/icon-yes.svg | 3 + staticfiles/admin/img/icon-yes.svg.gz | Bin 0 -> 266 bytes .../admin/img/inline-delete.fec1b761f254.svg | 3 + .../img/inline-delete.fec1b761f254.svg.gz | Bin 0 -> 293 bytes staticfiles/admin/img/inline-delete.svg | 3 + staticfiles/admin/img/inline-delete.svg.gz | Bin 0 -> 293 bytes staticfiles/admin/img/search.7cf54ff789c6.svg | 3 + .../admin/img/search.7cf54ff789c6.svg.gz | Bin 0 -> 264 bytes staticfiles/admin/img/search.svg | 3 + staticfiles/admin/img/search.svg.gz | Bin 0 -> 264 bytes .../admin/img/selector-icons.b4555096cea2.svg | 34 + .../img/selector-icons.b4555096cea2.svg.gz | Bin 0 -> 770 bytes staticfiles/admin/img/selector-icons.svg | 34 + staticfiles/admin/img/selector-icons.svg.gz | Bin 0 -> 770 bytes .../admin/img/sorting-icons.3a097b59f104.svg | 19 + .../img/sorting-icons.3a097b59f104.svg.gz | Bin 0 -> 366 bytes staticfiles/admin/img/sorting-icons.svg | 19 + staticfiles/admin/img/sorting-icons.svg.gz | Bin 0 -> 366 bytes .../admin/img/tooltag-add.e59d620a9742.svg | 3 + .../admin/img/tooltag-add.e59d620a9742.svg.gz | Bin 0 -> 203 bytes staticfiles/admin/img/tooltag-add.svg | 3 + staticfiles/admin/img/tooltag-add.svg.gz | Bin 0 -> 203 bytes .../img/tooltag-arrowright.bbfb788a849e.svg | 3 + .../tooltag-arrowright.bbfb788a849e.svg.gz | Bin 0 -> 194 bytes staticfiles/admin/img/tooltag-arrowright.svg | 3 + .../admin/img/tooltag-arrowright.svg.gz | Bin 0 -> 194 bytes .../admin/js/SelectBox.7d3ce5a98007.js | 116 + .../admin/js/SelectBox.7d3ce5a98007.js.gz | Bin 0 -> 1025 bytes staticfiles/admin/js/SelectBox.js | 116 + staticfiles/admin/js/SelectBox.js.gz | Bin 0 -> 1025 bytes .../admin/js/SelectFilter2.bdb8d0cc579e.js | 283 + .../admin/js/SelectFilter2.bdb8d0cc579e.js.gz | Bin 0 -> 2914 bytes staticfiles/admin/js/SelectFilter2.js | 283 + staticfiles/admin/js/SelectFilter2.js.gz | Bin 0 -> 2914 bytes staticfiles/admin/js/actions.eac7e3441574.js | 201 + .../admin/js/actions.eac7e3441574.js.gz | Bin 0 -> 1874 bytes staticfiles/admin/js/actions.js | 201 + staticfiles/admin/js/actions.js.gz | Bin 0 -> 1874 bytes .../admin/DateTimeShortcuts.9f6e209cebca.js | 408 + .../DateTimeShortcuts.9f6e209cebca.js.gz | Bin 0 -> 3645 bytes .../admin/js/admin/DateTimeShortcuts.js | 408 + .../admin/js/admin/DateTimeShortcuts.js.gz | Bin 0 -> 3645 bytes .../RelatedObjectLookups.8609f99b9ab2.js | 238 + .../RelatedObjectLookups.8609f99b9ab2.js.gz | Bin 0 -> 2301 bytes .../admin/js/admin/RelatedObjectLookups.js | 238 + .../admin/js/admin/RelatedObjectLookups.js.gz | Bin 0 -> 2301 bytes .../admin/js/autocomplete.01591ab27be7.js | 33 + .../admin/js/autocomplete.01591ab27be7.js.gz | Bin 0 -> 425 bytes staticfiles/admin/js/autocomplete.js | 33 + staticfiles/admin/js/autocomplete.js.gz | Bin 0 -> 425 bytes staticfiles/admin/js/calendar.f8a5d055eb33.js | 221 + .../admin/js/calendar.f8a5d055eb33.js.gz | Bin 0 -> 2193 bytes staticfiles/admin/js/calendar.js | 221 + staticfiles/admin/js/calendar.js.gz | Bin 0 -> 2193 bytes staticfiles/admin/js/cancel.ecc4c5ca7b32.js | 29 + .../admin/js/cancel.ecc4c5ca7b32.js.gz | Bin 0 -> 430 bytes staticfiles/admin/js/cancel.js | 29 + staticfiles/admin/js/cancel.js.gz | Bin 0 -> 430 bytes .../admin/js/change_form.9d8ca4f96b75.js | 16 + .../admin/js/change_form.9d8ca4f96b75.js.gz | Bin 0 -> 322 bytes staticfiles/admin/js/change_form.js | 16 + staticfiles/admin/js/change_form.js.gz | Bin 0 -> 322 bytes staticfiles/admin/js/collapse.f84e7410290f.js | 43 + .../admin/js/collapse.f84e7410290f.js.gz | Bin 0 -> 614 bytes staticfiles/admin/js/collapse.js | 43 + staticfiles/admin/js/collapse.js.gz | Bin 0 -> 614 bytes staticfiles/admin/js/core.cf103cd04ebf.js | 170 + staticfiles/admin/js/core.cf103cd04ebf.js.gz | Bin 0 -> 1505 bytes staticfiles/admin/js/core.js | 170 + staticfiles/admin/js/core.js.gz | Bin 0 -> 1505 bytes staticfiles/admin/js/filters.0e360b7a9f80.js | 30 + .../admin/js/filters.0e360b7a9f80.js.gz | Bin 0 -> 502 bytes staticfiles/admin/js/filters.js | 30 + staticfiles/admin/js/filters.js.gz | Bin 0 -> 502 bytes staticfiles/admin/js/inlines.22d4d93c00b4.js | 359 + .../admin/js/inlines.22d4d93c00b4.js.gz | Bin 0 -> 3744 bytes staticfiles/admin/js/inlines.js | 359 + staticfiles/admin/js/inlines.js.gz | Bin 0 -> 3744 bytes .../admin/js/jquery.init.b7781a0897fc.js | 8 + .../admin/js/jquery.init.b7781a0897fc.js.gz | Bin 0 -> 236 bytes staticfiles/admin/js/jquery.init.js | 8 + staticfiles/admin/js/jquery.init.js.gz | Bin 0 -> 236 bytes .../admin/js/nav_sidebar.3b9190d420b1.js | 79 + .../admin/js/nav_sidebar.3b9190d420b1.js.gz | Bin 0 -> 845 bytes staticfiles/admin/js/nav_sidebar.js | 79 + staticfiles/admin/js/nav_sidebar.js.gz | Bin 0 -> 845 bytes .../admin/js/popup_response.c6cc78ea5551.js | 16 + .../js/popup_response.c6cc78ea5551.js.gz | Bin 0 -> 270 bytes staticfiles/admin/js/popup_response.js | 16 + staticfiles/admin/js/popup_response.js.gz | Bin 0 -> 270 bytes .../admin/js/prepopulate.bd2361dfd64d.js | 43 + .../admin/js/prepopulate.bd2361dfd64d.js.gz | Bin 0 -> 536 bytes staticfiles/admin/js/prepopulate.js | 43 + staticfiles/admin/js/prepopulate.js.gz | Bin 0 -> 536 bytes .../admin/js/prepopulate_init.6cac7f3105b8.js | 15 + .../js/prepopulate_init.6cac7f3105b8.js.gz | Bin 0 -> 277 bytes staticfiles/admin/js/prepopulate_init.js | 15 + staticfiles/admin/js/prepopulate_init.js.gz | Bin 0 -> 277 bytes staticfiles/admin/js/theme.ab270f56bb9c.js | 56 + staticfiles/admin/js/theme.ab270f56bb9c.js.gz | Bin 0 -> 605 bytes staticfiles/admin/js/theme.js | 56 + staticfiles/admin/js/theme.js.gz | Bin 0 -> 605 bytes staticfiles/admin/js/urlify.ae970a820212.js | 169 + .../admin/js/urlify.ae970a820212.js.gz | Bin 0 -> 2578 bytes staticfiles/admin/js/urlify.js | 169 + staticfiles/admin/js/urlify.js.gz | Bin 0 -> 2578 bytes .../js/vendor/jquery/LICENSE.de877aa6d744.txt | 20 + .../vendor/jquery/LICENSE.de877aa6d744.txt.gz | Bin 0 -> 656 bytes .../admin/js/vendor/jquery/LICENSE.txt | 20 + .../admin/js/vendor/jquery/LICENSE.txt.gz | Bin 0 -> 656 bytes .../js/vendor/jquery/jquery.0208b96062ba.js | 10965 ++++++++++++++++ .../vendor/jquery/jquery.0208b96062ba.js.gz | Bin 0 -> 86002 bytes staticfiles/admin/js/vendor/jquery/jquery.js | 10965 ++++++++++++++++ .../admin/js/vendor/jquery/jquery.js.gz | Bin 0 -> 86002 bytes .../vendor/jquery/jquery.min.641dd1437010.js | 2 + .../jquery/jquery.min.641dd1437010.js.gz | Bin 0 -> 31011 bytes .../admin/js/vendor/jquery/jquery.min.js | 2 + .../admin/js/vendor/jquery/jquery.min.js.gz | Bin 0 -> 31011 bytes .../js/vendor/select2/LICENSE.f94142512c91.md | 21 + .../vendor/select2/LICENSE.f94142512c91.md.gz | Bin 0 -> 685 bytes .../admin/js/vendor/select2/LICENSE.md | 21 + .../admin/js/vendor/select2/LICENSE.md.gz | Bin 0 -> 685 bytes .../js/vendor/select2/i18n/af.4f6fcd73488c.js | 3 + .../vendor/select2/i18n/af.4f6fcd73488c.js.gz | Bin 0 -> 460 bytes .../admin/js/vendor/select2/i18n/af.js | 3 + .../admin/js/vendor/select2/i18n/af.js.gz | Bin 0 -> 460 bytes .../js/vendor/select2/i18n/ar.65aa8e36bf5d.js | 3 + .../vendor/select2/i18n/ar.65aa8e36bf5d.js.gz | Bin 0 -> 498 bytes .../admin/js/vendor/select2/i18n/ar.js | 3 + .../admin/js/vendor/select2/i18n/ar.js.gz | Bin 0 -> 498 bytes .../js/vendor/select2/i18n/az.270c257daf81.js | 3 + .../vendor/select2/i18n/az.270c257daf81.js.gz | Bin 0 -> 413 bytes .../admin/js/vendor/select2/i18n/az.js | 3 + .../admin/js/vendor/select2/i18n/az.js.gz | Bin 0 -> 413 bytes .../js/vendor/select2/i18n/bg.39b8be30d4f0.js | 3 + .../vendor/select2/i18n/bg.39b8be30d4f0.js.gz | Bin 0 -> 541 bytes .../admin/js/vendor/select2/i18n/bg.js | 3 + .../admin/js/vendor/select2/i18n/bg.js.gz | Bin 0 -> 541 bytes .../js/vendor/select2/i18n/bn.6d42b4dd5665.js | 3 + .../vendor/select2/i18n/bn.6d42b4dd5665.js.gz | Bin 0 -> 553 bytes .../admin/js/vendor/select2/i18n/bn.js | 3 + .../admin/js/vendor/select2/i18n/bn.js.gz | Bin 0 -> 553 bytes .../js/vendor/select2/i18n/bs.91624382358e.js | 3 + .../vendor/select2/i18n/bs.91624382358e.js.gz | Bin 0 -> 523 bytes .../admin/js/vendor/select2/i18n/bs.js | 3 + .../admin/js/vendor/select2/i18n/bs.js.gz | Bin 0 -> 523 bytes .../js/vendor/select2/i18n/ca.a166b745933a.js | 3 + .../vendor/select2/i18n/ca.a166b745933a.js.gz | Bin 0 -> 470 bytes .../admin/js/vendor/select2/i18n/ca.js | 3 + .../admin/js/vendor/select2/i18n/ca.js.gz | Bin 0 -> 470 bytes .../js/vendor/select2/i18n/cs.4f43e8e7d33a.js | 3 + .../vendor/select2/i18n/cs.4f43e8e7d33a.js.gz | Bin 0 -> 623 bytes .../admin/js/vendor/select2/i18n/cs.js | 3 + .../admin/js/vendor/select2/i18n/cs.js.gz | Bin 0 -> 623 bytes .../js/vendor/select2/i18n/da.766346afe4dd.js | 3 + .../vendor/select2/i18n/da.766346afe4dd.js.gz | Bin 0 -> 441 bytes .../admin/js/vendor/select2/i18n/da.js | 3 + .../admin/js/vendor/select2/i18n/da.js.gz | Bin 0 -> 441 bytes .../js/vendor/select2/i18n/de.8a1c222b0204.js | 3 + .../vendor/select2/i18n/de.8a1c222b0204.js.gz | Bin 0 -> 467 bytes .../admin/js/vendor/select2/i18n/de.js | 3 + .../admin/js/vendor/select2/i18n/de.js.gz | Bin 0 -> 467 bytes .../vendor/select2/i18n/dsb.56372c92d2f1.js | 3 + .../select2/i18n/dsb.56372c92d2f1.js.gz | Bin 0 -> 551 bytes .../admin/js/vendor/select2/i18n/dsb.js | 3 + .../admin/js/vendor/select2/i18n/dsb.js.gz | Bin 0 -> 551 bytes .../js/vendor/select2/i18n/el.27097f071856.js | 3 + .../vendor/select2/i18n/el.27097f071856.js.gz | Bin 0 -> 644 bytes .../admin/js/vendor/select2/i18n/el.js | 3 + .../admin/js/vendor/select2/i18n/el.js.gz | Bin 0 -> 644 bytes .../js/vendor/select2/i18n/en.cf932ba09a98.js | 3 + .../vendor/select2/i18n/en.cf932ba09a98.js.gz | Bin 0 -> 447 bytes .../admin/js/vendor/select2/i18n/en.js | 3 + .../admin/js/vendor/select2/i18n/en.js.gz | Bin 0 -> 447 bytes .../js/vendor/select2/i18n/es.66dbc2652fb1.js | 3 + .../vendor/select2/i18n/es.66dbc2652fb1.js.gz | Bin 0 -> 474 bytes .../admin/js/vendor/select2/i18n/es.js | 3 + .../admin/js/vendor/select2/i18n/es.js.gz | Bin 0 -> 474 bytes .../js/vendor/select2/i18n/et.2b96fd98289d.js | 3 + .../vendor/select2/i18n/et.2b96fd98289d.js.gz | Bin 0 -> 432 bytes .../admin/js/vendor/select2/i18n/et.js | 3 + .../admin/js/vendor/select2/i18n/et.js.gz | Bin 0 -> 432 bytes .../js/vendor/select2/i18n/eu.adfe5c97b72c.js | 3 + .../vendor/select2/i18n/eu.adfe5c97b72c.js.gz | Bin 0 -> 450 bytes .../admin/js/vendor/select2/i18n/eu.js | 3 + .../admin/js/vendor/select2/i18n/eu.js.gz | Bin 0 -> 450 bytes .../js/vendor/select2/i18n/fa.3b5bd1961cfd.js | 3 + .../vendor/select2/i18n/fa.3b5bd1961cfd.js.gz | Bin 0 -> 538 bytes .../admin/js/vendor/select2/i18n/fa.js | 3 + .../admin/js/vendor/select2/i18n/fa.js.gz | Bin 0 -> 538 bytes .../js/vendor/select2/i18n/fi.614ec42aa9ba.js | 3 + .../vendor/select2/i18n/fi.614ec42aa9ba.js.gz | Bin 0 -> 429 bytes .../admin/js/vendor/select2/i18n/fi.js | 3 + .../admin/js/vendor/select2/i18n/fi.js.gz | Bin 0 -> 429 bytes .../js/vendor/select2/i18n/fr.05e0542fcfe6.js | 3 + .../vendor/select2/i18n/fr.05e0542fcfe6.js.gz | Bin 0 -> 484 bytes .../admin/js/vendor/select2/i18n/fr.js | 3 + .../admin/js/vendor/select2/i18n/fr.js.gz | Bin 0 -> 484 bytes .../js/vendor/select2/i18n/gl.d99b1fedaa86.js | 3 + .../vendor/select2/i18n/gl.d99b1fedaa86.js.gz | Bin 0 -> 465 bytes .../admin/js/vendor/select2/i18n/gl.js | 3 + .../admin/js/vendor/select2/i18n/gl.js.gz | Bin 0 -> 465 bytes .../js/vendor/select2/i18n/he.e420ff6cd3ed.js | 3 + .../vendor/select2/i18n/he.e420ff6cd3ed.js.gz | Bin 0 -> 518 bytes .../admin/js/vendor/select2/i18n/he.js | 3 + .../admin/js/vendor/select2/i18n/he.js.gz | Bin 0 -> 518 bytes .../js/vendor/select2/i18n/hi.70640d41628f.js | 3 + .../vendor/select2/i18n/hi.70640d41628f.js.gz | Bin 0 -> 572 bytes .../admin/js/vendor/select2/i18n/hi.js | 3 + .../admin/js/vendor/select2/i18n/hi.js.gz | Bin 0 -> 572 bytes .../js/vendor/select2/i18n/hr.a2b092cc1147.js | 3 + .../vendor/select2/i18n/hr.a2b092cc1147.js.gz | Bin 0 -> 477 bytes .../admin/js/vendor/select2/i18n/hr.js | 3 + .../admin/js/vendor/select2/i18n/hr.js.gz | Bin 0 -> 477 bytes .../vendor/select2/i18n/hsb.fa3b55265efe.js | 3 + .../select2/i18n/hsb.fa3b55265efe.js.gz | Bin 0 -> 556 bytes .../admin/js/vendor/select2/i18n/hsb.js | 3 + .../admin/js/vendor/select2/i18n/hsb.js.gz | Bin 0 -> 556 bytes .../js/vendor/select2/i18n/hu.6ec6039cb8a3.js | 3 + .../vendor/select2/i18n/hu.6ec6039cb8a3.js.gz | Bin 0 -> 467 bytes .../admin/js/vendor/select2/i18n/hu.js | 3 + .../admin/js/vendor/select2/i18n/hu.js.gz | Bin 0 -> 467 bytes .../js/vendor/select2/i18n/hy.c7babaeef5a6.js | 3 + .../vendor/select2/i18n/hy.c7babaeef5a6.js.gz | Bin 0 -> 530 bytes .../admin/js/vendor/select2/i18n/hy.js | 3 + .../admin/js/vendor/select2/i18n/hy.js.gz | Bin 0 -> 530 bytes .../js/vendor/select2/i18n/id.04debded514d.js | 3 + .../vendor/select2/i18n/id.04debded514d.js.gz | Bin 0 -> 416 bytes .../admin/js/vendor/select2/i18n/id.js | 3 + .../admin/js/vendor/select2/i18n/id.js.gz | Bin 0 -> 416 bytes .../js/vendor/select2/i18n/is.3ddd9a6a97e9.js | 3 + .../vendor/select2/i18n/is.3ddd9a6a97e9.js.gz | Bin 0 -> 465 bytes .../admin/js/vendor/select2/i18n/is.js | 3 + .../admin/js/vendor/select2/i18n/is.js.gz | Bin 0 -> 465 bytes .../js/vendor/select2/i18n/it.be4fe8d365b5.js | 3 + .../vendor/select2/i18n/it.be4fe8d365b5.js.gz | Bin 0 -> 488 bytes .../admin/js/vendor/select2/i18n/it.js | 3 + .../admin/js/vendor/select2/i18n/it.js.gz | Bin 0 -> 488 bytes .../js/vendor/select2/i18n/ja.170ae885d74f.js | 3 + .../vendor/select2/i18n/ja.170ae885d74f.js.gz | Bin 0 -> 511 bytes .../admin/js/vendor/select2/i18n/ja.js | 3 + .../admin/js/vendor/select2/i18n/ja.js.gz | Bin 0 -> 511 bytes .../js/vendor/select2/i18n/ka.2083264a54f0.js | 3 + .../vendor/select2/i18n/ka.2083264a54f0.js.gz | Bin 0 -> 533 bytes .../admin/js/vendor/select2/i18n/ka.js | 3 + .../admin/js/vendor/select2/i18n/ka.js.gz | Bin 0 -> 533 bytes .../js/vendor/select2/i18n/km.c23089cb06ca.js | 3 + .../vendor/select2/i18n/km.c23089cb06ca.js.gz | Bin 0 -> 540 bytes .../admin/js/vendor/select2/i18n/km.js | 3 + .../admin/js/vendor/select2/i18n/km.js.gz | Bin 0 -> 540 bytes .../js/vendor/select2/i18n/ko.e7be6c20e673.js | 3 + .../vendor/select2/i18n/ko.e7be6c20e673.js.gz | Bin 0 -> 506 bytes .../admin/js/vendor/select2/i18n/ko.js | 3 + .../admin/js/vendor/select2/i18n/ko.js.gz | Bin 0 -> 506 bytes .../js/vendor/select2/i18n/lt.23c7ce903300.js | 3 + .../vendor/select2/i18n/lt.23c7ce903300.js.gz | Bin 0 -> 521 bytes .../admin/js/vendor/select2/i18n/lt.js | 3 + .../admin/js/vendor/select2/i18n/lt.js.gz | Bin 0 -> 521 bytes .../js/vendor/select2/i18n/lv.08e62128eac1.js | 3 + .../vendor/select2/i18n/lv.08e62128eac1.js.gz | Bin 0 -> 505 bytes .../admin/js/vendor/select2/i18n/lv.js | 3 + .../admin/js/vendor/select2/i18n/lv.js.gz | Bin 0 -> 505 bytes .../js/vendor/select2/i18n/mk.dabbb9087130.js | 3 + .../vendor/select2/i18n/mk.dabbb9087130.js.gz | Bin 0 -> 557 bytes .../admin/js/vendor/select2/i18n/mk.js | 3 + .../admin/js/vendor/select2/i18n/mk.js.gz | Bin 0 -> 557 bytes .../js/vendor/select2/i18n/ms.4ba82c9a51ce.js | 3 + .../vendor/select2/i18n/ms.4ba82c9a51ce.js.gz | Bin 0 -> 436 bytes .../admin/js/vendor/select2/i18n/ms.js | 3 + .../admin/js/vendor/select2/i18n/ms.js.gz | Bin 0 -> 436 bytes .../js/vendor/select2/i18n/nb.da2fce143f27.js | 3 + .../vendor/select2/i18n/nb.da2fce143f27.js.gz | Bin 0 -> 413 bytes .../admin/js/vendor/select2/i18n/nb.js | 3 + .../admin/js/vendor/select2/i18n/nb.js.gz | Bin 0 -> 413 bytes .../js/vendor/select2/i18n/ne.3d79fd3f08db.js | 3 + .../vendor/select2/i18n/ne.3d79fd3f08db.js.gz | Bin 0 -> 591 bytes .../admin/js/vendor/select2/i18n/ne.js | 3 + .../admin/js/vendor/select2/i18n/ne.js.gz | Bin 0 -> 591 bytes .../js/vendor/select2/i18n/nl.997868a37ed8.js | 3 + .../vendor/select2/i18n/nl.997868a37ed8.js.gz | Bin 0 -> 469 bytes .../admin/js/vendor/select2/i18n/nl.js | 3 + .../admin/js/vendor/select2/i18n/nl.js.gz | Bin 0 -> 469 bytes .../js/vendor/select2/i18n/pl.6031b4f16452.js | 3 + .../vendor/select2/i18n/pl.6031b4f16452.js.gz | Bin 0 -> 524 bytes .../admin/js/vendor/select2/i18n/pl.js | 3 + .../admin/js/vendor/select2/i18n/pl.js.gz | Bin 0 -> 524 bytes .../js/vendor/select2/i18n/ps.38dfa47af9e0.js | 3 + .../vendor/select2/i18n/ps.38dfa47af9e0.js.gz | Bin 0 -> 587 bytes .../admin/js/vendor/select2/i18n/ps.js | 3 + .../admin/js/vendor/select2/i18n/ps.js.gz | Bin 0 -> 587 bytes .../vendor/select2/i18n/pt-BR.e1b294433e7f.js | 3 + .../select2/i18n/pt-BR.e1b294433e7f.js.gz | Bin 0 -> 486 bytes .../admin/js/vendor/select2/i18n/pt-BR.js | 3 + .../admin/js/vendor/select2/i18n/pt-BR.js.gz | Bin 0 -> 486 bytes .../js/vendor/select2/i18n/pt.33b4a3b44d43.js | 3 + .../vendor/select2/i18n/pt.33b4a3b44d43.js.gz | Bin 0 -> 470 bytes .../admin/js/vendor/select2/i18n/pt.js | 3 + .../admin/js/vendor/select2/i18n/pt.js.gz | Bin 0 -> 470 bytes .../js/vendor/select2/i18n/ro.f75cb460ec3b.js | 3 + .../vendor/select2/i18n/ro.f75cb460ec3b.js.gz | Bin 0 -> 511 bytes .../admin/js/vendor/select2/i18n/ro.js | 3 + .../admin/js/vendor/select2/i18n/ro.js.gz | Bin 0 -> 511 bytes .../js/vendor/select2/i18n/ru.934aa95f5b5f.js | 3 + .../vendor/select2/i18n/ru.934aa95f5b5f.js.gz | Bin 0 -> 632 bytes .../admin/js/vendor/select2/i18n/ru.js | 3 + .../admin/js/vendor/select2/i18n/ru.js.gz | Bin 0 -> 632 bytes .../js/vendor/select2/i18n/sk.33d02cef8d11.js | 3 + .../vendor/select2/i18n/sk.33d02cef8d11.js.gz | Bin 0 -> 617 bytes .../admin/js/vendor/select2/i18n/sk.js | 3 + .../admin/js/vendor/select2/i18n/sk.js.gz | Bin 0 -> 617 bytes .../js/vendor/select2/i18n/sl.131a78bc0752.js | 3 + .../vendor/select2/i18n/sl.131a78bc0752.js.gz | Bin 0 -> 487 bytes .../admin/js/vendor/select2/i18n/sl.js | 3 + .../admin/js/vendor/select2/i18n/sl.js.gz | Bin 0 -> 487 bytes .../js/vendor/select2/i18n/sq.5636b60d29c9.js | 3 + .../vendor/select2/i18n/sq.5636b60d29c9.js.gz | Bin 0 -> 490 bytes .../admin/js/vendor/select2/i18n/sq.js | 3 + .../admin/js/vendor/select2/i18n/sq.js.gz | Bin 0 -> 490 bytes .../select2/i18n/sr-Cyrl.f254bb8c4c7c.js | 3 + .../select2/i18n/sr-Cyrl.f254bb8c4c7c.js.gz | Bin 0 -> 608 bytes .../admin/js/vendor/select2/i18n/sr-Cyrl.js | 3 + .../js/vendor/select2/i18n/sr-Cyrl.js.gz | Bin 0 -> 608 bytes .../js/vendor/select2/i18n/sr.5ed85a48f483.js | 3 + .../vendor/select2/i18n/sr.5ed85a48f483.js.gz | Bin 0 -> 552 bytes .../admin/js/vendor/select2/i18n/sr.js | 3 + .../admin/js/vendor/select2/i18n/sr.js.gz | Bin 0 -> 552 bytes .../js/vendor/select2/i18n/sv.7a9c2f71e777.js | 3 + .../vendor/select2/i18n/sv.7a9c2f71e777.js.gz | Bin 0 -> 429 bytes .../admin/js/vendor/select2/i18n/sv.js | 3 + .../admin/js/vendor/select2/i18n/sv.js.gz | Bin 0 -> 429 bytes .../js/vendor/select2/i18n/th.f38c20b0221b.js | 3 + .../vendor/select2/i18n/th.f38c20b0221b.js.gz | Bin 0 -> 515 bytes .../admin/js/vendor/select2/i18n/th.js | 3 + .../admin/js/vendor/select2/i18n/th.js.gz | Bin 0 -> 515 bytes .../js/vendor/select2/i18n/tk.7c572a68c78f.js | 3 + .../vendor/select2/i18n/tk.7c572a68c78f.js.gz | Bin 0 -> 434 bytes .../admin/js/vendor/select2/i18n/tk.js | 3 + .../admin/js/vendor/select2/i18n/tk.js.gz | Bin 0 -> 434 bytes .../js/vendor/select2/i18n/tr.b5a0643d1545.js | 3 + .../vendor/select2/i18n/tr.b5a0643d1545.js.gz | Bin 0 -> 423 bytes .../admin/js/vendor/select2/i18n/tr.js | 3 + .../admin/js/vendor/select2/i18n/tr.js.gz | Bin 0 -> 423 bytes .../js/vendor/select2/i18n/uk.8cede7f4803c.js | 3 + .../vendor/select2/i18n/uk.8cede7f4803c.js.gz | Bin 0 -> 626 bytes .../admin/js/vendor/select2/i18n/uk.js | 3 + .../admin/js/vendor/select2/i18n/uk.js.gz | Bin 0 -> 626 bytes .../js/vendor/select2/i18n/vi.097a5b75b3e1.js | 3 + .../vendor/select2/i18n/vi.097a5b75b3e1.js.gz | Bin 0 -> 479 bytes .../admin/js/vendor/select2/i18n/vi.js | 3 + .../admin/js/vendor/select2/i18n/vi.js.gz | Bin 0 -> 479 bytes .../vendor/select2/i18n/zh-CN.2cff662ec5f9.js | 3 + .../select2/i18n/zh-CN.2cff662ec5f9.js.gz | Bin 0 -> 468 bytes .../admin/js/vendor/select2/i18n/zh-CN.js | 3 + .../admin/js/vendor/select2/i18n/zh-CN.js.gz | Bin 0 -> 468 bytes .../vendor/select2/i18n/zh-TW.04554a227c2b.js | 3 + .../select2/i18n/zh-TW.04554a227c2b.js.gz | Bin 0 -> 451 bytes .../admin/js/vendor/select2/i18n/zh-TW.js | 3 + .../admin/js/vendor/select2/i18n/zh-TW.js.gz | Bin 0 -> 451 bytes .../select2/select2.full.c2afdeda3058.js | 6820 ++++++++++ .../select2/select2.full.c2afdeda3058.js.gz | Bin 0 -> 37925 bytes .../admin/js/vendor/select2/select2.full.js | 6820 ++++++++++ .../js/vendor/select2/select2.full.js.gz | Bin 0 -> 37925 bytes .../select2/select2.full.min.fcd7500d8e13.js | 2 + .../select2.full.min.fcd7500d8e13.js.gz | Bin 0 -> 21986 bytes .../js/vendor/select2/select2.full.min.js | 2 + .../js/vendor/select2/select2.full.min.js.gz | Bin 0 -> 21986 bytes .../vendor/xregexp/LICENSE.bf79e414957a.txt | 21 + .../xregexp/LICENSE.bf79e414957a.txt.gz | Bin 0 -> 679 bytes .../admin/js/vendor/xregexp/LICENSE.txt | 21 + .../admin/js/vendor/xregexp/LICENSE.txt.gz | Bin 0 -> 679 bytes .../js/vendor/xregexp/xregexp.efda034b9537.js | 4652 +++++++ .../vendor/xregexp/xregexp.efda034b9537.js.gz | Bin 0 -> 60899 bytes .../admin/js/vendor/xregexp/xregexp.js | 4652 +++++++ .../admin/js/vendor/xregexp/xregexp.js.gz | Bin 0 -> 60899 bytes .../xregexp/xregexp.min.b0439563a5d3.js | 160 + .../xregexp/xregexp.min.b0439563a5d3.js.gz | Bin 0 -> 37609 bytes .../admin/js/vendor/xregexp/xregexp.min.js | 160 + .../admin/js/vendor/xregexp/xregexp.min.js.gz | Bin 0 -> 37609 bytes staticfiles/css/base.css | 47 + staticfiles/css/base.css.gz | Bin 0 -> 284 bytes staticfiles/css/base.d84100d96c86.css | 47 + staticfiles/css/base.d84100d96c86.css.gz | Bin 0 -> 284 bytes staticfiles/staticfiles.json | 1 + templates/base.html | 35 + templates/home.html | 10 + templates/post_delete.html | 9 + templates/post_detail.html | 12 + templates/post_edit.html | 9 + templates/post_new.html | 9 + templates/registration/login.html | 9 + templates/registration/signup.html | 9 + 545 files changed, 62042 insertions(+) create mode 100644 .dockerignore create mode 100644 .env create mode 100644 .gitignore create mode 100644 .python-version create mode 100644 Dockerfile create mode 100644 accounts/__init__.py create mode 100644 accounts/admin.py create mode 100644 accounts/apps.py create mode 100644 accounts/migrations/__init__.py create mode 100644 accounts/models.py create mode 100644 accounts/tests.py create mode 100644 accounts/urls.py create mode 100644 accounts/views.py create mode 100644 blog/__init__.py create mode 100644 blog/admin.py create mode 100644 blog/apps.py create mode 100644 blog/migrations/0001_initial.py create mode 100644 blog/migrations/0002_alter_post_author.py create mode 100644 blog/migrations/__init__.py create mode 100644 blog/models.py create mode 100644 blog/tests.py create mode 100644 blog/urls.py create mode 100644 blog/views.py create mode 100644 django_project/__init__.py create mode 100644 django_project/asgi.py create mode 100644 django_project/settings.py create mode 100644 django_project/urls.py create mode 100644 django_project/wsgi.py create mode 100644 fly.toml create mode 100755 manage.py create mode 100644 requirements.txt create mode 100644 static/css/base.css create mode 100644 staticfiles/admin/css/autocomplete.4a81fc4242d0.css create mode 100644 staticfiles/admin/css/autocomplete.4a81fc4242d0.css.gz create mode 100644 staticfiles/admin/css/autocomplete.css create mode 100644 staticfiles/admin/css/autocomplete.css.gz create mode 100644 staticfiles/admin/css/base.64976e0f7339.css create mode 100644 staticfiles/admin/css/base.64976e0f7339.css.gz create mode 100644 staticfiles/admin/css/base.css create mode 100644 staticfiles/admin/css/base.css.gz create mode 100644 staticfiles/admin/css/changelists.css create mode 100644 staticfiles/admin/css/changelists.css.gz create mode 100644 staticfiles/admin/css/changelists.f4631a29abad.css create mode 100644 staticfiles/admin/css/changelists.f4631a29abad.css.gz create mode 100644 staticfiles/admin/css/dark_mode.css create mode 100644 staticfiles/admin/css/dark_mode.css.gz create mode 100644 staticfiles/admin/css/dark_mode.ef27a31af300.css create mode 100644 staticfiles/admin/css/dark_mode.ef27a31af300.css.gz create mode 100644 staticfiles/admin/css/dashboard.css create mode 100644 staticfiles/admin/css/dashboard.css.gz create mode 100644 staticfiles/admin/css/dashboard.e90f2068217b.css create mode 100644 staticfiles/admin/css/dashboard.e90f2068217b.css.gz create mode 100644 staticfiles/admin/css/forms.1dd11ef16031.css create mode 100644 staticfiles/admin/css/forms.1dd11ef16031.css.gz create mode 100644 staticfiles/admin/css/forms.css create mode 100644 staticfiles/admin/css/forms.css.gz create mode 100644 staticfiles/admin/css/login.586129c60a93.css create mode 100644 staticfiles/admin/css/login.586129c60a93.css.gz create mode 100644 staticfiles/admin/css/login.css create mode 100644 staticfiles/admin/css/login.css.gz create mode 100644 staticfiles/admin/css/nav_sidebar.269a1bd44627.css create mode 100644 staticfiles/admin/css/nav_sidebar.269a1bd44627.css.gz create mode 100644 staticfiles/admin/css/nav_sidebar.css create mode 100644 staticfiles/admin/css/nav_sidebar.css.gz create mode 100644 staticfiles/admin/css/responsive.76d4b69c4c82.css create mode 100644 staticfiles/admin/css/responsive.76d4b69c4c82.css.gz create mode 100644 staticfiles/admin/css/responsive.css create mode 100644 staticfiles/admin/css/responsive.css.gz create mode 100644 staticfiles/admin/css/responsive_rtl.97b066429fd8.css create mode 100644 staticfiles/admin/css/responsive_rtl.97b066429fd8.css.gz create mode 100644 staticfiles/admin/css/responsive_rtl.css create mode 100644 staticfiles/admin/css/responsive_rtl.css.gz create mode 100644 staticfiles/admin/css/rtl.ac25b2aecb6e.css create mode 100644 staticfiles/admin/css/rtl.ac25b2aecb6e.css.gz create mode 100644 staticfiles/admin/css/rtl.css create mode 100644 staticfiles/admin/css/rtl.css.gz create mode 100644 staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.f94142512c91.md create mode 100644 staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.f94142512c91.md.gz create mode 100644 staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md create mode 100644 staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md.gz create mode 100644 staticfiles/admin/css/vendor/select2/select2.a2194c262648.css create mode 100644 staticfiles/admin/css/vendor/select2/select2.a2194c262648.css.gz create mode 100644 staticfiles/admin/css/vendor/select2/select2.css create mode 100644 staticfiles/admin/css/vendor/select2/select2.css.gz create mode 100644 staticfiles/admin/css/vendor/select2/select2.min.9f54e6414f87.css create mode 100644 staticfiles/admin/css/vendor/select2/select2.min.9f54e6414f87.css.gz create mode 100644 staticfiles/admin/css/vendor/select2/select2.min.css create mode 100644 staticfiles/admin/css/vendor/select2/select2.min.css.gz create mode 100644 staticfiles/admin/css/widgets.801bda05bd0d.css create mode 100644 staticfiles/admin/css/widgets.801bda05bd0d.css.gz create mode 100644 staticfiles/admin/css/widgets.css create mode 100644 staticfiles/admin/css/widgets.css.gz create mode 100644 staticfiles/admin/img/LICENSE create mode 100644 staticfiles/admin/img/LICENSE.2c54f4e1ca1c create mode 100644 staticfiles/admin/img/LICENSE.2c54f4e1ca1c.gz create mode 100644 staticfiles/admin/img/LICENSE.gz create mode 100644 staticfiles/admin/img/README.a70711a38d87.txt create mode 100644 staticfiles/admin/img/README.a70711a38d87.txt.gz create mode 100644 staticfiles/admin/img/README.txt create mode 100644 staticfiles/admin/img/README.txt.gz create mode 100644 staticfiles/admin/img/calendar-icons.39b290681a8b.svg create mode 100644 staticfiles/admin/img/calendar-icons.39b290681a8b.svg.gz create mode 100644 staticfiles/admin/img/calendar-icons.svg create mode 100644 staticfiles/admin/img/calendar-icons.svg.gz create mode 100644 staticfiles/admin/img/gis/move_vertex_off.7a23bf31ef8a.svg create mode 100644 staticfiles/admin/img/gis/move_vertex_off.7a23bf31ef8a.svg.gz create mode 100644 staticfiles/admin/img/gis/move_vertex_off.svg create mode 100644 staticfiles/admin/img/gis/move_vertex_off.svg.gz create mode 100644 staticfiles/admin/img/gis/move_vertex_on.0047eba25b67.svg create mode 100644 staticfiles/admin/img/gis/move_vertex_on.0047eba25b67.svg.gz create mode 100644 staticfiles/admin/img/gis/move_vertex_on.svg create mode 100644 staticfiles/admin/img/gis/move_vertex_on.svg.gz create mode 100644 staticfiles/admin/img/icon-addlink.d519b3bab011.svg create mode 100644 staticfiles/admin/img/icon-addlink.d519b3bab011.svg.gz create mode 100644 staticfiles/admin/img/icon-addlink.svg create mode 100644 staticfiles/admin/img/icon-addlink.svg.gz create mode 100644 staticfiles/admin/img/icon-alert.034cc7d8a67f.svg create mode 100644 staticfiles/admin/img/icon-alert.034cc7d8a67f.svg.gz create mode 100644 staticfiles/admin/img/icon-alert.svg create mode 100644 staticfiles/admin/img/icon-alert.svg.gz create mode 100644 staticfiles/admin/img/icon-calendar.ac7aea671bea.svg create mode 100644 staticfiles/admin/img/icon-calendar.ac7aea671bea.svg.gz create mode 100644 staticfiles/admin/img/icon-calendar.svg create mode 100644 staticfiles/admin/img/icon-calendar.svg.gz create mode 100644 staticfiles/admin/img/icon-changelink.18d2fd706348.svg create mode 100644 staticfiles/admin/img/icon-changelink.18d2fd706348.svg.gz create mode 100644 staticfiles/admin/img/icon-changelink.svg create mode 100644 staticfiles/admin/img/icon-changelink.svg.gz create mode 100644 staticfiles/admin/img/icon-clock.e1d4dfac3f2b.svg create mode 100644 staticfiles/admin/img/icon-clock.e1d4dfac3f2b.svg.gz create mode 100644 staticfiles/admin/img/icon-clock.svg create mode 100644 staticfiles/admin/img/icon-clock.svg.gz create mode 100644 staticfiles/admin/img/icon-deletelink.564ef9dc3854.svg create mode 100644 staticfiles/admin/img/icon-deletelink.564ef9dc3854.svg.gz create mode 100644 staticfiles/admin/img/icon-deletelink.svg create mode 100644 staticfiles/admin/img/icon-deletelink.svg.gz create mode 100644 staticfiles/admin/img/icon-no.439e821418cd.svg create mode 100644 staticfiles/admin/img/icon-no.439e821418cd.svg.gz create mode 100644 staticfiles/admin/img/icon-no.svg create mode 100644 staticfiles/admin/img/icon-no.svg.gz create mode 100644 staticfiles/admin/img/icon-unknown-alt.81536e128bb6.svg create mode 100644 staticfiles/admin/img/icon-unknown-alt.81536e128bb6.svg.gz create mode 100644 staticfiles/admin/img/icon-unknown-alt.svg create mode 100644 staticfiles/admin/img/icon-unknown-alt.svg.gz create mode 100644 staticfiles/admin/img/icon-unknown.a18cb4398978.svg create mode 100644 staticfiles/admin/img/icon-unknown.a18cb4398978.svg.gz create mode 100644 staticfiles/admin/img/icon-unknown.svg create mode 100644 staticfiles/admin/img/icon-unknown.svg.gz create mode 100644 staticfiles/admin/img/icon-viewlink.41eb31f7826e.svg create mode 100644 staticfiles/admin/img/icon-viewlink.41eb31f7826e.svg.gz create mode 100644 staticfiles/admin/img/icon-viewlink.svg create mode 100644 staticfiles/admin/img/icon-viewlink.svg.gz create mode 100644 staticfiles/admin/img/icon-yes.d2f9f035226a.svg create mode 100644 staticfiles/admin/img/icon-yes.d2f9f035226a.svg.gz create mode 100644 staticfiles/admin/img/icon-yes.svg create mode 100644 staticfiles/admin/img/icon-yes.svg.gz create mode 100644 staticfiles/admin/img/inline-delete.fec1b761f254.svg create mode 100644 staticfiles/admin/img/inline-delete.fec1b761f254.svg.gz create mode 100644 staticfiles/admin/img/inline-delete.svg create mode 100644 staticfiles/admin/img/inline-delete.svg.gz create mode 100644 staticfiles/admin/img/search.7cf54ff789c6.svg create mode 100644 staticfiles/admin/img/search.7cf54ff789c6.svg.gz create mode 100644 staticfiles/admin/img/search.svg create mode 100644 staticfiles/admin/img/search.svg.gz create mode 100644 staticfiles/admin/img/selector-icons.b4555096cea2.svg create mode 100644 staticfiles/admin/img/selector-icons.b4555096cea2.svg.gz create mode 100644 staticfiles/admin/img/selector-icons.svg create mode 100644 staticfiles/admin/img/selector-icons.svg.gz create mode 100644 staticfiles/admin/img/sorting-icons.3a097b59f104.svg create mode 100644 staticfiles/admin/img/sorting-icons.3a097b59f104.svg.gz create mode 100644 staticfiles/admin/img/sorting-icons.svg create mode 100644 staticfiles/admin/img/sorting-icons.svg.gz create mode 100644 staticfiles/admin/img/tooltag-add.e59d620a9742.svg create mode 100644 staticfiles/admin/img/tooltag-add.e59d620a9742.svg.gz create mode 100644 staticfiles/admin/img/tooltag-add.svg create mode 100644 staticfiles/admin/img/tooltag-add.svg.gz create mode 100644 staticfiles/admin/img/tooltag-arrowright.bbfb788a849e.svg create mode 100644 staticfiles/admin/img/tooltag-arrowright.bbfb788a849e.svg.gz create mode 100644 staticfiles/admin/img/tooltag-arrowright.svg create mode 100644 staticfiles/admin/img/tooltag-arrowright.svg.gz create mode 100644 staticfiles/admin/js/SelectBox.7d3ce5a98007.js create mode 100644 staticfiles/admin/js/SelectBox.7d3ce5a98007.js.gz create mode 100644 staticfiles/admin/js/SelectBox.js create mode 100644 staticfiles/admin/js/SelectBox.js.gz create mode 100644 staticfiles/admin/js/SelectFilter2.bdb8d0cc579e.js create mode 100644 staticfiles/admin/js/SelectFilter2.bdb8d0cc579e.js.gz create mode 100644 staticfiles/admin/js/SelectFilter2.js create mode 100644 staticfiles/admin/js/SelectFilter2.js.gz create mode 100644 staticfiles/admin/js/actions.eac7e3441574.js create mode 100644 staticfiles/admin/js/actions.eac7e3441574.js.gz create mode 100644 staticfiles/admin/js/actions.js create mode 100644 staticfiles/admin/js/actions.js.gz create mode 100644 staticfiles/admin/js/admin/DateTimeShortcuts.9f6e209cebca.js create mode 100644 staticfiles/admin/js/admin/DateTimeShortcuts.9f6e209cebca.js.gz create mode 100644 staticfiles/admin/js/admin/DateTimeShortcuts.js create mode 100644 staticfiles/admin/js/admin/DateTimeShortcuts.js.gz create mode 100644 staticfiles/admin/js/admin/RelatedObjectLookups.8609f99b9ab2.js create mode 100644 staticfiles/admin/js/admin/RelatedObjectLookups.8609f99b9ab2.js.gz create mode 100644 staticfiles/admin/js/admin/RelatedObjectLookups.js create mode 100644 staticfiles/admin/js/admin/RelatedObjectLookups.js.gz create mode 100644 staticfiles/admin/js/autocomplete.01591ab27be7.js create mode 100644 staticfiles/admin/js/autocomplete.01591ab27be7.js.gz create mode 100644 staticfiles/admin/js/autocomplete.js create mode 100644 staticfiles/admin/js/autocomplete.js.gz create mode 100644 staticfiles/admin/js/calendar.f8a5d055eb33.js create mode 100644 staticfiles/admin/js/calendar.f8a5d055eb33.js.gz create mode 100644 staticfiles/admin/js/calendar.js create mode 100644 staticfiles/admin/js/calendar.js.gz create mode 100644 staticfiles/admin/js/cancel.ecc4c5ca7b32.js create mode 100644 staticfiles/admin/js/cancel.ecc4c5ca7b32.js.gz create mode 100644 staticfiles/admin/js/cancel.js create mode 100644 staticfiles/admin/js/cancel.js.gz create mode 100644 staticfiles/admin/js/change_form.9d8ca4f96b75.js create mode 100644 staticfiles/admin/js/change_form.9d8ca4f96b75.js.gz create mode 100644 staticfiles/admin/js/change_form.js create mode 100644 staticfiles/admin/js/change_form.js.gz create mode 100644 staticfiles/admin/js/collapse.f84e7410290f.js create mode 100644 staticfiles/admin/js/collapse.f84e7410290f.js.gz create mode 100644 staticfiles/admin/js/collapse.js create mode 100644 staticfiles/admin/js/collapse.js.gz create mode 100644 staticfiles/admin/js/core.cf103cd04ebf.js create mode 100644 staticfiles/admin/js/core.cf103cd04ebf.js.gz create mode 100644 staticfiles/admin/js/core.js create mode 100644 staticfiles/admin/js/core.js.gz create mode 100644 staticfiles/admin/js/filters.0e360b7a9f80.js create mode 100644 staticfiles/admin/js/filters.0e360b7a9f80.js.gz create mode 100644 staticfiles/admin/js/filters.js create mode 100644 staticfiles/admin/js/filters.js.gz create mode 100644 staticfiles/admin/js/inlines.22d4d93c00b4.js create mode 100644 staticfiles/admin/js/inlines.22d4d93c00b4.js.gz create mode 100644 staticfiles/admin/js/inlines.js create mode 100644 staticfiles/admin/js/inlines.js.gz create mode 100644 staticfiles/admin/js/jquery.init.b7781a0897fc.js create mode 100644 staticfiles/admin/js/jquery.init.b7781a0897fc.js.gz create mode 100644 staticfiles/admin/js/jquery.init.js create mode 100644 staticfiles/admin/js/jquery.init.js.gz create mode 100644 staticfiles/admin/js/nav_sidebar.3b9190d420b1.js create mode 100644 staticfiles/admin/js/nav_sidebar.3b9190d420b1.js.gz create mode 100644 staticfiles/admin/js/nav_sidebar.js create mode 100644 staticfiles/admin/js/nav_sidebar.js.gz create mode 100644 staticfiles/admin/js/popup_response.c6cc78ea5551.js create mode 100644 staticfiles/admin/js/popup_response.c6cc78ea5551.js.gz create mode 100644 staticfiles/admin/js/popup_response.js create mode 100644 staticfiles/admin/js/popup_response.js.gz create mode 100644 staticfiles/admin/js/prepopulate.bd2361dfd64d.js create mode 100644 staticfiles/admin/js/prepopulate.bd2361dfd64d.js.gz create mode 100644 staticfiles/admin/js/prepopulate.js create mode 100644 staticfiles/admin/js/prepopulate.js.gz create mode 100644 staticfiles/admin/js/prepopulate_init.6cac7f3105b8.js create mode 100644 staticfiles/admin/js/prepopulate_init.6cac7f3105b8.js.gz create mode 100644 staticfiles/admin/js/prepopulate_init.js create mode 100644 staticfiles/admin/js/prepopulate_init.js.gz create mode 100644 staticfiles/admin/js/theme.ab270f56bb9c.js create mode 100644 staticfiles/admin/js/theme.ab270f56bb9c.js.gz create mode 100644 staticfiles/admin/js/theme.js create mode 100644 staticfiles/admin/js/theme.js.gz create mode 100644 staticfiles/admin/js/urlify.ae970a820212.js create mode 100644 staticfiles/admin/js/urlify.ae970a820212.js.gz create mode 100644 staticfiles/admin/js/urlify.js create mode 100644 staticfiles/admin/js/urlify.js.gz create mode 100644 staticfiles/admin/js/vendor/jquery/LICENSE.de877aa6d744.txt create mode 100644 staticfiles/admin/js/vendor/jquery/LICENSE.de877aa6d744.txt.gz create mode 100644 staticfiles/admin/js/vendor/jquery/LICENSE.txt create mode 100644 staticfiles/admin/js/vendor/jquery/LICENSE.txt.gz create mode 100644 staticfiles/admin/js/vendor/jquery/jquery.0208b96062ba.js create mode 100644 staticfiles/admin/js/vendor/jquery/jquery.0208b96062ba.js.gz create mode 100644 staticfiles/admin/js/vendor/jquery/jquery.js create mode 100644 staticfiles/admin/js/vendor/jquery/jquery.js.gz create mode 100644 staticfiles/admin/js/vendor/jquery/jquery.min.641dd1437010.js create mode 100644 staticfiles/admin/js/vendor/jquery/jquery.min.641dd1437010.js.gz create mode 100644 staticfiles/admin/js/vendor/jquery/jquery.min.js create mode 100644 staticfiles/admin/js/vendor/jquery/jquery.min.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/LICENSE.f94142512c91.md create mode 100644 staticfiles/admin/js/vendor/select2/LICENSE.f94142512c91.md.gz create mode 100644 staticfiles/admin/js/vendor/select2/LICENSE.md create mode 100644 staticfiles/admin/js/vendor/select2/LICENSE.md.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/af.4f6fcd73488c.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/af.4f6fcd73488c.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/af.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/af.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ar.65aa8e36bf5d.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ar.65aa8e36bf5d.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ar.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ar.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/az.270c257daf81.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/az.270c257daf81.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/az.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/az.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/bg.39b8be30d4f0.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/bg.39b8be30d4f0.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/bg.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/bg.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/bn.6d42b4dd5665.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/bn.6d42b4dd5665.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/bn.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/bn.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/bs.91624382358e.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/bs.91624382358e.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/bs.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/bs.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ca.a166b745933a.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ca.a166b745933a.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ca.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ca.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/cs.4f43e8e7d33a.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/cs.4f43e8e7d33a.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/cs.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/cs.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/da.766346afe4dd.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/da.766346afe4dd.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/da.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/da.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/de.8a1c222b0204.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/de.8a1c222b0204.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/de.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/de.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/dsb.56372c92d2f1.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/dsb.56372c92d2f1.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/dsb.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/dsb.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/el.27097f071856.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/el.27097f071856.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/el.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/el.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/en.cf932ba09a98.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/en.cf932ba09a98.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/en.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/en.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/es.66dbc2652fb1.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/es.66dbc2652fb1.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/es.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/es.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/et.2b96fd98289d.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/et.2b96fd98289d.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/et.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/et.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/eu.adfe5c97b72c.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/eu.adfe5c97b72c.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/eu.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/eu.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/fa.3b5bd1961cfd.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/fa.3b5bd1961cfd.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/fa.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/fa.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/fi.614ec42aa9ba.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/fi.614ec42aa9ba.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/fi.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/fi.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/fr.05e0542fcfe6.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/fr.05e0542fcfe6.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/fr.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/fr.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/gl.d99b1fedaa86.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/gl.d99b1fedaa86.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/gl.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/gl.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/he.e420ff6cd3ed.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/he.e420ff6cd3ed.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/he.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/he.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hi.70640d41628f.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hi.70640d41628f.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hi.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hi.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hr.a2b092cc1147.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hr.a2b092cc1147.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hr.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hr.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hsb.fa3b55265efe.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hsb.fa3b55265efe.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hsb.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hsb.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hu.6ec6039cb8a3.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hu.6ec6039cb8a3.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hu.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hu.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hy.c7babaeef5a6.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hy.c7babaeef5a6.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hy.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/hy.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/id.04debded514d.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/id.04debded514d.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/id.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/id.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/is.3ddd9a6a97e9.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/is.3ddd9a6a97e9.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/is.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/is.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/it.be4fe8d365b5.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/it.be4fe8d365b5.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/it.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/it.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ja.170ae885d74f.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ja.170ae885d74f.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ja.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ja.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ka.2083264a54f0.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ka.2083264a54f0.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ka.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ka.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/km.c23089cb06ca.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/km.c23089cb06ca.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/km.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/km.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ko.e7be6c20e673.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ko.e7be6c20e673.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ko.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ko.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/lt.23c7ce903300.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/lt.23c7ce903300.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/lt.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/lt.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/lv.08e62128eac1.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/lv.08e62128eac1.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/lv.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/lv.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/mk.dabbb9087130.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/mk.dabbb9087130.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/mk.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/mk.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ms.4ba82c9a51ce.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ms.4ba82c9a51ce.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ms.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ms.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/nb.da2fce143f27.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/nb.da2fce143f27.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/nb.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/nb.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ne.3d79fd3f08db.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ne.3d79fd3f08db.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ne.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ne.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/nl.997868a37ed8.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/nl.997868a37ed8.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/nl.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/nl.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/pl.6031b4f16452.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/pl.6031b4f16452.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/pl.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/pl.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ps.38dfa47af9e0.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ps.38dfa47af9e0.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ps.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ps.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/pt-BR.e1b294433e7f.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/pt-BR.e1b294433e7f.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/pt-BR.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/pt-BR.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/pt.33b4a3b44d43.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/pt.33b4a3b44d43.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/pt.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/pt.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ro.f75cb460ec3b.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ro.f75cb460ec3b.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ro.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ro.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ru.934aa95f5b5f.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ru.934aa95f5b5f.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ru.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/ru.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sk.33d02cef8d11.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sk.33d02cef8d11.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sk.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sk.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sl.131a78bc0752.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sl.131a78bc0752.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sl.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sl.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sq.5636b60d29c9.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sq.5636b60d29c9.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sq.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sq.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sr-Cyrl.f254bb8c4c7c.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sr-Cyrl.f254bb8c4c7c.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sr-Cyrl.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sr-Cyrl.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sr.5ed85a48f483.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sr.5ed85a48f483.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sr.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sr.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sv.7a9c2f71e777.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sv.7a9c2f71e777.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sv.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/sv.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/th.f38c20b0221b.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/th.f38c20b0221b.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/th.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/th.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/tk.7c572a68c78f.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/tk.7c572a68c78f.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/tk.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/tk.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/tr.b5a0643d1545.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/tr.b5a0643d1545.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/tr.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/tr.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/uk.8cede7f4803c.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/uk.8cede7f4803c.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/uk.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/uk.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/vi.097a5b75b3e1.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/vi.097a5b75b3e1.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/vi.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/vi.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/zh-CN.2cff662ec5f9.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/zh-CN.2cff662ec5f9.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/zh-CN.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/zh-CN.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/zh-TW.04554a227c2b.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/zh-TW.04554a227c2b.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/i18n/zh-TW.js create mode 100644 staticfiles/admin/js/vendor/select2/i18n/zh-TW.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/select2.full.c2afdeda3058.js create mode 100644 staticfiles/admin/js/vendor/select2/select2.full.c2afdeda3058.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/select2.full.js create mode 100644 staticfiles/admin/js/vendor/select2/select2.full.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/select2.full.min.fcd7500d8e13.js create mode 100644 staticfiles/admin/js/vendor/select2/select2.full.min.fcd7500d8e13.js.gz create mode 100644 staticfiles/admin/js/vendor/select2/select2.full.min.js create mode 100644 staticfiles/admin/js/vendor/select2/select2.full.min.js.gz create mode 100644 staticfiles/admin/js/vendor/xregexp/LICENSE.bf79e414957a.txt create mode 100644 staticfiles/admin/js/vendor/xregexp/LICENSE.bf79e414957a.txt.gz create mode 100644 staticfiles/admin/js/vendor/xregexp/LICENSE.txt create mode 100644 staticfiles/admin/js/vendor/xregexp/LICENSE.txt.gz create mode 100644 staticfiles/admin/js/vendor/xregexp/xregexp.efda034b9537.js create mode 100644 staticfiles/admin/js/vendor/xregexp/xregexp.efda034b9537.js.gz create mode 100644 staticfiles/admin/js/vendor/xregexp/xregexp.js create mode 100644 staticfiles/admin/js/vendor/xregexp/xregexp.js.gz create mode 100644 staticfiles/admin/js/vendor/xregexp/xregexp.min.b0439563a5d3.js create mode 100644 staticfiles/admin/js/vendor/xregexp/xregexp.min.b0439563a5d3.js.gz create mode 100644 staticfiles/admin/js/vendor/xregexp/xregexp.min.js create mode 100644 staticfiles/admin/js/vendor/xregexp/xregexp.min.js.gz create mode 100644 staticfiles/css/base.css create mode 100644 staticfiles/css/base.css.gz create mode 100644 staticfiles/css/base.d84100d96c86.css create mode 100644 staticfiles/css/base.d84100d96c86.css.gz create mode 100644 staticfiles/staticfiles.json create mode 100644 templates/base.html create mode 100644 templates/home.html create mode 100644 templates/post_delete.html create mode 100644 templates/post_detail.html create mode 100644 templates/post_edit.html create mode 100644 templates/post_new.html create mode 100644 templates/registration/login.html create mode 100644 templates/registration/signup.html diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..7829224 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +.venv/ +__pycache__/ +*.sqlite3 +.git +.env \ No newline at end of file diff --git a/.env b/.env new file mode 100644 index 0000000..c7af57a --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +DEBUG=True +SECRET_KEY=imDnfLXy-8Y-YozfJmP2Rw_81YA_qx1XKl5FeY0mXyY \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5e0b8b9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.venv/ +__pycache__/ +*.sqlite3 +.env # new \ No newline at end of file diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..9919bf8 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.10.13 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..46ae204 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,24 @@ +ARG PYTHON_VERSION=3.10-slim-buster + +FROM python:${PYTHON_VERSION} + +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 + +RUN mkdir -p /code + +WORKDIR /code + +COPY requirements.txt /tmp/requirements.txt +RUN set -ex && \ + pip install --upgrade pip && \ + pip install -r /tmp/requirements.txt && \ + rm -rf /root/.cache/ +COPY . /code + +ENV SECRET_KEY "44vo2ULsqFl9DUZ4QmY34Ja2sgX6avQ7Nd8H6Vp1GL0zltNKEf" +RUN python manage.py collectstatic --noinput + +EXPOSE 8000 + +CMD ["gunicorn", "--bind", ":8000", "--workers", "2", "django_project.wsgi"] diff --git a/accounts/__init__.py b/accounts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/accounts/admin.py b/accounts/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/accounts/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/accounts/apps.py b/accounts/apps.py new file mode 100644 index 0000000..0cb51e6 --- /dev/null +++ b/accounts/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class AccountsConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "accounts" diff --git a/accounts/migrations/__init__.py b/accounts/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/accounts/models.py b/accounts/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/accounts/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/accounts/tests.py b/accounts/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/accounts/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/accounts/urls.py b/accounts/urls.py new file mode 100644 index 0000000..08bd438 --- /dev/null +++ b/accounts/urls.py @@ -0,0 +1,6 @@ +from django.urls import path +from .views import SignUpView + +urlpatterns = [ + path("signup/", SignUpView.as_view(), name="signup"), +] diff --git a/accounts/views.py b/accounts/views.py new file mode 100644 index 0000000..33fa1ba --- /dev/null +++ b/accounts/views.py @@ -0,0 +1,9 @@ +from django.contrib.auth.forms import UserCreationForm +from django.urls import reverse_lazy +from django.views.generic import CreateView + + +class SignUpView(CreateView): + form_class = UserCreationForm + success_url = reverse_lazy("login") + template_name = "registration/signup.html" diff --git a/blog/__init__.py b/blog/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blog/admin.py b/blog/admin.py new file mode 100644 index 0000000..47f03fd --- /dev/null +++ b/blog/admin.py @@ -0,0 +1,4 @@ +from django.contrib import admin +from .models import Post + +admin.site.register(Post) diff --git a/blog/apps.py b/blog/apps.py new file mode 100644 index 0000000..6be26c7 --- /dev/null +++ b/blog/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class BlogConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "blog" diff --git a/blog/migrations/0001_initial.py b/blog/migrations/0001_initial.py new file mode 100644 index 0000000..3738b58 --- /dev/null +++ b/blog/migrations/0001_initial.py @@ -0,0 +1,29 @@ +# Generated by Django 4.2 on 2023-04-13 18:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + initial = True + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="Post", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("title", models.CharField(max_length=200)), + ("author", models.CharField(max_length=200)), + ("body", models.TextField()), + ], + ), + ] diff --git a/blog/migrations/0002_alter_post_author.py b/blog/migrations/0002_alter_post_author.py new file mode 100644 index 0000000..61e2297 --- /dev/null +++ b/blog/migrations/0002_alter_post_author.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2 on 2023-04-13 18:14 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ("blog", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="post", + name="author", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL + ), + ), + ] diff --git a/blog/migrations/__init__.py b/blog/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blog/models.py b/blog/models.py new file mode 100644 index 0000000..b1f8eb8 --- /dev/null +++ b/blog/models.py @@ -0,0 +1,17 @@ +from django.db import models +from django.urls import reverse + + +class Post(models.Model): + title = models.CharField(max_length=200) + author = models.ForeignKey( + "auth.User", + on_delete=models.CASCADE, + ) + body = models.TextField() + + def __str__(self): + return self.title + + def get_absolute_url(self): + return reverse("post_detail", kwargs={"pk": self.pk}) diff --git a/blog/tests.py b/blog/tests.py new file mode 100644 index 0000000..4bafd10 --- /dev/null +++ b/blog/tests.py @@ -0,0 +1,77 @@ +from django.contrib.auth import get_user_model +from django.test import TestCase +from django.urls import reverse # new + +from .models import Post + + +class BlogTests(TestCase): + @classmethod + def setUpTestData(cls): + cls.user = get_user_model().objects.create_user( + username="testuser", email="test@email.com", password="secret" + ) + + cls.post = Post.objects.create( + title="A good title", + body="Nice body content", + author=cls.user, + ) + + def test_post_model(self): + self.assertEqual(self.post.title, "A good title") + self.assertEqual(self.post.body, "Nice body content") + self.assertEqual(self.post.author.username, "testuser") + self.assertEqual(str(self.post), "A good title") + self.assertEqual(self.post.get_absolute_url(), "/post/1/") + + def test_url_exists_at_correct_location_listview(self): # new + response = self.client.get("/") + self.assertEqual(response.status_code, 200) + + def test_url_exists_at_correct_location_detailview(self): # new + response = self.client.get("/post/1/") + self.assertEqual(response.status_code, 200) + + def test_post_listview(self): # new + response = self.client.get(reverse("home")) + self.assertEqual(response.status_code, 200) + self.assertContains(response, "Nice body content") + self.assertTemplateUsed(response, "home.html") + + def test_post_detailview(self): # new + response = self.client.get(reverse("post_detail", kwargs={"pk": self.post.pk})) + no_response = self.client.get("/post/100000/") + self.assertEqual(response.status_code, 200) + self.assertEqual(no_response.status_code, 404) + self.assertContains(response, "A good title") + self.assertTemplateUsed(response, "post_detail.html") + + def test_post_createview(self): # new + response = self.client.post( + reverse("post_new"), + { + "title": "New title", + "body": "New text", + "author": self.user.id, + }, + ) + self.assertEqual(response.status_code, 302) + self.assertEqual(Post.objects.last().title, "New title") + self.assertEqual(Post.objects.last().body, "New text") + + def test_post_updateview(self): # new + response = self.client.post( + reverse("post_edit", args="1"), + { + "title": "Updated title", + "body": "Updated text", + }, + ) + self.assertEqual(response.status_code, 302) + self.assertEqual(Post.objects.last().title, "Updated title") + self.assertEqual(Post.objects.last().body, "Updated text") + + def test_post_deleteview(self): # new + response = self.client.post(reverse("post_delete", args="1")) + self.assertEqual(response.status_code, 302) diff --git a/blog/urls.py b/blog/urls.py new file mode 100644 index 0000000..6c039bd --- /dev/null +++ b/blog/urls.py @@ -0,0 +1,16 @@ +from django.urls import path +from .views import ( + BlogListView, + BlogDetailView, + BlogCreateView, + BlogUpdateView, + BlogDeleteView, # new +) + +urlpatterns = [ + path("post/new/", BlogCreateView.as_view(), name="post_new"), + path("post//", BlogDetailView.as_view(), name="post_detail"), + path("post//edit/", BlogUpdateView.as_view(), name="post_edit"), + path("post//delete/", BlogDeleteView.as_view(), name="post_delete"), # new + path("", BlogListView.as_view(), name="home"), +] diff --git a/blog/views.py b/blog/views.py new file mode 100644 index 0000000..018d555 --- /dev/null +++ b/blog/views.py @@ -0,0 +1,33 @@ +from django.views.generic import ListView, DetailView +from django.views.generic.edit import CreateView, UpdateView, DeleteView # new +from django.urls import reverse_lazy # new + +from .models import Post + + +class BlogListView(ListView): + model = Post + template_name = "home.html" + + +class BlogDetailView(DetailView): + model = Post + template_name = "post_detail.html" + + +class BlogCreateView(CreateView): + model = Post + template_name = "post_new.html" + fields = ["title", "author", "body"] + + +class BlogUpdateView(UpdateView): + model = Post + template_name = "post_edit.html" + fields = ["title", "body"] + + +class BlogDeleteView(DeleteView): # new + model = Post + template_name = "post_delete.html" + success_url = reverse_lazy("home") diff --git a/django_project/__init__.py b/django_project/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/django_project/asgi.py b/django_project/asgi.py new file mode 100644 index 0000000..a3c334f --- /dev/null +++ b/django_project/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for django_project project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project.settings") + +application = get_asgi_application() diff --git a/django_project/settings.py b/django_project/settings.py new file mode 100644 index 0000000..f92e49a --- /dev/null +++ b/django_project/settings.py @@ -0,0 +1,121 @@ +from pathlib import Path +from environs import Env # new + +env = Env() # new +env.read_env() # new + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = env.str("SECRET_KEY") + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = env.bool("DEBUG", default=False) + +ALLOWED_HOSTS = ["dfb-ch9-blog.fly.dev", "localhost", "127.0.0.1"] +# CSRF_TRUSTED_ORIGINS = ["https://dfb-ch9-blog.fly.dev"] + + +# Application definition + +INSTALLED_APPS = [ + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "whitenoise.runserver_nostatic", + "django.contrib.staticfiles", + + "django_extensions", + "django_fido", + + "blog", + "accounts", +] + +MIDDLEWARE = [ + "django.middleware.security.SecurityMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "whitenoise.middleware.WhiteNoiseMiddleware", + "django.middleware.common.CommonMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", +] + +ROOT_URLCONF = "django_project.urls" + +TEMPLATES = [ + { + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [BASE_DIR / "templates"], + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + ], + }, + }, +] + +WSGI_APPLICATION = "django_project.wsgi.application" + + +# Database4444 +# https://docs.djangoproject.com/en/4.2/ref/settings/#databases + +DATABASES = { + "default": env.dj_db_url("DATABASE_URL", default="sqlite:///db.sqlite3"), +} + + +# Password validation +# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + {"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"}, + {"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"}, + {"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"}, + {"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"}, +] +AUTHENTICATION_BACKENDS = [ + 'django_fido.backends.Fido2AuthenticationBackend', + 'django.contrib.auth.backends.ModelBackend', +] +DJANGO_FIDO_USER_VERIFICATION = 'required' + + +# Internationalization +# https://docs.djangoproject.com/en/4.2/topics/i18n/ + +LANGUAGE_CODE = "en-us" +TIME_ZONE = "UTC" +USE_I18N = True +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.2/howto/static-files/ + +STATIC_URL = "static/" +STATICFILES_DIRS = [BASE_DIR / "static"] +STATIC_ROOT = BASE_DIR / "staticfiles" +STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage" # new + +# Default primary key field type +# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" + +# LOGIN_REDIRECT_URL = "admin" +# LOGOUT_REDIRECT_URL = "admin" diff --git a/django_project/urls.py b/django_project/urls.py new file mode 100644 index 0000000..cbdb886 --- /dev/null +++ b/django_project/urls.py @@ -0,0 +1,10 @@ +from django.contrib import admin +from django.urls import path, include + +urlpatterns = [ + path("admin/", admin.site.urls), + path('', include('django_fido.urls')), + # path("accounts/", include("django.contrib.auth.urls")), + # path("accounts/", include("accounts.urls")), + # path("", include("blog.urls")), +] diff --git a/django_project/wsgi.py b/django_project/wsgi.py new file mode 100644 index 0000000..1e5bb4b --- /dev/null +++ b/django_project/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for django_project project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project.settings") + +application = get_wsgi_application() diff --git a/fly.toml b/fly.toml new file mode 100644 index 0000000..d908dc6 --- /dev/null +++ b/fly.toml @@ -0,0 +1,51 @@ +# fly.toml app configuration file generated for dfb-ch9-blog on 2023-04-27T15:05:46-04:00 +# +# See https://fly.io/docs/reference/configuration/ for information about how to use this file. +# + +app = "dfb-ch9-blog" +kill_signal = "SIGINT" +kill_timeout = 5 +primary_region = "bos" +processes = [] + +[build] + +[deploy] + release_command = "python manage.py migrate" + +[env] + PORT = "8000" + +[experimental] + auto_rollback = true + +[[services]] + http_checks = [] + internal_port = 8000 + processes = ["app"] + protocol = "tcp" + script_checks = [] + [services.concurrency] + hard_limit = 25 + soft_limit = 20 + type = "connections" + + [[services.ports]] + force_https = true + handlers = ["http"] + port = 80 + + [[services.ports]] + handlers = ["tls", "http"] + port = 443 + + [[services.tcp_checks]] + grace_period = "1s" + interval = "15s" + restart_limit = 0 + timeout = "2s" + +[[statics]] + guest_path = "/code/static" + url_prefix = "/static/" diff --git a/manage.py b/manage.py new file mode 100755 index 0000000..fac3788 --- /dev/null +++ b/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project.settings") + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == "__main__": + main() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..505a152 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +Django~=4.2 +django-extensions +django-fido +dj-database-url +environs +gunicorn +Werkzeug +whitenoise \ No newline at end of file diff --git a/static/css/base.css b/static/css/base.css new file mode 100644 index 0000000..aef1d7f --- /dev/null +++ b/static/css/base.css @@ -0,0 +1,47 @@ +body { + font-family: 'Source Sans Pro', sans-serif; + font-size: 18px; +} + +header { + border-bottom: 1px solid #999; + margin-bottom: 2rem; + display: flex; +} + +header h1 a { + color: red; + text-decoration: none; +} + +.nav-left { + margin-right: auto; +} + +.nav-right { + display: flex; + padding-top: 2rem; +} + +.post-entry { + margin-bottom: 2rem; +} + +.post-entry h2 { + margin: 0.5rem 0; +} + +.post-entry h2 a, +.post-entry h2 a:visited { + color: blue; + text-decoration: none; +} + +.post-entry p { + margin: 0; + font-weight: 400; +} + +.post-entry h2 a:hover { + color: red; +} \ No newline at end of file diff --git a/staticfiles/admin/css/autocomplete.4a81fc4242d0.css b/staticfiles/admin/css/autocomplete.4a81fc4242d0.css new file mode 100644 index 0000000..69c94e7 --- /dev/null +++ b/staticfiles/admin/css/autocomplete.4a81fc4242d0.css @@ -0,0 +1,275 @@ +select.admin-autocomplete { + width: 20em; +} + +.select2-container--admin-autocomplete.select2-container { + min-height: 30px; +} + +.select2-container--admin-autocomplete .select2-selection--single, +.select2-container--admin-autocomplete .select2-selection--multiple { + min-height: 30px; + padding: 0; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection, +.select2-container--admin-autocomplete.select2-container--open .select2-selection { + border-color: var(--body-quiet-color); + min-height: 30px; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--single, +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--single { + padding: 0; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--multiple, +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--multiple { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-selection--single { + background-color: var(--body-bg); + border: 1px solid var(--border-color); + border-radius: 4px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered { + color: var(--body-fg); + line-height: 30px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder { + color: var(--body-quiet-color); +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single { + background-color: var(--darkened-bg); + cursor: default; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; +} + +.select2-container--admin-autocomplete.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple { + background-color: var(--body-bg); + border: 1px solid var(--border-color); + border-radius: 4px; + cursor: text; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 10px 5px 5px; + width: 100%; + display: flex; + flex-wrap: wrap; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li { + list-style: none; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder { + color: var(--body-quiet-color); + margin-top: 5px; + float: left; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin: 5px; + position: absolute; + right: 0; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice { + background-color: var(--darkened-bg); + border: 1px solid var(--border-color); + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove { + color: var(--body-quiet-color); + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover { + color: var(--body-fg); +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple { + border: solid var(--body-quiet-color) 1px; + outline: 0; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple { + background-color: var(--darkened-bg); + cursor: default; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection__choice__remove { + display: none; +} + +.select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.select2-container--admin-autocomplete .select2-search--dropdown { + background: var(--darkened-bg); +} + +.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field { + background: var(--body-bg); + color: var(--body-fg); + border: 1px solid var(--border-color); + border-radius: 4px; +} + +.select2-container--admin-autocomplete .select2-search--inline .select2-search__field { + background: transparent; + color: var(--body-fg); + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; +} + +.select2-container--admin-autocomplete .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; + color: var(--body-fg); + background: var(--body-bg); +} + +.select2-container--admin-autocomplete .select2-results__option[role=group] { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] { + color: var(--body-quiet-color); +} + +.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] { + background-color: var(--selected-bg); + color: var(--body-fg); +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option { + padding-left: 1em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; +} + +.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] { + background-color: var(--primary); + color: var(--primary-fg); +} + +.select2-container--admin-autocomplete .select2-results__group { + cursor: default; + display: block; + padding: 6px; +} diff --git a/staticfiles/admin/css/autocomplete.4a81fc4242d0.css.gz b/staticfiles/admin/css/autocomplete.4a81fc4242d0.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..7cd12df9483ef372338842a86eb0aedf148d04aa GIT binary patch literal 1147 zcmV->1cdt^iwFP!00002|J_;ZZsRBv{@-s>)U8MMhPG4T({S@nSql zcD3)m*kIxdPU7p#Y=5K)V9s}L-#OrvFcQkI2=8eOQ6_oF_X#7CfPe0Q`a4i8BOk0h zvVXn%_wMd%T0F3VA&(`ZF%b~9A8xNQ+vN)*LU)n$!K0TPd+Z79GX0cDY7Vo#os*s-NiDBuFCRUv0w_}~W;e?S;; ze1d;vlt?}P=j&MS^wD*^BYRk(TbQxW?5@2ObPFlmi19%xgR7PdQ24PEJd3d-+Jc=4 zG98aTcu0;Q<&0vx>Kv!FrBEPDv(yJqQ}KmkYO@g}R>BB2%Ct4umKrc6at0Q2q6!&7 zC3%LKNOMdHr?DhLgV{2U6bzB0F(XPoJQ#QZXLv?<2}2=?lnl%8*LY?&C`br?Fd$0j zte!1_^OWZ6e1HNKb(ti3T=Jv{Mg2?Y$Lw!g{bu#CMjkl%`t!@n3y=cEX@XRQ%C7IV zgh}Oz5npFlZNliYR;j0w33xiCsuuH1h?A}QvG%^0!hpn1DXB-HeaH+KHiWC2Ol`L` zQ2H>?cTC0GCn4FV_c3W?GA37M8R6B))Fx~OTrOy2^}#en0aNrfn5HojA0#IDOw}df zV6sK3f-HdWn(x#eigHdqhVO}W&;Bkt8iP#@m9;vRB_HaTITM#)EQ>HX z!h=AH;PTI9lxMW$l$MS&itk_Xo0Y;^b{G-&hdfOWRgIhVwOS`^HJwwhh|{n?t52Be zwlK8ZS#i3t#oE<1tlI}{JvO`9@4J+z11|tvZP_l+pKEi-ps&Z&F2K*8o5^kxtauI zpZl41!(<4uPL2&qIQQ^8lex>sUm#s(`~GPOUd__>}6IAH(8syvET{jhq#qu?&O+6 zQe$Sb*;2xACxH5q?ZOr1&$wi*)xVn+YaNVl(CU1Ut8%YB3PwoTwz^6+VZjHL5G9F1 zgW{0rLu!F(khX%PDsEHotu?gS@Fb7y)E2j+y(?aM_Jva3hNL4I ziT1nTjJ)OhC-2j|Bxnjif+AZz-lWLL`+PUXPT_j8A-t=OmW!`u+jw-{6E#Pe{^+6C zi`W4|+Y?1tIKg;JL#Y|2ek)xVrVVkmyuF5?U%Amg{(9(psrBeq>*+UAtCzk{ZhhDP z2Yq`PV(m7>^E8HlFj5tj .select2-results__options { + max-height: 200px; + overflow-y: auto; + color: var(--body-fg); + background: var(--body-bg); +} + +.select2-container--admin-autocomplete .select2-results__option[role=group] { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] { + color: var(--body-quiet-color); +} + +.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] { + background-color: var(--selected-bg); + color: var(--body-fg); +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option { + padding-left: 1em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; +} + +.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] { + background-color: var(--primary); + color: var(--primary-fg); +} + +.select2-container--admin-autocomplete .select2-results__group { + cursor: default; + display: block; + padding: 6px; +} diff --git a/staticfiles/admin/css/autocomplete.css.gz b/staticfiles/admin/css/autocomplete.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..7cd12df9483ef372338842a86eb0aedf148d04aa GIT binary patch literal 1147 zcmV->1cdt^iwFP!00002|J_;ZZsRBv{@-s>)U8MMhPG4T({S@nSql zcD3)m*kIxdPU7p#Y=5K)V9s}L-#OrvFcQkI2=8eOQ6_oF_X#7CfPe0Q`a4i8BOk0h zvVXn%_wMd%T0F3VA&(`ZF%b~9A8xNQ+vN)*LU)n$!K0TPd+Z79GX0cDY7Vo#os*s-NiDBuFCRUv0w_}~W;e?S;; ze1d;vlt?}P=j&MS^wD*^BYRk(TbQxW?5@2ObPFlmi19%xgR7PdQ24PEJd3d-+Jc=4 zG98aTcu0;Q<&0vx>Kv!FrBEPDv(yJqQ}KmkYO@g}R>BB2%Ct4umKrc6at0Q2q6!&7 zC3%LKNOMdHr?DhLgV{2U6bzB0F(XPoJQ#QZXLv?<2}2=?lnl%8*LY?&C`br?Fd$0j zte!1_^OWZ6e1HNKb(ti3T=Jv{Mg2?Y$Lw!g{bu#CMjkl%`t!@n3y=cEX@XRQ%C7IV zgh}Oz5npFlZNliYR;j0w33xiCsuuH1h?A}QvG%^0!hpn1DXB-HeaH+KHiWC2Ol`L` zQ2H>?cTC0GCn4FV_c3W?GA37M8R6B))Fx~OTrOy2^}#en0aNrfn5HojA0#IDOw}df zV6sK3f-HdWn(x#eigHdqhVO}W&;Bkt8iP#@m9;vRB_HaTITM#)EQ>HX z!h=AH;PTI9lxMW$l$MS&itk_Xo0Y;^b{G-&hdfOWRgIhVwOS`^HJwwhh|{n?t52Be zwlK8ZS#i3t#oE<1tlI}{JvO`9@4J+z11|tvZP_l+pKEi-ps&Z&F2K*8o5^kxtauI zpZl41!(<4uPL2&qIQQ^8lex>sUm#s(`~GPOUd__>}6IAH(8syvET{jhq#qu?&O+6 zQe$Sb*;2xACxH5q?ZOr1&$wi*)xVn+YaNVl(CU1Ut8%YB3PwoTwz^6+VZjHL5G9F1 zgW{0rLu!F(khX%PDsEHotu?gS@Fb7y)E2j+y(?aM_Jva3hNL4I ziT1nTjJ)OhC-2j|Bxnjif+AZz-lWLL`+PUXPT_j8A-t=OmW!`u+jw-{6E#Pe{^+6C zi`W4|+Y?1tIKg;JL#Y|2ek)xVrVVkmyuF5?U%Amg{(9(psrBeq>*+UAtCzk{ZhhDP z2Yq`PV(m7>^E8HlFj5tj li { + list-style-type: square; + padding: 1px 0; +} + +li ul { + margin-bottom: 0; +} + +li, dt, dd { + font-size: 0.8125rem; + line-height: 1.25rem; +} + +dt { + font-weight: bold; + margin-top: 4px; +} + +dd { + margin-left: 0; +} + +form { + margin: 0; + padding: 0; +} + +fieldset { + margin: 0; + min-width: 0; + padding: 0; + border: none; + border-top: 1px solid var(--hairline-color); +} + +blockquote { + font-size: 0.6875rem; + color: #777; + margin-left: 2px; + padding-left: 10px; + border-left: 5px solid #ddd; +} + +code, pre { + font-family: var(--font-family-monospace); + color: var(--body-quiet-color); + font-size: 0.75rem; + overflow-x: auto; +} + +pre.literal-block { + margin: 10px; + background: var(--darkened-bg); + padding: 6px 8px; +} + +code strong { + color: #930; +} + +hr { + clear: both; + color: var(--hairline-color); + background-color: var(--hairline-color); + height: 1px; + border: none; + margin: 0; + padding: 0; + line-height: 1px; +} + +/* TEXT STYLES & MODIFIERS */ + +.small { + font-size: 0.6875rem; +} + +.mini { + font-size: 0.625rem; +} + +.help, p.help, form p.help, div.help, form div.help, div.help li { + font-size: 0.6875rem; + color: var(--body-quiet-color); +} + +div.help ul { + margin-bottom: 0; +} + +.help-tooltip { + cursor: help; +} + +p img, h1 img, h2 img, h3 img, h4 img, td img { + vertical-align: middle; +} + +.quiet, a.quiet:link, a.quiet:visited { + color: var(--body-quiet-color); + font-weight: normal; +} + +.clear { + clear: both; +} + +.nowrap { + white-space: nowrap; +} + +.hidden { + display: none !important; +} + +/* TABLES */ + +table { + border-collapse: collapse; + border-color: var(--border-color); +} + +td, th { + font-size: 0.8125rem; + line-height: 1rem; + border-bottom: 1px solid var(--hairline-color); + vertical-align: top; + padding: 8px; +} + +th { + font-weight: 600; + text-align: left; +} + +thead th, +tfoot td { + color: var(--body-quiet-color); + padding: 5px 10px; + font-size: 0.6875rem; + background: var(--body-bg); + border: none; + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); +} + +tfoot td { + border-bottom: none; + border-top: 1px solid var(--hairline-color); +} + +thead th.required { + color: var(--body-loud-color); +} + +tr.alt { + background: var(--darkened-bg); +} + +tr:nth-child(odd), .row-form-errors { + background: var(--body-bg); +} + +tr:nth-child(even), +tr:nth-child(even) .errorlist, +tr:nth-child(odd) + .row-form-errors, +tr:nth-child(odd) + .row-form-errors .errorlist { + background: var(--darkened-bg); +} + +/* SORTABLE TABLES */ + +thead th { + padding: 5px 10px; + line-height: normal; + text-transform: uppercase; + background: var(--darkened-bg); +} + +thead th a:link, thead th a:visited { + color: var(--body-quiet-color); +} + +thead th.sorted { + background: var(--selected-bg); +} + +thead th.sorted .text { + padding-right: 42px; +} + +table thead th .text span { + padding: 8px 10px; + display: block; +} + +table thead th .text a { + display: block; + cursor: pointer; + padding: 8px 10px; +} + +table thead th .text a:focus, table thead th .text a:hover { + background: var(--selected-bg); +} + +thead th.sorted a.sortremove { + visibility: hidden; +} + +table thead th.sorted:hover a.sortremove { + visibility: visible; +} + +table thead th.sorted .sortoptions { + display: block; + padding: 9px 5px 0 5px; + float: right; + text-align: right; +} + +table thead th.sorted .sortpriority { + font-size: .8em; + min-width: 12px; + text-align: center; + vertical-align: 3px; + margin-left: 2px; + margin-right: 2px; +} + +table thead th.sorted .sortoptions a { + position: relative; + width: 14px; + height: 14px; + display: inline-block; + background: url("../img/sorting-icons.3a097b59f104.svg") 0 0 no-repeat; + background-size: 14px auto; +} + +table thead th.sorted .sortoptions a.sortremove { + background-position: 0 0; +} + +table thead th.sorted .sortoptions a.sortremove:after { + content: '\\'; + position: absolute; + top: -6px; + left: 3px; + font-weight: 200; + font-size: 1.125rem; + color: var(--body-quiet-color); +} + +table thead th.sorted .sortoptions a.sortremove:focus:after, +table thead th.sorted .sortoptions a.sortremove:hover:after { + color: var(--link-fg); +} + +table thead th.sorted .sortoptions a.sortremove:focus, +table thead th.sorted .sortoptions a.sortremove:hover { + background-position: 0 -14px; +} + +table thead th.sorted .sortoptions a.ascending { + background-position: 0 -28px; +} + +table thead th.sorted .sortoptions a.ascending:focus, +table thead th.sorted .sortoptions a.ascending:hover { + background-position: 0 -42px; +} + +table thead th.sorted .sortoptions a.descending { + top: 1px; + background-position: 0 -56px; +} + +table thead th.sorted .sortoptions a.descending:focus, +table thead th.sorted .sortoptions a.descending:hover { + background-position: 0 -70px; +} + +/* FORM DEFAULTS */ + +input, textarea, select, .form-row p, form .button { + margin: 2px 0; + padding: 2px 3px; + vertical-align: middle; + font-family: var(--font-family-primary); + font-weight: normal; + font-size: 0.8125rem; +} +.form-row div.help { + padding: 2px 3px; +} + +textarea { + vertical-align: top; +} + +input[type=text], input[type=password], input[type=email], input[type=url], +input[type=number], input[type=tel], textarea, select, .vTextField { + border: 1px solid var(--border-color); + border-radius: 4px; + padding: 5px 6px; + margin-top: 0; + color: var(--body-fg); + background-color: var(--body-bg); +} + +input[type=text]:focus, input[type=password]:focus, input[type=email]:focus, +input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus, +textarea:focus, select:focus, .vTextField:focus { + border-color: var(--body-quiet-color); +} + +select { + height: 1.875rem; +} + +select[multiple] { + /* Allow HTML size attribute to override the height in the rule above. */ + height: auto; + min-height: 150px; +} + +/* FORM BUTTONS */ + +.button, input[type=submit], input[type=button], .submit-row input, a.button { + background: var(--button-bg); + padding: 10px 15px; + border: none; + border-radius: 4px; + color: var(--button-fg); + cursor: pointer; + transition: background 0.15s; +} + +a.button { + padding: 4px 5px; +} + +.button:active, input[type=submit]:active, input[type=button]:active, +.button:focus, input[type=submit]:focus, input[type=button]:focus, +.button:hover, input[type=submit]:hover, input[type=button]:hover { + background: var(--button-hover-bg); +} + +.button[disabled], input[type=submit][disabled], input[type=button][disabled] { + opacity: 0.4; +} + +.button.default, input[type=submit].default, .submit-row input.default { + border: none; + font-weight: 400; + background: var(--default-button-bg); +} + +.button.default:active, input[type=submit].default:active, +.button.default:focus, input[type=submit].default:focus, +.button.default:hover, input[type=submit].default:hover { + background: var(--default-button-hover-bg); +} + +.button[disabled].default, +input[type=submit][disabled].default, +input[type=button][disabled].default { + opacity: 0.4; +} + + +/* MODULES */ + +.module { + border: none; + margin-bottom: 30px; + background: var(--body-bg); +} + +.module p, .module ul, .module h3, .module h4, .module dl, .module pre { + padding-left: 10px; + padding-right: 10px; +} + +.module blockquote { + margin-left: 12px; +} + +.module ul, .module ol { + margin-left: 1.5em; +} + +.module h3 { + margin-top: .6em; +} + +.module h2, .module caption, .inline-group h2 { + margin: 0; + padding: 8px; + font-weight: 400; + font-size: 0.8125rem; + text-align: left; + background: var(--primary); + color: var(--header-link-color); +} + +.module caption, +.inline-group h2 { + font-size: 0.75rem; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +.module table { + border-collapse: collapse; +} + +/* MESSAGES & ERRORS */ + +ul.messagelist { + padding: 0; + margin: 0; +} + +ul.messagelist li { + display: block; + font-weight: 400; + font-size: 0.8125rem; + padding: 10px 10px 10px 65px; + margin: 0 0 10px 0; + background: var(--message-success-bg) url("../img/icon-yes.d2f9f035226a.svg") 40px 12px no-repeat; + background-size: 16px auto; + color: var(--body-fg); + word-break: break-word; +} + +ul.messagelist li.warning { + background: var(--message-warning-bg) url("../img/icon-alert.034cc7d8a67f.svg") 40px 14px no-repeat; + background-size: 14px auto; +} + +ul.messagelist li.error { + background: var(--message-error-bg) url("../img/icon-no.439e821418cd.svg") 40px 12px no-repeat; + background-size: 16px auto; +} + +.errornote { + font-size: 0.875rem; + font-weight: 700; + display: block; + padding: 10px 12px; + margin: 0 0 10px 0; + color: var(--error-fg); + border: 1px solid var(--error-fg); + border-radius: 4px; + background-color: var(--body-bg); + background-position: 5px 12px; + overflow-wrap: break-word; +} + +ul.errorlist { + margin: 0 0 4px; + padding: 0; + color: var(--error-fg); + background: var(--body-bg); +} + +ul.errorlist li { + font-size: 0.8125rem; + display: block; + margin-bottom: 4px; + overflow-wrap: break-word; +} + +ul.errorlist li:first-child { + margin-top: 0; +} + +ul.errorlist li a { + color: inherit; + text-decoration: underline; +} + +td ul.errorlist { + margin: 0; + padding: 0; +} + +td ul.errorlist li { + margin: 0; +} + +.form-row.errors { + margin: 0; + border: none; + border-bottom: 1px solid var(--hairline-color); + background: none; +} + +.form-row.errors ul.errorlist li { + padding-left: 0; +} + +.errors input, .errors select, .errors textarea, +td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { + border: 1px solid var(--error-fg); +} + +.description { + font-size: 0.75rem; + padding: 5px 0 0 12px; +} + +/* BREADCRUMBS */ + +div.breadcrumbs { + background: var(--breadcrumbs-bg); + padding: 10px 40px; + border: none; + color: var(--breadcrumbs-fg); + text-align: left; +} + +div.breadcrumbs a { + color: var(--breadcrumbs-link-fg); +} + +div.breadcrumbs a:focus, div.breadcrumbs a:hover { + color: var(--breadcrumbs-fg); +} + +/* ACTION ICONS */ + +.viewlink, .inlineviewlink { + padding-left: 16px; + background: url("../img/icon-viewlink.41eb31f7826e.svg") 0 1px no-repeat; +} + +.addlink { + padding-left: 16px; + background: url("../img/icon-addlink.d519b3bab011.svg") 0 1px no-repeat; +} + +.changelink, .inlinechangelink { + padding-left: 16px; + background: url("../img/icon-changelink.18d2fd706348.svg") 0 1px no-repeat; +} + +.deletelink { + padding-left: 16px; + background: url("../img/icon-deletelink.564ef9dc3854.svg") 0 1px no-repeat; +} + +a.deletelink:link, a.deletelink:visited { + color: #CC3434; /* XXX Probably unused? */ +} + +a.deletelink:focus, a.deletelink:hover { + color: #993333; /* XXX Probably unused? */ + text-decoration: none; +} + +/* OBJECT TOOLS */ + +.object-tools { + font-size: 0.625rem; + font-weight: bold; + padding-left: 0; + float: right; + position: relative; + margin-top: -48px; +} + +.object-tools li { + display: block; + float: left; + margin-left: 5px; + height: 1rem; +} + +.object-tools a { + border-radius: 15px; +} + +.object-tools a:link, .object-tools a:visited { + display: block; + float: left; + padding: 3px 12px; + background: var(--object-tools-bg); + color: var(--object-tools-fg); + font-weight: 400; + font-size: 0.6875rem; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.object-tools a:focus, .object-tools a:hover { + background-color: var(--object-tools-hover-bg); +} + +.object-tools a:focus{ + text-decoration: none; +} + +.object-tools a.viewsitelink, .object-tools a.addlink { + background-repeat: no-repeat; + background-position: right 7px center; + padding-right: 26px; +} + +.object-tools a.viewsitelink { + background-image: url("../img/tooltag-arrowright.bbfb788a849e.svg"); +} + +.object-tools a.addlink { + background-image: url("../img/tooltag-add.e59d620a9742.svg"); +} + +/* OBJECT HISTORY */ + +#change-history table { + width: 100%; +} + +#change-history table tbody th { + width: 16em; +} + +#change-history .paginator { + color: var(--body-quiet-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--body-bg); + overflow: hidden; +} + +/* PAGE STRUCTURE */ + +#container { + position: relative; + width: 100%; + min-width: 980px; + padding: 0; + display: flex; + flex-direction: column; + height: 100%; +} + +#container > div { + flex-shrink: 0; +} + +#container > .main { + display: flex; + flex: 1 0 auto; +} + +.main > .content { + flex: 1 0; + max-width: 100%; +} + +.skip-to-content-link { + position: absolute; + top: -999px; + margin: 5px; + padding: 5px; + background: var(--body-bg); + z-index: 1; +} + +.skip-to-content-link:focus { + left: 0px; + top: 0px; +} + +#content { + padding: 20px 40px; +} + +.dashboard #content { + width: 600px; +} + +#content-main { + float: left; + width: 100%; +} + +#content-related { + float: right; + width: 260px; + position: relative; + margin-right: -300px; +} + +#footer { + clear: both; + padding: 10px; +} + +/* COLUMN TYPES */ + +.colMS { + margin-right: 300px; +} + +.colSM { + margin-left: 300px; +} + +.colSM #content-related { + float: left; + margin-right: 0; + margin-left: -300px; +} + +.colSM #content-main { + float: right; +} + +.popup .colM { + width: auto; +} + +/* HEADER */ + +#header { + width: auto; + height: auto; + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 40px; + background: var(--header-bg); + color: var(--header-color); + overflow: hidden; +} + +#header a:link, #header a:visited, #logout-form button { + color: var(--header-link-color); +} + +#header a:focus , #header a:hover { + text-decoration: underline; +} + +#branding { + display: flex; +} + +#branding h1 { + padding: 0; + margin: 0; + margin-inline-end: 20px; + font-weight: 300; + font-size: 1.5rem; + color: var(--header-branding-color); +} + +#branding h1 a:link, #branding h1 a:visited { + color: var(--accent); +} + +#branding h2 { + padding: 0 10px; + font-size: 0.875rem; + margin: -8px 0 8px 0; + font-weight: normal; + color: var(--header-color); +} + +#branding a:hover { + text-decoration: none; +} + +#logout-form { + display: inline; +} + +#logout-form button { + background: none; + border: 0; + cursor: pointer; + font-family: var(--font-family-primary); +} + +#user-tools { + float: right; + margin: 0 0 0 20px; + text-align: right; +} + +#user-tools, #logout-form button{ + padding: 0; + font-weight: 300; + font-size: 0.6875rem; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +#user-tools a, #logout-form button { + border-bottom: 1px solid rgba(255, 255, 255, 0.25); +} + +#user-tools a:focus, #user-tools a:hover, +#logout-form button:active, #logout-form button:hover { + text-decoration: none; + border-bottom: 0; +} + +#logout-form button:active, #logout-form button:hover { + margin-bottom: 1px; +} + +/* SIDEBAR */ + +#content-related { + background: var(--darkened-bg); +} + +#content-related .module { + background: none; +} + +#content-related h3 { + color: var(--body-quiet-color); + padding: 0 16px; + margin: 0 0 16px; +} + +#content-related h4 { + font-size: 0.8125rem; +} + +#content-related p { + padding-left: 16px; + padding-right: 16px; +} + +#content-related .actionlist { + padding: 0; + margin: 16px; +} + +#content-related .actionlist li { + line-height: 1.2; + margin-bottom: 10px; + padding-left: 18px; +} + +#content-related .module h2 { + background: none; + padding: 16px; + margin-bottom: 16px; + border-bottom: 1px solid var(--hairline-color); + font-size: 1.125rem; + color: var(--body-fg); +} + +.delete-confirmation form input[type="submit"] { + background: var(--delete-button-bg); + border-radius: 4px; + padding: 10px 15px; + color: var(--button-fg); +} + +.delete-confirmation form input[type="submit"]:active, +.delete-confirmation form input[type="submit"]:focus, +.delete-confirmation form input[type="submit"]:hover { + background: var(--delete-button-hover-bg); +} + +.delete-confirmation form .cancel-link { + display: inline-block; + vertical-align: middle; + height: 0.9375rem; + line-height: 0.9375rem; + border-radius: 4px; + padding: 10px 15px; + color: var(--button-fg); + background: var(--close-button-bg); + margin: 0 0 0 10px; +} + +.delete-confirmation form .cancel-link:active, +.delete-confirmation form .cancel-link:focus, +.delete-confirmation form .cancel-link:hover { + background: var(--close-button-hover-bg); +} + +/* POPUP */ +.popup #content { + padding: 20px; +} + +.popup #container { + min-width: 0; +} + +.popup #header { + padding: 10px 20px; +} + +/* PAGINATOR */ + +.paginator { + font-size: 0.8125rem; + padding-top: 10px; + padding-bottom: 10px; + line-height: 22px; + margin: 0; + border-top: 1px solid var(--hairline-color); + width: 100%; +} + +.paginator a:link, .paginator a:visited { + padding: 2px 6px; + background: var(--button-bg); + text-decoration: none; + color: var(--button-fg); +} + +.paginator a.showall { + border: none; + background: none; + color: var(--link-fg); +} + +.paginator a.showall:focus, .paginator a.showall:hover { + background: none; + color: var(--link-hover-color); +} + +.paginator .end { + margin-right: 6px; +} + +.paginator .this-page { + padding: 2px 6px; + font-weight: bold; + font-size: 0.8125rem; + vertical-align: top; +} + +.paginator a:focus, .paginator a:hover { + color: white; + background: var(--link-hover-color); +} + +.base-svgs { + display: none; +} diff --git a/staticfiles/admin/css/base.64976e0f7339.css.gz b/staticfiles/admin/css/base.64976e0f7339.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..e8dc26868dcd27e4b696d8f80e542d9519147a35 GIT binary patch literal 4847 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 VtEXjUdo_=T{1?{Nq!w*c004R}R*e7v literal 0 HcmV?d00001 diff --git a/staticfiles/admin/css/base.css b/staticfiles/admin/css/base.css new file mode 100644 index 0000000..72f4ae1 --- /dev/null +++ b/staticfiles/admin/css/base.css @@ -0,0 +1,1138 @@ +/* + DJANGO Admin styles +*/ + +/* VARIABLE DEFINITIONS */ +html[data-theme="light"], +:root { + --primary: #79aec8; + --secondary: #417690; + --accent: #f5dd5d; + --primary-fg: #fff; + + --body-fg: #333; + --body-bg: #fff; + --body-quiet-color: #666; + --body-loud-color: #000; + + --header-color: #ffc; + --header-branding-color: var(--accent); + --header-bg: var(--secondary); + --header-link-color: var(--primary-fg); + + --breadcrumbs-fg: #c4dce8; + --breadcrumbs-link-fg: var(--body-bg); + --breadcrumbs-bg: var(--primary); + + --link-fg: #417893; + --link-hover-color: #036; + --link-selected-fg: #5b80b2; + + --hairline-color: #e8e8e8; + --border-color: #ccc; + + --error-fg: #ba2121; + + --message-success-bg: #dfd; + --message-warning-bg: #ffc; + --message-error-bg: #ffefef; + + --darkened-bg: #f8f8f8; /* A bit darker than --body-bg */ + --selected-bg: #e4e4e4; /* E.g. selected table cells */ + --selected-row: #ffc; + + --button-fg: #fff; + --button-bg: var(--primary); + --button-hover-bg: #609ab6; + --default-button-bg: var(--secondary); + --default-button-hover-bg: #205067; + --close-button-bg: #747474; + --close-button-hover-bg: #333; + --delete-button-bg: #ba2121; + --delete-button-hover-bg: #a41515; + + --object-tools-fg: var(--button-fg); + --object-tools-bg: var(--close-button-bg); + --object-tools-hover-bg: var(--close-button-hover-bg); + + --font-family-primary: + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + system-ui, + Roboto, + "Helvetica Neue", + Arial, + sans-serif, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol", + "Noto Color Emoji"; + --font-family-monospace: + ui-monospace, + Menlo, + Monaco, + "Cascadia Mono", + "Segoe UI Mono", + "Roboto Mono", + "Oxygen Mono", + "Ubuntu Monospace", + "Source Code Pro", + "Fira Mono", + "Droid Sans Mono", + "Courier New", + monospace, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol", + "Noto Color Emoji"; +} + +html, body { + height: 100%; +} + +body { + margin: 0; + padding: 0; + font-size: 0.875rem; + font-family: var(--font-family-primary); + color: var(--body-fg); + background: var(--body-bg); +} + +/* LINKS */ + +a:link, a:visited { + color: var(--link-fg); + text-decoration: none; + transition: color 0.15s, background 0.15s; +} + +a:focus, a:hover { + color: var(--link-hover-color); +} + +a:focus { + text-decoration: underline; +} + +a img { + border: none; +} + +a.section:link, a.section:visited { + color: var(--header-link-color); + text-decoration: none; +} + +a.section:focus, a.section:hover { + text-decoration: underline; +} + +/* GLOBAL DEFAULTS */ + +p, ol, ul, dl { + margin: .2em 0 .8em 0; +} + +p { + padding: 0; + line-height: 140%; +} + +h1,h2,h3,h4,h5 { + font-weight: bold; +} + +h1 { + margin: 0 0 20px; + font-weight: 300; + font-size: 1.25rem; + color: var(--body-quiet-color); +} + +h2 { + font-size: 1rem; + margin: 1em 0 .5em 0; +} + +h2.subhead { + font-weight: normal; + margin-top: 0; +} + +h3 { + font-size: 0.875rem; + margin: .8em 0 .3em 0; + color: var(--body-quiet-color); + font-weight: bold; +} + +h4 { + font-size: 0.75rem; + margin: 1em 0 .8em 0; + padding-bottom: 3px; +} + +h5 { + font-size: 0.625rem; + margin: 1.5em 0 .5em 0; + color: var(--body-quiet-color); + text-transform: uppercase; + letter-spacing: 1px; +} + +ul > li { + list-style-type: square; + padding: 1px 0; +} + +li ul { + margin-bottom: 0; +} + +li, dt, dd { + font-size: 0.8125rem; + line-height: 1.25rem; +} + +dt { + font-weight: bold; + margin-top: 4px; +} + +dd { + margin-left: 0; +} + +form { + margin: 0; + padding: 0; +} + +fieldset { + margin: 0; + min-width: 0; + padding: 0; + border: none; + border-top: 1px solid var(--hairline-color); +} + +blockquote { + font-size: 0.6875rem; + color: #777; + margin-left: 2px; + padding-left: 10px; + border-left: 5px solid #ddd; +} + +code, pre { + font-family: var(--font-family-monospace); + color: var(--body-quiet-color); + font-size: 0.75rem; + overflow-x: auto; +} + +pre.literal-block { + margin: 10px; + background: var(--darkened-bg); + padding: 6px 8px; +} + +code strong { + color: #930; +} + +hr { + clear: both; + color: var(--hairline-color); + background-color: var(--hairline-color); + height: 1px; + border: none; + margin: 0; + padding: 0; + line-height: 1px; +} + +/* TEXT STYLES & MODIFIERS */ + +.small { + font-size: 0.6875rem; +} + +.mini { + font-size: 0.625rem; +} + +.help, p.help, form p.help, div.help, form div.help, div.help li { + font-size: 0.6875rem; + color: var(--body-quiet-color); +} + +div.help ul { + margin-bottom: 0; +} + +.help-tooltip { + cursor: help; +} + +p img, h1 img, h2 img, h3 img, h4 img, td img { + vertical-align: middle; +} + +.quiet, a.quiet:link, a.quiet:visited { + color: var(--body-quiet-color); + font-weight: normal; +} + +.clear { + clear: both; +} + +.nowrap { + white-space: nowrap; +} + +.hidden { + display: none !important; +} + +/* TABLES */ + +table { + border-collapse: collapse; + border-color: var(--border-color); +} + +td, th { + font-size: 0.8125rem; + line-height: 1rem; + border-bottom: 1px solid var(--hairline-color); + vertical-align: top; + padding: 8px; +} + +th { + font-weight: 600; + text-align: left; +} + +thead th, +tfoot td { + color: var(--body-quiet-color); + padding: 5px 10px; + font-size: 0.6875rem; + background: var(--body-bg); + border: none; + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); +} + +tfoot td { + border-bottom: none; + border-top: 1px solid var(--hairline-color); +} + +thead th.required { + color: var(--body-loud-color); +} + +tr.alt { + background: var(--darkened-bg); +} + +tr:nth-child(odd), .row-form-errors { + background: var(--body-bg); +} + +tr:nth-child(even), +tr:nth-child(even) .errorlist, +tr:nth-child(odd) + .row-form-errors, +tr:nth-child(odd) + .row-form-errors .errorlist { + background: var(--darkened-bg); +} + +/* SORTABLE TABLES */ + +thead th { + padding: 5px 10px; + line-height: normal; + text-transform: uppercase; + background: var(--darkened-bg); +} + +thead th a:link, thead th a:visited { + color: var(--body-quiet-color); +} + +thead th.sorted { + background: var(--selected-bg); +} + +thead th.sorted .text { + padding-right: 42px; +} + +table thead th .text span { + padding: 8px 10px; + display: block; +} + +table thead th .text a { + display: block; + cursor: pointer; + padding: 8px 10px; +} + +table thead th .text a:focus, table thead th .text a:hover { + background: var(--selected-bg); +} + +thead th.sorted a.sortremove { + visibility: hidden; +} + +table thead th.sorted:hover a.sortremove { + visibility: visible; +} + +table thead th.sorted .sortoptions { + display: block; + padding: 9px 5px 0 5px; + float: right; + text-align: right; +} + +table thead th.sorted .sortpriority { + font-size: .8em; + min-width: 12px; + text-align: center; + vertical-align: 3px; + margin-left: 2px; + margin-right: 2px; +} + +table thead th.sorted .sortoptions a { + position: relative; + width: 14px; + height: 14px; + display: inline-block; + background: url(../img/sorting-icons.svg) 0 0 no-repeat; + background-size: 14px auto; +} + +table thead th.sorted .sortoptions a.sortremove { + background-position: 0 0; +} + +table thead th.sorted .sortoptions a.sortremove:after { + content: '\\'; + position: absolute; + top: -6px; + left: 3px; + font-weight: 200; + font-size: 1.125rem; + color: var(--body-quiet-color); +} + +table thead th.sorted .sortoptions a.sortremove:focus:after, +table thead th.sorted .sortoptions a.sortremove:hover:after { + color: var(--link-fg); +} + +table thead th.sorted .sortoptions a.sortremove:focus, +table thead th.sorted .sortoptions a.sortremove:hover { + background-position: 0 -14px; +} + +table thead th.sorted .sortoptions a.ascending { + background-position: 0 -28px; +} + +table thead th.sorted .sortoptions a.ascending:focus, +table thead th.sorted .sortoptions a.ascending:hover { + background-position: 0 -42px; +} + +table thead th.sorted .sortoptions a.descending { + top: 1px; + background-position: 0 -56px; +} + +table thead th.sorted .sortoptions a.descending:focus, +table thead th.sorted .sortoptions a.descending:hover { + background-position: 0 -70px; +} + +/* FORM DEFAULTS */ + +input, textarea, select, .form-row p, form .button { + margin: 2px 0; + padding: 2px 3px; + vertical-align: middle; + font-family: var(--font-family-primary); + font-weight: normal; + font-size: 0.8125rem; +} +.form-row div.help { + padding: 2px 3px; +} + +textarea { + vertical-align: top; +} + +input[type=text], input[type=password], input[type=email], input[type=url], +input[type=number], input[type=tel], textarea, select, .vTextField { + border: 1px solid var(--border-color); + border-radius: 4px; + padding: 5px 6px; + margin-top: 0; + color: var(--body-fg); + background-color: var(--body-bg); +} + +input[type=text]:focus, input[type=password]:focus, input[type=email]:focus, +input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus, +textarea:focus, select:focus, .vTextField:focus { + border-color: var(--body-quiet-color); +} + +select { + height: 1.875rem; +} + +select[multiple] { + /* Allow HTML size attribute to override the height in the rule above. */ + height: auto; + min-height: 150px; +} + +/* FORM BUTTONS */ + +.button, input[type=submit], input[type=button], .submit-row input, a.button { + background: var(--button-bg); + padding: 10px 15px; + border: none; + border-radius: 4px; + color: var(--button-fg); + cursor: pointer; + transition: background 0.15s; +} + +a.button { + padding: 4px 5px; +} + +.button:active, input[type=submit]:active, input[type=button]:active, +.button:focus, input[type=submit]:focus, input[type=button]:focus, +.button:hover, input[type=submit]:hover, input[type=button]:hover { + background: var(--button-hover-bg); +} + +.button[disabled], input[type=submit][disabled], input[type=button][disabled] { + opacity: 0.4; +} + +.button.default, input[type=submit].default, .submit-row input.default { + border: none; + font-weight: 400; + background: var(--default-button-bg); +} + +.button.default:active, input[type=submit].default:active, +.button.default:focus, input[type=submit].default:focus, +.button.default:hover, input[type=submit].default:hover { + background: var(--default-button-hover-bg); +} + +.button[disabled].default, +input[type=submit][disabled].default, +input[type=button][disabled].default { + opacity: 0.4; +} + + +/* MODULES */ + +.module { + border: none; + margin-bottom: 30px; + background: var(--body-bg); +} + +.module p, .module ul, .module h3, .module h4, .module dl, .module pre { + padding-left: 10px; + padding-right: 10px; +} + +.module blockquote { + margin-left: 12px; +} + +.module ul, .module ol { + margin-left: 1.5em; +} + +.module h3 { + margin-top: .6em; +} + +.module h2, .module caption, .inline-group h2 { + margin: 0; + padding: 8px; + font-weight: 400; + font-size: 0.8125rem; + text-align: left; + background: var(--primary); + color: var(--header-link-color); +} + +.module caption, +.inline-group h2 { + font-size: 0.75rem; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +.module table { + border-collapse: collapse; +} + +/* MESSAGES & ERRORS */ + +ul.messagelist { + padding: 0; + margin: 0; +} + +ul.messagelist li { + display: block; + font-weight: 400; + font-size: 0.8125rem; + padding: 10px 10px 10px 65px; + margin: 0 0 10px 0; + background: var(--message-success-bg) url(../img/icon-yes.svg) 40px 12px no-repeat; + background-size: 16px auto; + color: var(--body-fg); + word-break: break-word; +} + +ul.messagelist li.warning { + background: var(--message-warning-bg) url(../img/icon-alert.svg) 40px 14px no-repeat; + background-size: 14px auto; +} + +ul.messagelist li.error { + background: var(--message-error-bg) url(../img/icon-no.svg) 40px 12px no-repeat; + background-size: 16px auto; +} + +.errornote { + font-size: 0.875rem; + font-weight: 700; + display: block; + padding: 10px 12px; + margin: 0 0 10px 0; + color: var(--error-fg); + border: 1px solid var(--error-fg); + border-radius: 4px; + background-color: var(--body-bg); + background-position: 5px 12px; + overflow-wrap: break-word; +} + +ul.errorlist { + margin: 0 0 4px; + padding: 0; + color: var(--error-fg); + background: var(--body-bg); +} + +ul.errorlist li { + font-size: 0.8125rem; + display: block; + margin-bottom: 4px; + overflow-wrap: break-word; +} + +ul.errorlist li:first-child { + margin-top: 0; +} + +ul.errorlist li a { + color: inherit; + text-decoration: underline; +} + +td ul.errorlist { + margin: 0; + padding: 0; +} + +td ul.errorlist li { + margin: 0; +} + +.form-row.errors { + margin: 0; + border: none; + border-bottom: 1px solid var(--hairline-color); + background: none; +} + +.form-row.errors ul.errorlist li { + padding-left: 0; +} + +.errors input, .errors select, .errors textarea, +td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { + border: 1px solid var(--error-fg); +} + +.description { + font-size: 0.75rem; + padding: 5px 0 0 12px; +} + +/* BREADCRUMBS */ + +div.breadcrumbs { + background: var(--breadcrumbs-bg); + padding: 10px 40px; + border: none; + color: var(--breadcrumbs-fg); + text-align: left; +} + +div.breadcrumbs a { + color: var(--breadcrumbs-link-fg); +} + +div.breadcrumbs a:focus, div.breadcrumbs a:hover { + color: var(--breadcrumbs-fg); +} + +/* ACTION ICONS */ + +.viewlink, .inlineviewlink { + padding-left: 16px; + background: url(../img/icon-viewlink.svg) 0 1px no-repeat; +} + +.addlink { + padding-left: 16px; + background: url(../img/icon-addlink.svg) 0 1px no-repeat; +} + +.changelink, .inlinechangelink { + padding-left: 16px; + background: url(../img/icon-changelink.svg) 0 1px no-repeat; +} + +.deletelink { + padding-left: 16px; + background: url(../img/icon-deletelink.svg) 0 1px no-repeat; +} + +a.deletelink:link, a.deletelink:visited { + color: #CC3434; /* XXX Probably unused? */ +} + +a.deletelink:focus, a.deletelink:hover { + color: #993333; /* XXX Probably unused? */ + text-decoration: none; +} + +/* OBJECT TOOLS */ + +.object-tools { + font-size: 0.625rem; + font-weight: bold; + padding-left: 0; + float: right; + position: relative; + margin-top: -48px; +} + +.object-tools li { + display: block; + float: left; + margin-left: 5px; + height: 1rem; +} + +.object-tools a { + border-radius: 15px; +} + +.object-tools a:link, .object-tools a:visited { + display: block; + float: left; + padding: 3px 12px; + background: var(--object-tools-bg); + color: var(--object-tools-fg); + font-weight: 400; + font-size: 0.6875rem; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.object-tools a:focus, .object-tools a:hover { + background-color: var(--object-tools-hover-bg); +} + +.object-tools a:focus{ + text-decoration: none; +} + +.object-tools a.viewsitelink, .object-tools a.addlink { + background-repeat: no-repeat; + background-position: right 7px center; + padding-right: 26px; +} + +.object-tools a.viewsitelink { + background-image: url(../img/tooltag-arrowright.svg); +} + +.object-tools a.addlink { + background-image: url(../img/tooltag-add.svg); +} + +/* OBJECT HISTORY */ + +#change-history table { + width: 100%; +} + +#change-history table tbody th { + width: 16em; +} + +#change-history .paginator { + color: var(--body-quiet-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--body-bg); + overflow: hidden; +} + +/* PAGE STRUCTURE */ + +#container { + position: relative; + width: 100%; + min-width: 980px; + padding: 0; + display: flex; + flex-direction: column; + height: 100%; +} + +#container > div { + flex-shrink: 0; +} + +#container > .main { + display: flex; + flex: 1 0 auto; +} + +.main > .content { + flex: 1 0; + max-width: 100%; +} + +.skip-to-content-link { + position: absolute; + top: -999px; + margin: 5px; + padding: 5px; + background: var(--body-bg); + z-index: 1; +} + +.skip-to-content-link:focus { + left: 0px; + top: 0px; +} + +#content { + padding: 20px 40px; +} + +.dashboard #content { + width: 600px; +} + +#content-main { + float: left; + width: 100%; +} + +#content-related { + float: right; + width: 260px; + position: relative; + margin-right: -300px; +} + +#footer { + clear: both; + padding: 10px; +} + +/* COLUMN TYPES */ + +.colMS { + margin-right: 300px; +} + +.colSM { + margin-left: 300px; +} + +.colSM #content-related { + float: left; + margin-right: 0; + margin-left: -300px; +} + +.colSM #content-main { + float: right; +} + +.popup .colM { + width: auto; +} + +/* HEADER */ + +#header { + width: auto; + height: auto; + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 40px; + background: var(--header-bg); + color: var(--header-color); + overflow: hidden; +} + +#header a:link, #header a:visited, #logout-form button { + color: var(--header-link-color); +} + +#header a:focus , #header a:hover { + text-decoration: underline; +} + +#branding { + display: flex; +} + +#branding h1 { + padding: 0; + margin: 0; + margin-inline-end: 20px; + font-weight: 300; + font-size: 1.5rem; + color: var(--header-branding-color); +} + +#branding h1 a:link, #branding h1 a:visited { + color: var(--accent); +} + +#branding h2 { + padding: 0 10px; + font-size: 0.875rem; + margin: -8px 0 8px 0; + font-weight: normal; + color: var(--header-color); +} + +#branding a:hover { + text-decoration: none; +} + +#logout-form { + display: inline; +} + +#logout-form button { + background: none; + border: 0; + cursor: pointer; + font-family: var(--font-family-primary); +} + +#user-tools { + float: right; + margin: 0 0 0 20px; + text-align: right; +} + +#user-tools, #logout-form button{ + padding: 0; + font-weight: 300; + font-size: 0.6875rem; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +#user-tools a, #logout-form button { + border-bottom: 1px solid rgba(255, 255, 255, 0.25); +} + +#user-tools a:focus, #user-tools a:hover, +#logout-form button:active, #logout-form button:hover { + text-decoration: none; + border-bottom: 0; +} + +#logout-form button:active, #logout-form button:hover { + margin-bottom: 1px; +} + +/* SIDEBAR */ + +#content-related { + background: var(--darkened-bg); +} + +#content-related .module { + background: none; +} + +#content-related h3 { + color: var(--body-quiet-color); + padding: 0 16px; + margin: 0 0 16px; +} + +#content-related h4 { + font-size: 0.8125rem; +} + +#content-related p { + padding-left: 16px; + padding-right: 16px; +} + +#content-related .actionlist { + padding: 0; + margin: 16px; +} + +#content-related .actionlist li { + line-height: 1.2; + margin-bottom: 10px; + padding-left: 18px; +} + +#content-related .module h2 { + background: none; + padding: 16px; + margin-bottom: 16px; + border-bottom: 1px solid var(--hairline-color); + font-size: 1.125rem; + color: var(--body-fg); +} + +.delete-confirmation form input[type="submit"] { + background: var(--delete-button-bg); + border-radius: 4px; + padding: 10px 15px; + color: var(--button-fg); +} + +.delete-confirmation form input[type="submit"]:active, +.delete-confirmation form input[type="submit"]:focus, +.delete-confirmation form input[type="submit"]:hover { + background: var(--delete-button-hover-bg); +} + +.delete-confirmation form .cancel-link { + display: inline-block; + vertical-align: middle; + height: 0.9375rem; + line-height: 0.9375rem; + border-radius: 4px; + padding: 10px 15px; + color: var(--button-fg); + background: var(--close-button-bg); + margin: 0 0 0 10px; +} + +.delete-confirmation form .cancel-link:active, +.delete-confirmation form .cancel-link:focus, +.delete-confirmation form .cancel-link:hover { + background: var(--close-button-hover-bg); +} + +/* POPUP */ +.popup #content { + padding: 20px; +} + +.popup #container { + min-width: 0; +} + +.popup #header { + padding: 10px 20px; +} + +/* PAGINATOR */ + +.paginator { + font-size: 0.8125rem; + padding-top: 10px; + padding-bottom: 10px; + line-height: 22px; + margin: 0; + border-top: 1px solid var(--hairline-color); + width: 100%; +} + +.paginator a:link, .paginator a:visited { + padding: 2px 6px; + background: var(--button-bg); + text-decoration: none; + color: var(--button-fg); +} + +.paginator a.showall { + border: none; + background: none; + color: var(--link-fg); +} + +.paginator a.showall:focus, .paginator a.showall:hover { + background: none; + color: var(--link-hover-color); +} + +.paginator .end { + margin-right: 6px; +} + +.paginator .this-page { + padding: 2px 6px; + font-weight: bold; + font-size: 0.8125rem; + vertical-align: top; +} + +.paginator a:focus, .paginator a:hover { + color: white; + background: var(--link-hover-color); +} + +.base-svgs { + display: none; +} diff --git a/staticfiles/admin/css/base.css.gz b/staticfiles/admin/css/base.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..fa107378d2c081d0ff997822aad5f8f2a13c0929 GIT binary patch literal 4737 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 PoeudwYI * { + display: inline; +} + +#changelist-filter details > summary { + list-style-type: none; +} + +#changelist-filter details > summary::-webkit-details-marker { + display: none; +} + +#changelist-filter details > summary::before { + content: '→'; + font-weight: bold; + color: var(--link-hover-color); +} + +#changelist-filter details[open] > summary::before { + content: '↓'; +} + +#changelist-filter ul { + margin: 5px 0; + padding: 0 15px 15px; + border-bottom: 1px solid var(--hairline-color); +} + +#changelist-filter ul:last-child { + border-bottom: none; +} + +#changelist-filter li { + list-style-type: none; + margin-left: 0; + padding-left: 0; +} + +#changelist-filter a { + display: block; + color: var(--body-quiet-color); + word-break: break-word; +} + +#changelist-filter li.selected { + border-left: 5px solid var(--hairline-color); + padding-left: 10px; + margin-left: -15px; +} + +#changelist-filter li.selected a { + color: var(--link-selected-fg); +} + +#changelist-filter a:focus, #changelist-filter a:hover, +#changelist-filter li.selected a:focus, +#changelist-filter li.selected a:hover { + color: var(--link-hover-color); +} + +#changelist-filter #changelist-filter-clear a { + font-size: 0.8125rem; + padding-bottom: 10px; + border-bottom: 1px solid var(--hairline-color); +} + +/* DATE DRILLDOWN */ + +.change-list .toplinks { + display: flex; + padding-bottom: 5px; + flex-wrap: wrap; + gap: 3px 17px; + font-weight: bold; +} + +.change-list .toplinks a { + font-size: 0.8125rem; +} + +.change-list .toplinks .date-back { + color: var(--body-quiet-color); +} + +.change-list .toplinks .date-back:focus, +.change-list .toplinks .date-back:hover { + color: var(--link-hover-color); +} + +/* ACTIONS */ + +.filtered .actions { + border-right: none; +} + +#changelist table input { + margin: 0; + vertical-align: baseline; +} + +/* Once the :has() pseudo-class is supported by all browsers, the tr.selected + selector and the JS adding the class can be removed. */ +#changelist table tbody tr.selected { + background-color: var(--selected-row); +} + +#changelist table tbody tr:has(input[type=checkbox]:checked) { + background-color: var(--selected-row); +} + +#changelist .actions { + padding: 10px; + background: var(--body-bg); + border-top: none; + border-bottom: none; + line-height: 1.5rem; + color: var(--body-quiet-color); + width: 100%; +} + +#changelist .actions span.all, +#changelist .actions span.action-counter, +#changelist .actions span.clear, +#changelist .actions span.question { + font-size: 0.8125rem; + margin: 0 0.5em; +} + +#changelist .actions:last-child { + border-bottom: none; +} + +#changelist .actions select { + vertical-align: top; + height: 1.5rem; + color: var(--body-fg); + border: 1px solid var(--border-color); + border-radius: 4px; + font-size: 0.875rem; + padding: 0 0 0 4px; + margin: 0; + margin-left: 10px; +} + +#changelist .actions select:focus { + border-color: var(--body-quiet-color); +} + +#changelist .actions label { + display: inline-block; + vertical-align: middle; + font-size: 0.8125rem; +} + +#changelist .actions .button { + font-size: 0.8125rem; + border: 1px solid var(--border-color); + border-radius: 4px; + background: var(--body-bg); + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + height: 1.5rem; + line-height: 1; + padding: 4px 8px; + margin: 0; + color: var(--body-fg); +} + +#changelist .actions .button:focus, #changelist .actions .button:hover { + border-color: var(--body-quiet-color); +} diff --git a/staticfiles/admin/css/changelists.css.gz b/staticfiles/admin/css/changelists.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..f90753ce31029c3c8ff2022b5de1076c905f8b3f GIT binary patch literal 1563 zcmV+$2ITo4iwFP!00002|HW9_juST+zTc;?Kou;Chh*6mXjVm9VB2n$vJ!073&e$I z>}1?^#)Iu)lOk^W0PP$0N$S&_51CDoN)RMI{KxM<`RNnz`lpMxKVB}c-ru|jPo5qf zJ&Y5St_h=3fiFiu|G`vd4DCX&Vq|-6mk^`t6jDVt(k(-&kWg;(_gpHv+QFEoiliz8 zGD9(e5m9%9q~}Lpn@oc0J6v(GvG)*7iSYal{SYkl2jz-89vhm%JBn2jf_aCcLJ=eW zvOlz#&%d+hJU8fAClq6nt|(zxf-j|}DNo5c=$u|rridW8!64!S69ENXCt6i|^Jw_y zms0wKxErVQdA1$95(px5rsNC^9mvp{rbuxyJE~S6D$ZGi#H@A_)6ckT^EWk$foTF>&;Spe~o`8V#W9!+=exGw!PHAhvFHd>8)%UJmO06 zjlPp@f#i&0@EM865GIHUeVk|*F)og~C<{Zf}4w1%gb(9dVeGY;f_CSJXn(^Iy|8bJp;=-fikzD*(w?% z25k_B8jKh-G7v-slK{nv@)X7iiEksmHJav|v=wB*nL&YBQDmzM2C+^8L<})-sKRXq zp7L}$E6&wKk2*WwTwgC=UA%MF^}*7%ATn{d$>NapUwJ~G0`0>lR)Mh&1F|t z?XK$cTGGu&WE-(uo7YS5q}`~~)Krgs1YWkpb=XroMxcq1aYJ;7grQb7x}^&GEx0kL z5pCJ-Ni-tb`=l)Fexi8v&!2xiI`0}e;tcoX4%0qD8|Fh1+!Wvg&q(@lk{EwK8lsgK zU3L)^295m~=(Z9EcDEJpkRkmuPAJ3uee;+f7#)X14Y4i*G}WpW`^lp=CL+e;+w;lY z_((GBRVI*xkyw$IC7hIJQ+ltaVx5lAEkozU{ZgR5KGkBhI8qh59_#ti2731_%4d5e zD9hu%bM@kQSWI=7V9a!dE6uRCX=$a!1H(ku$u}1_m*CC2tL5^|^>40FHb>spsM+)K z(H5x;T>A=QrmPTDv)0=Dd}adtd83ttgQ0Mq~bF66jf-VyUsMw-k*(a`v(oJmTINs)=8TV#}0hTi8Md= zCd^v@?cQPr6ga3ms0n5LJuvH(gY`5IteQ@qH0B=uQsD-Z(}DT7QO^5%@U{sK9sT<# zG87Tk-^s&TgETf;4wi{thC!5TXYU8qH*n1V@OaRNzGh;$$HU0TOT>s}dm6RwnS)** N{soqVe!aLE007573DE!m literal 0 HcmV?d00001 diff --git a/staticfiles/admin/css/changelists.f4631a29abad.css b/staticfiles/admin/css/changelists.f4631a29abad.css new file mode 100644 index 0000000..641dccd --- /dev/null +++ b/staticfiles/admin/css/changelists.f4631a29abad.css @@ -0,0 +1,328 @@ +/* CHANGELISTS */ + +#changelist { + display: flex; + align-items: flex-start; + justify-content: space-between; +} + +#changelist .changelist-form-container { + flex: 1 1 auto; + min-width: 0; +} + +#changelist table { + width: 100%; +} + +.change-list .hiddenfields { display:none; } + +.change-list .filtered table { + border-right: none; +} + +.change-list .filtered { + min-height: 400px; +} + +.change-list .filtered .results, .change-list .filtered .paginator, +.filtered #toolbar, .filtered div.xfull { + width: auto; +} + +.change-list .filtered table tbody th { + padding-right: 1em; +} + +#changelist-form .results { + overflow-x: auto; + width: 100%; +} + +#changelist .toplinks { + border-bottom: 1px solid var(--hairline-color); +} + +#changelist .paginator { + color: var(--body-quiet-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--body-bg); + overflow: hidden; +} + +/* CHANGELIST TABLES */ + +#changelist table thead th { + padding: 0; + white-space: nowrap; + vertical-align: middle; +} + +#changelist table thead th.action-checkbox-column { + width: 1.5em; + text-align: center; +} + +#changelist table tbody td.action-checkbox { + text-align: center; +} + +#changelist table tfoot { + color: var(--body-quiet-color); +} + +/* TOOLBAR */ + +#toolbar { + padding: 8px 10px; + margin-bottom: 15px; + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--darkened-bg); + color: var(--body-quiet-color); +} + +#toolbar form input { + border-radius: 4px; + font-size: 0.875rem; + padding: 5px; + color: var(--body-fg); +} + +#toolbar #searchbar { + height: 1.1875rem; + border: 1px solid var(--border-color); + padding: 2px 5px; + margin: 0; + vertical-align: top; + font-size: 0.8125rem; + max-width: 100%; +} + +#toolbar #searchbar:focus { + border-color: var(--body-quiet-color); +} + +#toolbar form input[type="submit"] { + border: 1px solid var(--border-color); + font-size: 0.8125rem; + padding: 4px 8px; + margin: 0; + vertical-align: middle; + background: var(--body-bg); + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + color: var(--body-fg); +} + +#toolbar form input[type="submit"]:focus, +#toolbar form input[type="submit"]:hover { + border-color: var(--body-quiet-color); +} + +#changelist-search img { + vertical-align: middle; + margin-right: 4px; +} + +#changelist-search .help { + word-break: break-word; +} + +/* FILTER COLUMN */ + +#changelist-filter { + flex: 0 0 240px; + order: 1; + background: var(--darkened-bg); + border-left: none; + margin: 0 0 0 30px; +} + +#changelist-filter h2 { + font-size: 0.875rem; + text-transform: uppercase; + letter-spacing: 0.5px; + padding: 5px 15px; + margin-bottom: 12px; + border-bottom: none; +} + +#changelist-filter h3, +#changelist-filter details summary { + font-weight: 400; + padding: 0 15px; + margin-bottom: 10px; +} + +#changelist-filter details summary > * { + display: inline; +} + +#changelist-filter details > summary { + list-style-type: none; +} + +#changelist-filter details > summary::-webkit-details-marker { + display: none; +} + +#changelist-filter details > summary::before { + content: '→'; + font-weight: bold; + color: var(--link-hover-color); +} + +#changelist-filter details[open] > summary::before { + content: '↓'; +} + +#changelist-filter ul { + margin: 5px 0; + padding: 0 15px 15px; + border-bottom: 1px solid var(--hairline-color); +} + +#changelist-filter ul:last-child { + border-bottom: none; +} + +#changelist-filter li { + list-style-type: none; + margin-left: 0; + padding-left: 0; +} + +#changelist-filter a { + display: block; + color: var(--body-quiet-color); + word-break: break-word; +} + +#changelist-filter li.selected { + border-left: 5px solid var(--hairline-color); + padding-left: 10px; + margin-left: -15px; +} + +#changelist-filter li.selected a { + color: var(--link-selected-fg); +} + +#changelist-filter a:focus, #changelist-filter a:hover, +#changelist-filter li.selected a:focus, +#changelist-filter li.selected a:hover { + color: var(--link-hover-color); +} + +#changelist-filter #changelist-filter-clear a { + font-size: 0.8125rem; + padding-bottom: 10px; + border-bottom: 1px solid var(--hairline-color); +} + +/* DATE DRILLDOWN */ + +.change-list .toplinks { + display: flex; + padding-bottom: 5px; + flex-wrap: wrap; + gap: 3px 17px; + font-weight: bold; +} + +.change-list .toplinks a { + font-size: 0.8125rem; +} + +.change-list .toplinks .date-back { + color: var(--body-quiet-color); +} + +.change-list .toplinks .date-back:focus, +.change-list .toplinks .date-back:hover { + color: var(--link-hover-color); +} + +/* ACTIONS */ + +.filtered .actions { + border-right: none; +} + +#changelist table input { + margin: 0; + vertical-align: baseline; +} + +/* Once the :has() pseudo-class is supported by all browsers, the tr.selected + selector and the JS adding the class can be removed. */ +#changelist table tbody tr.selected { + background-color: var(--selected-row); +} + +#changelist table tbody tr:has(input[type=checkbox]:checked) { + background-color: var(--selected-row); +} + +#changelist .actions { + padding: 10px; + background: var(--body-bg); + border-top: none; + border-bottom: none; + line-height: 1.5rem; + color: var(--body-quiet-color); + width: 100%; +} + +#changelist .actions span.all, +#changelist .actions span.action-counter, +#changelist .actions span.clear, +#changelist .actions span.question { + font-size: 0.8125rem; + margin: 0 0.5em; +} + +#changelist .actions:last-child { + border-bottom: none; +} + +#changelist .actions select { + vertical-align: top; + height: 1.5rem; + color: var(--body-fg); + border: 1px solid var(--border-color); + border-radius: 4px; + font-size: 0.875rem; + padding: 0 0 0 4px; + margin: 0; + margin-left: 10px; +} + +#changelist .actions select:focus { + border-color: var(--body-quiet-color); +} + +#changelist .actions label { + display: inline-block; + vertical-align: middle; + font-size: 0.8125rem; +} + +#changelist .actions .button { + font-size: 0.8125rem; + border: 1px solid var(--border-color); + border-radius: 4px; + background: var(--body-bg); + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + height: 1.5rem; + line-height: 1; + padding: 4px 8px; + margin: 0; + color: var(--body-fg); +} + +#changelist .actions .button:focus, #changelist .actions .button:hover { + border-color: var(--body-quiet-color); +} diff --git a/staticfiles/admin/css/changelists.f4631a29abad.css.gz b/staticfiles/admin/css/changelists.f4631a29abad.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..f90753ce31029c3c8ff2022b5de1076c905f8b3f GIT binary patch literal 1563 zcmV+$2ITo4iwFP!00002|HW9_juST+zTc;?Kou;Chh*6mXjVm9VB2n$vJ!073&e$I z>}1?^#)Iu)lOk^W0PP$0N$S&_51CDoN)RMI{KxM<`RNnz`lpMxKVB}c-ru|jPo5qf zJ&Y5St_h=3fiFiu|G`vd4DCX&Vq|-6mk^`t6jDVt(k(-&kWg;(_gpHv+QFEoiliz8 zGD9(e5m9%9q~}Lpn@oc0J6v(GvG)*7iSYal{SYkl2jz-89vhm%JBn2jf_aCcLJ=eW zvOlz#&%d+hJU8fAClq6nt|(zxf-j|}DNo5c=$u|rridW8!64!S69ENXCt6i|^Jw_y zms0wKxErVQdA1$95(px5rsNC^9mvp{rbuxyJE~S6D$ZGi#H@A_)6ckT^EWk$foTF>&;Spe~o`8V#W9!+=exGw!PHAhvFHd>8)%UJmO06 zjlPp@f#i&0@EM865GIHUeVk|*F)og~C<{Zf}4w1%gb(9dVeGY;f_CSJXn(^Iy|8bJp;=-fikzD*(w?% z25k_B8jKh-G7v-slK{nv@)X7iiEksmHJav|v=wB*nL&YBQDmzM2C+^8L<})-sKRXq zp7L}$E6&wKk2*WwTwgC=UA%MF^}*7%ATn{d$>NapUwJ~G0`0>lR)Mh&1F|t z?XK$cTGGu&WE-(uo7YS5q}`~~)Krgs1YWkpb=XroMxcq1aYJ;7grQb7x}^&GEx0kL z5pCJ-Ni-tb`=l)Fexi8v&!2xiI`0}e;tcoX4%0qD8|Fh1+!Wvg&q(@lk{EwK8lsgK zU3L)^295m~=(Z9EcDEJpkRkmuPAJ3uee;+f7#)X14Y4i*G}WpW`^lp=CL+e;+w;lY z_((GBRVI*xkyw$IC7hIJQ+ltaVx5lAEkozU{ZgR5KGkBhI8qh59_#ti2731_%4d5e zD9hu%bM@kQSWI=7V9a!dE6uRCX=$a!1H(ku$u}1_m*CC2tL5^|^>40FHb>spsM+)K z(H5x;T>A=QrmPTDv)0=Dd}adtd83ttgQ0Mq~bF66jf-VyUsMw-k*(a`v(oJmTINs)=8TV#}0hTi8Md= zCd^v@?cQPr6ga3ms0n5LJuvH(gY`5IteQ@qH0B=uQsD-Z(}DT7QO^5%@U{sK9sT<# zG87Tk-^s&TgETf;4wi{thC!5TXYU8qH*n1V@OaRNzGh;$$HU0TOT>s}dm6RwnS)** N{soqVe!aLE007573DE!m literal 0 HcmV?d00001 diff --git a/staticfiles/admin/css/dark_mode.css b/staticfiles/admin/css/dark_mode.css new file mode 100644 index 0000000..6d08233 --- /dev/null +++ b/staticfiles/admin/css/dark_mode.css @@ -0,0 +1,137 @@ +@media (prefers-color-scheme: dark) { + :root { + --primary: #264b5d; + --primary-fg: #f7f7f7; + + --body-fg: #eeeeee; + --body-bg: #121212; + --body-quiet-color: #e0e0e0; + --body-loud-color: #ffffff; + + --breadcrumbs-link-fg: #e0e0e0; + --breadcrumbs-bg: var(--primary); + + --link-fg: #81d4fa; + --link-hover-color: #4ac1f7; + --link-selected-fg: #6f94c6; + + --hairline-color: #272727; + --border-color: #353535; + + --error-fg: #e35f5f; + --message-success-bg: #006b1b; + --message-warning-bg: #583305; + --message-error-bg: #570808; + + --darkened-bg: #212121; + --selected-bg: #1b1b1b; + --selected-row: #00363a; + + --close-button-bg: #333333; + --close-button-hover-bg: #666666; + } + } + + +html[data-theme="dark"] { + --primary: #264b5d; + --primary-fg: #f7f7f7; + + --body-fg: #eeeeee; + --body-bg: #121212; + --body-quiet-color: #e0e0e0; + --body-loud-color: #ffffff; + + --breadcrumbs-link-fg: #e0e0e0; + --breadcrumbs-bg: var(--primary); + + --link-fg: #81d4fa; + --link-hover-color: #4ac1f7; + --link-selected-fg: #6f94c6; + + --hairline-color: #272727; + --border-color: #353535; + + --error-fg: #e35f5f; + --message-success-bg: #006b1b; + --message-warning-bg: #583305; + --message-error-bg: #570808; + + --darkened-bg: #212121; + --selected-bg: #1b1b1b; + --selected-row: #00363a; + + --close-button-bg: #333333; + --close-button-hover-bg: #666666; +} + +/* THEME SWITCH */ +.theme-toggle { + cursor: pointer; + border: none; + padding: 0; + background: transparent; + vertical-align: middle; + margin-inline-start: 5px; + margin-top: -1px; +} + +.theme-toggle svg { + vertical-align: middle; + height: 1rem; + width: 1rem; + display: none; +} + +/* +Fully hide screen reader text so we only show the one matching the current +theme. +*/ +.theme-toggle .visually-hidden { + display: none; +} + +html[data-theme="auto"] .theme-toggle .theme-label-when-auto { + display: block; +} + +html[data-theme="dark"] .theme-toggle .theme-label-when-dark { + display: block; +} + +html[data-theme="light"] .theme-toggle .theme-label-when-light { + display: block; +} + +/* ICONS */ +.theme-toggle svg.theme-icon-when-auto, +.theme-toggle svg.theme-icon-when-dark, +.theme-toggle svg.theme-icon-when-light { + fill: var(--header-link-color); + color: var(--header-bg); +} + +html[data-theme="auto"] .theme-toggle svg.theme-icon-when-auto { + display: block; +} + +html[data-theme="dark"] .theme-toggle svg.theme-icon-when-dark { + display: block; +} + +html[data-theme="light"] .theme-toggle svg.theme-icon-when-light { + display: block; +} + +.visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0,0,0,0); + white-space: nowrap; + border: 0; + color: var(--body-fg); + background-color: var(--body-bg); +} diff --git a/staticfiles/admin/css/dark_mode.css.gz b/staticfiles/admin/css/dark_mode.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..faebccea590bbf329596f47495cc027ed38ea3c8 GIT binary patch literal 849 zcmV-X1FrlZiwFP!00002|D{!3PunmQeb2A3*b7A%T1pE`HE9xJf`@GnAnjq=gJa($ zR$V)@9STDG@AF3pO-tG$Y$3J2r{{j1d-=Km#tAyCG~}QSrb;M{4J}~-DPly=2k1FL z?xb2N+k8d{<4W@d(N8J*bT&QDCTzBD!Fl0~`GvpU*xED28Y6@=>sm5z8J+pNX8Bul zurWmcK}(_~mqi3kF302HWD^vfMaaeQa(LMZ#cK+r zOE&;Qn@6u4Z84$>vQa0D)~eMqL^+<0Nr#;ZWdLWjwMs^gaX7QL5wSf1Hw`D^{w4k| zNlLpAzZtOvTR#wA4t($jf0`-in}MDQNVciJPy0KSzfJeazM9{y_+*>fcWQmB(vv+@ z-mCFstG@S8_a55bs_bN!s<&ynSJBBnYTm77r{U8hbboXG{Tki-H9{E?7NjGfsP&A=$b5jB@O2<6X zu!t{9&TP5*z__Udd3wn*lq~sH3-N?X&YUBv0VMMC0UB9&w8$v51f-;cm{Ki~3(S23 z7q+FPD^GZE74@Y^LewY8M%_;yxT%SAgPj}ZJUsV=v$2FoZIxR>Yjp9OAQ=d}EJ0!q zTPMwgqVu;|o7J|9)x+MwDt!I-pbfZwUZ>*QtDisaHs$Md&^&PJhM>*-cn_S$}OX!(8~a8u^>v2=11Oc1!ngcpPriv}MVy+e8(i;D>LiN!8tg b!#A4S{4*b{Z$rF^Y6S2frdt^naSH$dGXj{n literal 0 HcmV?d00001 diff --git a/staticfiles/admin/css/dark_mode.ef27a31af300.css b/staticfiles/admin/css/dark_mode.ef27a31af300.css new file mode 100644 index 0000000..6d08233 --- /dev/null +++ b/staticfiles/admin/css/dark_mode.ef27a31af300.css @@ -0,0 +1,137 @@ +@media (prefers-color-scheme: dark) { + :root { + --primary: #264b5d; + --primary-fg: #f7f7f7; + + --body-fg: #eeeeee; + --body-bg: #121212; + --body-quiet-color: #e0e0e0; + --body-loud-color: #ffffff; + + --breadcrumbs-link-fg: #e0e0e0; + --breadcrumbs-bg: var(--primary); + + --link-fg: #81d4fa; + --link-hover-color: #4ac1f7; + --link-selected-fg: #6f94c6; + + --hairline-color: #272727; + --border-color: #353535; + + --error-fg: #e35f5f; + --message-success-bg: #006b1b; + --message-warning-bg: #583305; + --message-error-bg: #570808; + + --darkened-bg: #212121; + --selected-bg: #1b1b1b; + --selected-row: #00363a; + + --close-button-bg: #333333; + --close-button-hover-bg: #666666; + } + } + + +html[data-theme="dark"] { + --primary: #264b5d; + --primary-fg: #f7f7f7; + + --body-fg: #eeeeee; + --body-bg: #121212; + --body-quiet-color: #e0e0e0; + --body-loud-color: #ffffff; + + --breadcrumbs-link-fg: #e0e0e0; + --breadcrumbs-bg: var(--primary); + + --link-fg: #81d4fa; + --link-hover-color: #4ac1f7; + --link-selected-fg: #6f94c6; + + --hairline-color: #272727; + --border-color: #353535; + + --error-fg: #e35f5f; + --message-success-bg: #006b1b; + --message-warning-bg: #583305; + --message-error-bg: #570808; + + --darkened-bg: #212121; + --selected-bg: #1b1b1b; + --selected-row: #00363a; + + --close-button-bg: #333333; + --close-button-hover-bg: #666666; +} + +/* THEME SWITCH */ +.theme-toggle { + cursor: pointer; + border: none; + padding: 0; + background: transparent; + vertical-align: middle; + margin-inline-start: 5px; + margin-top: -1px; +} + +.theme-toggle svg { + vertical-align: middle; + height: 1rem; + width: 1rem; + display: none; +} + +/* +Fully hide screen reader text so we only show the one matching the current +theme. +*/ +.theme-toggle .visually-hidden { + display: none; +} + +html[data-theme="auto"] .theme-toggle .theme-label-when-auto { + display: block; +} + +html[data-theme="dark"] .theme-toggle .theme-label-when-dark { + display: block; +} + +html[data-theme="light"] .theme-toggle .theme-label-when-light { + display: block; +} + +/* ICONS */ +.theme-toggle svg.theme-icon-when-auto, +.theme-toggle svg.theme-icon-when-dark, +.theme-toggle svg.theme-icon-when-light { + fill: var(--header-link-color); + color: var(--header-bg); +} + +html[data-theme="auto"] .theme-toggle svg.theme-icon-when-auto { + display: block; +} + +html[data-theme="dark"] .theme-toggle svg.theme-icon-when-dark { + display: block; +} + +html[data-theme="light"] .theme-toggle svg.theme-icon-when-light { + display: block; +} + +.visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0,0,0,0); + white-space: nowrap; + border: 0; + color: var(--body-fg); + background-color: var(--body-bg); +} diff --git a/staticfiles/admin/css/dark_mode.ef27a31af300.css.gz b/staticfiles/admin/css/dark_mode.ef27a31af300.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..faebccea590bbf329596f47495cc027ed38ea3c8 GIT binary patch literal 849 zcmV-X1FrlZiwFP!00002|D{!3PunmQeb2A3*b7A%T1pE`HE9xJf`@GnAnjq=gJa($ zR$V)@9STDG@AF3pO-tG$Y$3J2r{{j1d-=Km#tAyCG~}QSrb;M{4J}~-DPly=2k1FL z?xb2N+k8d{<4W@d(N8J*bT&QDCTzBD!Fl0~`GvpU*xED28Y6@=>sm5z8J+pNX8Bul zurWmcK}(_~mqi3kF302HWD^vfMaaeQa(LMZ#cK+r zOE&;Qn@6u4Z84$>vQa0D)~eMqL^+<0Nr#;ZWdLWjwMs^gaX7QL5wSf1Hw`D^{w4k| zNlLpAzZtOvTR#wA4t($jf0`-in}MDQNVciJPy0KSzfJeazM9{y_+*>fcWQmB(vv+@ z-mCFstG@S8_a55bs_bN!s<&ynSJBBnYTm77r{U8hbboXG{Tki-H9{E?7NjGfsP&A=$b5jB@O2<6X zu!t{9&TP5*z__Udd3wn*lq~sH3-N?X&YUBv0VMMC0UB9&w8$v51f-;cm{Ki~3(S23 z7q+FPD^GZE74@Y^LewY8M%_;yxT%SAgPj}ZJUsV=v$2FoZIxR>Yjp9OAQ=d}EJ0!q zTPMwgqVu;|o7J|9)x+MwDt!I-pbfZwUZ>*QtDisaHs$Md&^&PJhM>*-cn_S$}OX!(8~a8u^>v2=11Oc1!ngcpPriv}MVy+e8(i;D>LiN!8tg b!#A4S{4*b{Z$rF^Y6S2frdt^naSH$dGXj{n literal 0 HcmV?d00001 diff --git a/staticfiles/admin/css/dashboard.css b/staticfiles/admin/css/dashboard.css new file mode 100644 index 0000000..242b81a --- /dev/null +++ b/staticfiles/admin/css/dashboard.css @@ -0,0 +1,29 @@ +/* DASHBOARD */ +.dashboard td, .dashboard th { + word-break: break-word; +} + +.dashboard .module table th { + width: 100%; +} + +.dashboard .module table td { + white-space: nowrap; +} + +.dashboard .module table td a { + display: block; + padding-right: .6em; +} + +/* RECENT ACTIONS MODULE */ + +.module ul.actionlist { + margin-left: 0; +} + +ul.actionlist li { + list-style-type: none; + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/staticfiles/admin/css/dashboard.css.gz b/staticfiles/admin/css/dashboard.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..06db5fd5cf463e2a3989b143df3b5bdc73962e1e GIT binary patch literal 267 zcmV+m0rdVKiwFP!00002|AmmTZi6rohIgLgmM*9Ux^y5D4M?rj1}RA&z;F&e#n{Mp zN>SB!FA&nEQ#{zZ-}n9h*>MPYwtIdmvuzGx97M>StPHmZ9`E70l<*b6xO!ueRaWq0 z3iH7xWfgn}*L2hxJShR5SJVCr6MC7#Lz3LxAn-y+@`AaJ*CGXNdds_;Bwtu0*C{@X zb1G9GSF_e}MA8kj)JUH~^eEcdFAiZ_tc%Savi1I@-0a}3%->&&=~seF!bwHE_GGjo z=a-O{+lDk#;xO7Jv)BJNMN8*YG3N&*m>;_NIa-{jG9SVol<8BDgede`_2SdBzbl~> Rb&lMW@dMe)7Ztey007?gfrSB!FA&nEQ#{zZ-}n9h*>MPYwtIdmvuzGx97M>StPHmZ9`E70l<*b6xO!ueRaWq0 z3iH7xWfgn}*L2hxJShR5SJVCr6MC7#Lz3LxAn-y+@`AaJ*CGXNdds_;Bwtu0*C{@X zb1G9GSF_e}MA8kj)JUH~^eEcdFAiZ_tc%Savi1I@-0a}3%->&&=~seF!bwHE_GGjo z=a-O{+lDk#;xO7Jv)BJNMN8*YG3N&*m>;_NIa-{jG9SVol<8BDgede`_2SdBzbl~> Rb&lMW@dMe)7Ztey007?gfr div { + padding-bottom: 10px; +} + +/* FORM LABELS */ + +label { + font-weight: normal; + color: var(--body-quiet-color); + font-size: 0.8125rem; +} + +.required label, label.required { + font-weight: bold; + color: var(--body-fg); +} + +/* RADIO BUTTONS */ + +form div.radiolist div { + padding-right: 7px; +} + +form div.radiolist.inline div { + display: inline-block; +} + +form div.radiolist label { + width: auto; +} + +form div.radiolist input[type="radio"] { + margin: -2px 4px 0 0; + padding: 0; +} + +form ul.inline { + margin-left: 0; + padding: 0; +} + +form ul.inline li { + float: left; + padding-right: 7px; +} + +/* ALIGNED FIELDSETS */ + +.aligned label { + display: block; + padding: 4px 10px 0 0; + width: 160px; + word-wrap: break-word; + line-height: 1; +} + +.aligned label:not(.vCheckboxLabel):after { + content: ''; + display: inline-block; + vertical-align: middle; + height: 1.625rem; +} + +.aligned label + p, .aligned .checkbox-row + div.help, .aligned label + div.readonly { + padding: 6px 0; + margin-top: 0; + margin-bottom: 0; + margin-left: 0; + overflow-wrap: break-word; +} + +.aligned ul label { + display: inline; + float: none; + width: auto; +} + +.aligned .form-row input { + margin-bottom: 0; +} + +.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { + width: 350px; +} + +form .aligned ul { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned div.radiolist { + display: inline-block; + margin: 0; + padding: 0; +} + +form .aligned p.help, +form .aligned div.help { + margin-top: 0; + margin-left: 160px; + padding-left: 10px; +} + +form .aligned p.datetime div.help.timezonewarning { + margin-left: 0; + padding-left: 0; + font-weight: normal; +} + +form .aligned p.help:last-child, +form .aligned div.help:last-child { + margin-bottom: 0; + padding-bottom: 0; +} + +form .aligned input + p.help, +form .aligned textarea + p.help, +form .aligned select + p.help, +form .aligned input + div.help, +form .aligned textarea + div.help, +form .aligned select + div.help { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned ul li { + list-style: none; +} + +form .aligned table p { + margin-left: 0; + padding-left: 0; +} + +.aligned .vCheckboxLabel { + float: none; + width: auto; + display: inline-block; + vertical-align: -3px; + padding: 0 0 5px 5px; +} + +.aligned .vCheckboxLabel + p.help, +.aligned .vCheckboxLabel + div.help { + margin-top: -4px; +} + +.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { + width: 610px; +} + +fieldset .fieldBox { + margin-right: 20px; +} + +/* WIDE FIELDSETS */ + +.wide label { + width: 200px; +} + +form .wide p, +form .wide ul.errorlist, +form .wide input + p.help, +form .wide input + div.help { + margin-left: 200px; +} + +form .wide p.help, +form .wide div.help { + padding-left: 50px; +} + +form div.help ul { + padding-left: 0; + margin-left: 0; +} + +.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { + width: 450px; +} + +/* COLLAPSED FIELDSETS */ + +fieldset.collapsed * { + display: none; +} + +fieldset.collapsed h2, fieldset.collapsed { + display: block; +} + +fieldset.collapsed { + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; +} + +fieldset.collapsed h2 { + background: var(--darkened-bg); + color: var(--body-quiet-color); +} + +fieldset .collapse-toggle { + color: var(--header-link-color); +} + +fieldset.collapsed .collapse-toggle { + background: transparent; + display: inline; + color: var(--link-fg); +} + +/* MONOSPACE TEXTAREAS */ + +fieldset.monospace textarea { + font-family: var(--font-family-monospace); +} + +/* SUBMIT ROW */ + +.submit-row { + padding: 12px 14px 12px; + margin: 0 0 20px; + background: var(--darkened-bg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; + display: flex; + gap: 10px; + flex-wrap: wrap; +} + +body.popup .submit-row { + overflow: auto; +} + +.submit-row input { + height: 2.1875rem; + line-height: 0.9375rem; +} + +.submit-row input, .submit-row a { + margin: 0; +} + +.submit-row input.default { + text-transform: uppercase; +} + +.submit-row a.deletelink { + margin-left: auto; +} + +.submit-row a.deletelink { + display: block; + background: var(--delete-button-bg); + border-radius: 4px; + padding: 0.625rem 0.9375rem; + height: 0.9375rem; + line-height: 0.9375rem; + color: var(--button-fg); +} + +.submit-row a.closelink { + display: inline-block; + background: var(--close-button-bg); + border-radius: 4px; + padding: 10px 15px; + height: 0.9375rem; + line-height: 0.9375rem; + color: var(--button-fg); +} + +.submit-row a.deletelink:focus, +.submit-row a.deletelink:hover, +.submit-row a.deletelink:active { + background: var(--delete-button-hover-bg); + text-decoration: none; +} + +.submit-row a.closelink:focus, +.submit-row a.closelink:hover, +.submit-row a.closelink:active { + background: var(--close-button-hover-bg); + text-decoration: none; +} + +/* CUSTOM FORM FIELDS */ + +.vSelectMultipleField { + vertical-align: top; +} + +.vCheckboxField { + border: none; +} + +.vDateField, .vTimeField { + margin-right: 2px; + margin-bottom: 4px; +} + +.vDateField { + min-width: 6.85em; +} + +.vTimeField { + min-width: 4.7em; +} + +.vURLField { + width: 30em; +} + +.vLargeTextField, .vXMLLargeTextField { + width: 48em; +} + +.flatpages-flatpage #id_content { + height: 40.2em; +} + +.module table .vPositiveSmallIntegerField { + width: 2.2em; +} + +.vIntegerField { + width: 5em; +} + +.vBigIntegerField { + width: 10em; +} + +.vForeignKeyRawIdAdminField { + width: 5em; +} + +.vTextField, .vUUIDField { + width: 20em; +} + +/* INLINES */ + +.inline-group { + padding: 0; + margin: 0 0 30px; +} + +.inline-group thead th { + padding: 8px 10px; +} + +.inline-group .aligned label { + width: 160px; +} + +.inline-related { + position: relative; +} + +.inline-related h3 { + margin: 0; + color: var(--body-quiet-color); + padding: 5px; + font-size: 0.8125rem; + background: var(--darkened-bg); + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); +} + +.inline-related h3 span.delete { + float: right; +} + +.inline-related h3 span.delete label { + margin-left: 2px; + font-size: 0.6875rem; +} + +.inline-related fieldset { + margin: 0; + background: var(--body-bg); + border: none; + width: 100%; +} + +.inline-related fieldset.module h3 { + margin: 0; + padding: 2px 5px 3px 5px; + font-size: 0.6875rem; + text-align: left; + font-weight: bold; + background: #bcd; + color: var(--body-bg); +} + +.inline-group .tabular fieldset.module { + border: none; +} + +.inline-related.tabular fieldset.module table { + width: 100%; + overflow-x: scroll; +} + +.last-related fieldset { + border: none; +} + +.inline-group .tabular tr.has_original td { + padding-top: 2em; +} + +.inline-group .tabular tr td.original { + padding: 2px 0 0 0; + width: 0; + _position: relative; +} + +.inline-group .tabular th.original { + width: 0px; + padding: 0; +} + +.inline-group .tabular td.original p { + position: absolute; + left: 0; + height: 1.1em; + padding: 2px 9px; + overflow: hidden; + font-size: 0.5625rem; + font-weight: bold; + color: var(--body-quiet-color); + _width: 700px; +} + +.inline-group ul.tools { + padding: 0; + margin: 0; + list-style: none; +} + +.inline-group ul.tools li { + display: inline; + padding: 0 5px; +} + +.inline-group div.add-row, +.inline-group .tabular tr.add-row td { + color: var(--body-quiet-color); + background: var(--darkened-bg); + padding: 8px 10px; + border-bottom: 1px solid var(--hairline-color); +} + +.inline-group .tabular tr.add-row td { + padding: 8px 10px; + border-bottom: 1px solid var(--hairline-color); +} + +.inline-group ul.tools a.add, +.inline-group div.add-row a, +.inline-group .tabular tr.add-row td a { + background: url("../img/icon-addlink.d519b3bab011.svg") 0 1px no-repeat; + padding-left: 16px; + font-size: 0.75rem; +} + +.empty-form { + display: none; +} + +/* RELATED FIELD ADD ONE / LOOKUP */ + +.related-lookup { + margin-left: 5px; + display: inline-block; + vertical-align: middle; + background-repeat: no-repeat; + background-size: 14px; +} + +.related-lookup { + width: 1rem; + height: 1rem; + background-image: url("../img/search.7cf54ff789c6.svg"); +} + +form .related-widget-wrapper ul { + display: inline-block; + margin-left: 0; + padding-left: 0; +} + +.clearable-file-input input { + margin-top: 0; +} diff --git a/staticfiles/admin/css/forms.1dd11ef16031.css.gz b/staticfiles/admin/css/forms.1dd11ef16031.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..0c646efebe209ed8bea1b49a8b178af798b1ff52 GIT binary patch literal 2225 zcmV;i2u}AOiwFP!00002|Fs%zZ`(HWdwzwGVOY~fitNNmYGV%`r*Q{kPFy4oHeeVE zN}^>Uw5UmxlPu_e-%%1JQX*|`H0wvL}5I%*1#aaEqsDJOiHvr z*h_+cKJ-`EfAr|{;hz#Wzfy)x@RA8oXG!ogNE9;! zqNNpN5M>ELFGGtzt<=Who>ByN^G}KUbxv5s6=VGm5I3#MYHbz<_|{l*Holt7N?Vq) zzc%K1!cn*a9%G=7NXbB<^*^{DMpVrKPVp+R#{c<(<}W>;b9n4_RiUSssek)&yI#@$?Cx4frw*3|LLdEHluG# zEBsl_g>xpE)n)yVzwrol#Zggke{22*ME{H zaRS6Ji`KZl$>HDr1~WgQGzJ2@bC7zdEjUAP zP0Ibn#nRYwGryhRe;I$8Sc}Q;i}BrL+;WXIjVavW+-XY3BQwb8RqMdx4F`mLNji2 zH*yl15_fBWPE)nBfw~m9OM+N}LY&#+ zC+mkO_*$)aTDkblb@~EvO@kcjb~(;Cn=dqrxHsIxJW8g39O6`Salaw3F+(*Px{5+G zSg+B*XPN?!@vr#h4n0kSaR92^N?6g>!^8Ai$E=_aJ~_ReO>ZZaBUWjPyL-|u?{2rE zpNei(MP$5Pg3mUE%WA==LD6mt)%Bl*lVUJw-G(NGg?OwL=U^)>@anW%C->cK*CGt| zc#pAnb5l-+Z)tGe^m3#tKXi6+m6O%^x<~-~V9DlDCp4{M&M&1drbW4Kz_nKCYOyd) zr#7oUa zQ%+FYk;zmAR8<(!%bfSxRj0BOejZwxpTd|^(k}LF2BR7|Y01G-XN9t_6#OuX5wTd% zn#qeu>9;(oLj>@gn#OC_nr`RSLiO$IjvUgyY1O_)kn6UkTj@ybCY@}CJP7feRqm~9 zC7KruJ>hb$<1G$afi%9kk5cw22AcZ#A5;Dw%zv*-Yoj23=doGU7TQzUNYjTG zzp>yrC($}QiJ+yk0iJj6PB7?w^iDnGxxJo~ZNkGNFguqbrjVl&jF@%-ey&aLQtiU) zguU3s;?T5d<8PxUv++Xg>#XthwKcz;SSQwOKL7RMOW9&onbIbdKIYnGXI*Rl<=e+b zQI*KUw)7H2DQmB8@wM!UTF@D)dz!Atj@Hm@t2W9oO8u2{;V%bg%jL!8NB_LEj div { + padding-bottom: 10px; +} + +/* FORM LABELS */ + +label { + font-weight: normal; + color: var(--body-quiet-color); + font-size: 0.8125rem; +} + +.required label, label.required { + font-weight: bold; + color: var(--body-fg); +} + +/* RADIO BUTTONS */ + +form div.radiolist div { + padding-right: 7px; +} + +form div.radiolist.inline div { + display: inline-block; +} + +form div.radiolist label { + width: auto; +} + +form div.radiolist input[type="radio"] { + margin: -2px 4px 0 0; + padding: 0; +} + +form ul.inline { + margin-left: 0; + padding: 0; +} + +form ul.inline li { + float: left; + padding-right: 7px; +} + +/* ALIGNED FIELDSETS */ + +.aligned label { + display: block; + padding: 4px 10px 0 0; + width: 160px; + word-wrap: break-word; + line-height: 1; +} + +.aligned label:not(.vCheckboxLabel):after { + content: ''; + display: inline-block; + vertical-align: middle; + height: 1.625rem; +} + +.aligned label + p, .aligned .checkbox-row + div.help, .aligned label + div.readonly { + padding: 6px 0; + margin-top: 0; + margin-bottom: 0; + margin-left: 0; + overflow-wrap: break-word; +} + +.aligned ul label { + display: inline; + float: none; + width: auto; +} + +.aligned .form-row input { + margin-bottom: 0; +} + +.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { + width: 350px; +} + +form .aligned ul { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned div.radiolist { + display: inline-block; + margin: 0; + padding: 0; +} + +form .aligned p.help, +form .aligned div.help { + margin-top: 0; + margin-left: 160px; + padding-left: 10px; +} + +form .aligned p.datetime div.help.timezonewarning { + margin-left: 0; + padding-left: 0; + font-weight: normal; +} + +form .aligned p.help:last-child, +form .aligned div.help:last-child { + margin-bottom: 0; + padding-bottom: 0; +} + +form .aligned input + p.help, +form .aligned textarea + p.help, +form .aligned select + p.help, +form .aligned input + div.help, +form .aligned textarea + div.help, +form .aligned select + div.help { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned ul li { + list-style: none; +} + +form .aligned table p { + margin-left: 0; + padding-left: 0; +} + +.aligned .vCheckboxLabel { + float: none; + width: auto; + display: inline-block; + vertical-align: -3px; + padding: 0 0 5px 5px; +} + +.aligned .vCheckboxLabel + p.help, +.aligned .vCheckboxLabel + div.help { + margin-top: -4px; +} + +.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { + width: 610px; +} + +fieldset .fieldBox { + margin-right: 20px; +} + +/* WIDE FIELDSETS */ + +.wide label { + width: 200px; +} + +form .wide p, +form .wide ul.errorlist, +form .wide input + p.help, +form .wide input + div.help { + margin-left: 200px; +} + +form .wide p.help, +form .wide div.help { + padding-left: 50px; +} + +form div.help ul { + padding-left: 0; + margin-left: 0; +} + +.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { + width: 450px; +} + +/* COLLAPSED FIELDSETS */ + +fieldset.collapsed * { + display: none; +} + +fieldset.collapsed h2, fieldset.collapsed { + display: block; +} + +fieldset.collapsed { + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; +} + +fieldset.collapsed h2 { + background: var(--darkened-bg); + color: var(--body-quiet-color); +} + +fieldset .collapse-toggle { + color: var(--header-link-color); +} + +fieldset.collapsed .collapse-toggle { + background: transparent; + display: inline; + color: var(--link-fg); +} + +/* MONOSPACE TEXTAREAS */ + +fieldset.monospace textarea { + font-family: var(--font-family-monospace); +} + +/* SUBMIT ROW */ + +.submit-row { + padding: 12px 14px 12px; + margin: 0 0 20px; + background: var(--darkened-bg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; + display: flex; + gap: 10px; + flex-wrap: wrap; +} + +body.popup .submit-row { + overflow: auto; +} + +.submit-row input { + height: 2.1875rem; + line-height: 0.9375rem; +} + +.submit-row input, .submit-row a { + margin: 0; +} + +.submit-row input.default { + text-transform: uppercase; +} + +.submit-row a.deletelink { + margin-left: auto; +} + +.submit-row a.deletelink { + display: block; + background: var(--delete-button-bg); + border-radius: 4px; + padding: 0.625rem 0.9375rem; + height: 0.9375rem; + line-height: 0.9375rem; + color: var(--button-fg); +} + +.submit-row a.closelink { + display: inline-block; + background: var(--close-button-bg); + border-radius: 4px; + padding: 10px 15px; + height: 0.9375rem; + line-height: 0.9375rem; + color: var(--button-fg); +} + +.submit-row a.deletelink:focus, +.submit-row a.deletelink:hover, +.submit-row a.deletelink:active { + background: var(--delete-button-hover-bg); + text-decoration: none; +} + +.submit-row a.closelink:focus, +.submit-row a.closelink:hover, +.submit-row a.closelink:active { + background: var(--close-button-hover-bg); + text-decoration: none; +} + +/* CUSTOM FORM FIELDS */ + +.vSelectMultipleField { + vertical-align: top; +} + +.vCheckboxField { + border: none; +} + +.vDateField, .vTimeField { + margin-right: 2px; + margin-bottom: 4px; +} + +.vDateField { + min-width: 6.85em; +} + +.vTimeField { + min-width: 4.7em; +} + +.vURLField { + width: 30em; +} + +.vLargeTextField, .vXMLLargeTextField { + width: 48em; +} + +.flatpages-flatpage #id_content { + height: 40.2em; +} + +.module table .vPositiveSmallIntegerField { + width: 2.2em; +} + +.vIntegerField { + width: 5em; +} + +.vBigIntegerField { + width: 10em; +} + +.vForeignKeyRawIdAdminField { + width: 5em; +} + +.vTextField, .vUUIDField { + width: 20em; +} + +/* INLINES */ + +.inline-group { + padding: 0; + margin: 0 0 30px; +} + +.inline-group thead th { + padding: 8px 10px; +} + +.inline-group .aligned label { + width: 160px; +} + +.inline-related { + position: relative; +} + +.inline-related h3 { + margin: 0; + color: var(--body-quiet-color); + padding: 5px; + font-size: 0.8125rem; + background: var(--darkened-bg); + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); +} + +.inline-related h3 span.delete { + float: right; +} + +.inline-related h3 span.delete label { + margin-left: 2px; + font-size: 0.6875rem; +} + +.inline-related fieldset { + margin: 0; + background: var(--body-bg); + border: none; + width: 100%; +} + +.inline-related fieldset.module h3 { + margin: 0; + padding: 2px 5px 3px 5px; + font-size: 0.6875rem; + text-align: left; + font-weight: bold; + background: #bcd; + color: var(--body-bg); +} + +.inline-group .tabular fieldset.module { + border: none; +} + +.inline-related.tabular fieldset.module table { + width: 100%; + overflow-x: scroll; +} + +.last-related fieldset { + border: none; +} + +.inline-group .tabular tr.has_original td { + padding-top: 2em; +} + +.inline-group .tabular tr td.original { + padding: 2px 0 0 0; + width: 0; + _position: relative; +} + +.inline-group .tabular th.original { + width: 0px; + padding: 0; +} + +.inline-group .tabular td.original p { + position: absolute; + left: 0; + height: 1.1em; + padding: 2px 9px; + overflow: hidden; + font-size: 0.5625rem; + font-weight: bold; + color: var(--body-quiet-color); + _width: 700px; +} + +.inline-group ul.tools { + padding: 0; + margin: 0; + list-style: none; +} + +.inline-group ul.tools li { + display: inline; + padding: 0 5px; +} + +.inline-group div.add-row, +.inline-group .tabular tr.add-row td { + color: var(--body-quiet-color); + background: var(--darkened-bg); + padding: 8px 10px; + border-bottom: 1px solid var(--hairline-color); +} + +.inline-group .tabular tr.add-row td { + padding: 8px 10px; + border-bottom: 1px solid var(--hairline-color); +} + +.inline-group ul.tools a.add, +.inline-group div.add-row a, +.inline-group .tabular tr.add-row td a { + background: url(../img/icon-addlink.svg) 0 1px no-repeat; + padding-left: 16px; + font-size: 0.75rem; +} + +.empty-form { + display: none; +} + +/* RELATED FIELD ADD ONE / LOOKUP */ + +.related-lookup { + margin-left: 5px; + display: inline-block; + vertical-align: middle; + background-repeat: no-repeat; + background-size: 14px; +} + +.related-lookup { + width: 1rem; + height: 1rem; + background-image: url(../img/search.svg); +} + +form .related-widget-wrapper ul { + display: inline-block; + margin-left: 0; + padding-left: 0; +} + +.clearable-file-input input { + margin-top: 0; +} diff --git a/staticfiles/admin/css/forms.css.gz b/staticfiles/admin/css/forms.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..72464f191e0fd046e180e4a348ec70ef8e6dccbd GIT binary patch literal 2191 zcmV;A2ypiwiwFP!00002|Fs%xZ`-!^dwvD6;i63&DYg?QnT-u|8u!AO6Bn_A4Y(Kz z+M;bCw5UmxlPu_ezlV}YkrHV;8``37Or3Lh-Y@0Xa1*nHqb#BC-#vxFityB5r0Kik z{?XCt2lRPze~a!XzfaMJ)1xDQ$&!tiuqX6-gy0X`l4MEQQxC1fARtjcKaFt^gwd*p z+O7DxI9jrZdujML>7kZ?)$Vi?vMHX-SrU-Mn={VY22kQ>lrkCyXp58gp0~zfLc@r7 z3r1N2OnuY22sf(}qR}qLq8{1+gOt?pDV`Hrp#6`(#N_867HhJ2 zoU`X2{w(QiaIy*`kFyw9?^{W?a;k!;#!Fn{m&))cS#k;LFDZEji6V|cw4{U#!ZfD% zrH91RQf&h6DZy~J_|&-HWR!mixiY zXo9XEX0yp%Ax*A*P=uf0AO!zOxkW8Wami(=lqQZJM!8NaRArRni8rTg@#w%tx=JCI z__~L1#+eIT_q+VG=5#&ebs!wh;a^Moo{BBa=`t$$He6PD+idpEp6pGU*-&2%^`GejN}(&Tj|mfABI65P83*%(;73m! z6pwPNtV{Q47k+2((2E#z3cBX`mVGho+&Q;3oQst zg?vOYWGs2+%XE{cjE}j0tO?aYBwFq|1P3glFQ!}f(1p-m-<7V)BbgJ-Q^QGQI=84= zmn5Th>lWJT>y8vLc~FmsN(a{T-DFzeKvKA!YUZ=b5KQe5Tmx}>lC4tOR9yJuM~A98I248maRQ`- zl7$;zQdcqWrtbn#H`vYo&ulEBTb2XiwqD9#D3PJu0Oxp435wrhb|d=D#B7!!NA`GQ ziuTTG^7llkL0w3i-BJTib}HlT0ND|A-nqO%B&NNY>kWzPqB5U&m=X?|RQz)p_!CSLZ-H(+8rLv2QU1qF9?Xl%~SF_Eh$#^{YGHrBLiYDAZah!sae5jX{Dn^^Y z>&^+X9NRlIJBe3qVmn||)5bed1hX`6_WF*=(Z#jA6)zrF3Cp5D4g~>D9tp&XH(wne zHmw-JBJY4eU9Bily`V;74gD4{4?;cKXlQIYsOe1e1V?EM89m~Cci&{(pI@wvJ-3s) z$@I(M(-6&uf6NB=!$Hk8HY{Rr$AVPVLmRS|coWhWNnAVf6rQ?j`fzc2xN}#Dw3;xg7KLO0>D!mclY_3pes(7H2VPDxtcl z>T5M1y`h!ELC0@jT~_N4V|;1(Kb>7xlS7@-iNOJ`&5A8Mk{^&I&ZuNV_=T6dqDY55 zl*KVg7C0phYz&x`a3Y-0mYl5;TaawSpT!e$G;f|kI~LX5p=sf&l9#iVt~*`bwPTmM zo7tmaLN?yCV=umtmvMOt}tn8VI(_1Ma6^>`1jhT#roRaEqc>1=XaEZ~ZoUgXs6 zH1FSU#VRkRL~ji0JuEbnh2X0B)S+e4tn{WgY!OcxE8NQ{# zdDF|0ru@*^MP*Jl=j%KH9D=2r$DGitin+Mbx|kYe)qq>A($r#Znnrur*bKB=t^e%2 zPX@TlAC#>-#a;lN$^C#^JeB#&EM2Y59WOO>@qU~yoUc0Ot7BWVKyu0`P8u?~s(`5q zCwh_dUYqJPcEZm+lr9n&a|+t|p3PxYCnq&Ic;c^d`jvqnh7qQS2ep|zkCaZ$lNv+- z&sQ{Fo7QYKUM-a0zV68(^_$l9Yb3d5Te_2u#%|omW_S)Ep7GMXjjcrWf}t(l&k*#d z-2;%}#N7)mc^&)?u9+jhmO8j>*;9N*ea;w7_tllYd*SFHsJ4{WL0a4Ob*+qvO%T9{ zF7RZBgO(tbZyutQLyCc=KK{#;e*p8}>r!PDEbcsUs~X`0m5nWZxcDUn-#-mEtJ4rV zIuF1_C?E6tQ5_v+GX5QVI5)ze$qlgYm^MYk<& zju&pAyEcrH5}Yj7xjD40t-PxE?UH=I5|gA_!0vq^cEIa|1%<0c8S|DQd=!fp%lkz6 RChXhM{{eS8zias-006(zN*n+H literal 0 HcmV?d00001 diff --git a/staticfiles/admin/css/login.586129c60a93.css b/staticfiles/admin/css/login.586129c60a93.css new file mode 100644 index 0000000..389772f --- /dev/null +++ b/staticfiles/admin/css/login.586129c60a93.css @@ -0,0 +1,61 @@ +/* LOGIN FORM */ + +.login { + background: var(--darkened-bg); + height: auto; +} + +.login #header { + height: auto; + padding: 15px 16px; + justify-content: center; +} + +.login #header h1 { + font-size: 1.125rem; + margin: 0; +} + +.login #header h1 a { + color: var(--header-link-color); +} + +.login #content { + padding: 20px 20px 0; +} + +.login #container { + background: var(--body-bg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; + width: 28em; + min-width: 300px; + margin: 100px auto; + height: auto; +} + +.login .form-row { + padding: 4px 0; +} + +.login .form-row label { + display: block; + line-height: 2em; +} + +.login .form-row #id_username, .login .form-row #id_password { + padding: 8px; + width: 100%; + box-sizing: border-box; +} + +.login .submit-row { + padding: 1em 0 0 0; + margin: 0; + text-align: center; +} + +.login .password-reset-link { + text-align: center; +} diff --git a/staticfiles/admin/css/login.586129c60a93.css.gz b/staticfiles/admin/css/login.586129c60a93.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..ca9d533055da1635cd52842a4569b1046aabcdb5 GIT binary patch literal 417 zcmV;S0bc$eiwFP!00002|8-K)O2aS|ecx9EM9^Wjc5WiwyCSFqe?ZdauDvczN|L%w z@!w6`q;p$sA&{GMPtG~H(=mBoJwCmXht=B)8Ba%}iBLI8@;xH%OIfzbwW=jg$S2cR zlyaswAc4~~zh1VO0x&OZLRf9pa`e+PTok}KXwP(vYAO}u9A%!6cv0<0d{^zd`bTXn zuJ<%k(t>m?nOi{*Q5UgiUpp){_yvw_63-SI%8smL+BGC3`lp?Ff=mgegU9Ze3X~h# z9$X)Fdttt_w=s*HjdqF7;0$G-#CfKv;`>9MsnYItXT&iXC6EVI47HO4y`%$}YR0iP z37Llw)hFn+P}_tQ$T`Tax@j8ofg-7s%gh16r~YZph$q#f;gyluotX2e;n8 zGkX~_-8Hk+qI|xtbR@vkX^D2oattMjn*VJ6nyrPMrA%NhhsJsmv{DTQY&(FSf4K1% L;-h8;z5@UNH15V| literal 0 HcmV?d00001 diff --git a/staticfiles/admin/css/login.css b/staticfiles/admin/css/login.css new file mode 100644 index 0000000..389772f --- /dev/null +++ b/staticfiles/admin/css/login.css @@ -0,0 +1,61 @@ +/* LOGIN FORM */ + +.login { + background: var(--darkened-bg); + height: auto; +} + +.login #header { + height: auto; + padding: 15px 16px; + justify-content: center; +} + +.login #header h1 { + font-size: 1.125rem; + margin: 0; +} + +.login #header h1 a { + color: var(--header-link-color); +} + +.login #content { + padding: 20px 20px 0; +} + +.login #container { + background: var(--body-bg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; + width: 28em; + min-width: 300px; + margin: 100px auto; + height: auto; +} + +.login .form-row { + padding: 4px 0; +} + +.login .form-row label { + display: block; + line-height: 2em; +} + +.login .form-row #id_username, .login .form-row #id_password { + padding: 8px; + width: 100%; + box-sizing: border-box; +} + +.login .submit-row { + padding: 1em 0 0 0; + margin: 0; + text-align: center; +} + +.login .password-reset-link { + text-align: center; +} diff --git a/staticfiles/admin/css/login.css.gz b/staticfiles/admin/css/login.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..ca9d533055da1635cd52842a4569b1046aabcdb5 GIT binary patch literal 417 zcmV;S0bc$eiwFP!00002|8-K)O2aS|ecx9EM9^Wjc5WiwyCSFqe?ZdauDvczN|L%w z@!w6`q;p$sA&{GMPtG~H(=mBoJwCmXht=B)8Ba%}iBLI8@;xH%OIfzbwW=jg$S2cR zlyaswAc4~~zh1VO0x&OZLRf9pa`e+PTok}KXwP(vYAO}u9A%!6cv0<0d{^zd`bTXn zuJ<%k(t>m?nOi{*Q5UgiUpp){_yvw_63-SI%8smL+BGC3`lp?Ff=mgegU9Ze3X~h# z9$X)Fdttt_w=s*HjdqF7;0$G-#CfKv;`>9MsnYItXT&iXC6EVI47HO4y`%$}YR0iP z37Llw)hFn+P}_tQ$T`Tax@j8ofg-7s%gh16r~YZph$q#f;gyluotX2e;n8 zGkX~_-8Hk+qI|xtbR@vkX^D2oattMjn*VJ6nyrPMrA%NhhsJsmv{DTQY&(FSf4K1% L;-h8;z5@UNH15V| literal 0 HcmV?d00001 diff --git a/staticfiles/admin/css/nav_sidebar.269a1bd44627.css b/staticfiles/admin/css/nav_sidebar.269a1bd44627.css new file mode 100644 index 0000000..f76e6ce --- /dev/null +++ b/staticfiles/admin/css/nav_sidebar.269a1bd44627.css @@ -0,0 +1,144 @@ +.sticky { + position: sticky; + top: 0; + max-height: 100vh; +} + +.toggle-nav-sidebar { + z-index: 20; + left: 0; + display: flex; + align-items: center; + justify-content: center; + flex: 0 0 23px; + width: 23px; + border: 0; + border-right: 1px solid var(--hairline-color); + background-color: var(--body-bg); + cursor: pointer; + font-size: 1.25rem; + color: var(--link-fg); + padding: 0; +} + +[dir="rtl"] .toggle-nav-sidebar { + border-left: 1px solid var(--hairline-color); + border-right: 0; +} + +.toggle-nav-sidebar:hover, +.toggle-nav-sidebar:focus { + background-color: var(--darkened-bg); +} + +#nav-sidebar { + z-index: 15; + flex: 0 0 275px; + left: -276px; + margin-left: -276px; + border-top: 1px solid transparent; + border-right: 1px solid var(--hairline-color); + background-color: var(--body-bg); + overflow: auto; +} + +[dir="rtl"] #nav-sidebar { + border-left: 1px solid var(--hairline-color); + border-right: 0; + left: 0; + margin-left: 0; + right: -276px; + margin-right: -276px; +} + +.toggle-nav-sidebar::before { + content: '\00BB'; +} + +.main.shifted .toggle-nav-sidebar::before { + content: '\00AB'; +} + +.main > #nav-sidebar { + visibility: hidden; +} + +.main.shifted > #nav-sidebar { + margin-left: 0; + visibility: visible; +} + +[dir="rtl"] .main.shifted > #nav-sidebar { + margin-right: 0; +} + +#nav-sidebar .module th { + width: 100%; + overflow-wrap: anywhere; +} + +#nav-sidebar .module th, +#nav-sidebar .module caption { + padding-left: 16px; +} + +#nav-sidebar .module td { + white-space: nowrap; +} + +[dir="rtl"] #nav-sidebar .module th, +[dir="rtl"] #nav-sidebar .module caption { + padding-left: 8px; + padding-right: 16px; +} + +#nav-sidebar .current-app .section:link, +#nav-sidebar .current-app .section:visited { + color: var(--header-color); + font-weight: bold; +} + +#nav-sidebar .current-model { + background: var(--selected-row); +} + +.main > #nav-sidebar + .content { + max-width: calc(100% - 23px); +} + +.main.shifted > #nav-sidebar + .content { + max-width: calc(100% - 299px); +} + +@media (max-width: 767px) { + #nav-sidebar, #toggle-nav-sidebar { + display: none; + } + + .main > #nav-sidebar + .content, + .main.shifted > #nav-sidebar + .content { + max-width: 100%; + } +} + +#nav-filter { + width: 100%; + box-sizing: border-box; + padding: 2px 5px; + margin: 5px 0; + border: 1px solid var(--border-color); + background-color: var(--darkened-bg); + color: var(--body-fg); +} + +#nav-filter:focus { + border-color: var(--body-quiet-color); +} + +#nav-filter.no-results { + background: var(--message-error-bg); +} + +#nav-sidebar table { + width: 100%; +} diff --git a/staticfiles/admin/css/nav_sidebar.269a1bd44627.css.gz b/staticfiles/admin/css/nav_sidebar.269a1bd44627.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..7398c4df9feb1b5f31ae72b632bf2debd3f25dd7 GIT binary patch literal 779 zcmV+m1N8hKiwFP!00002|Fu@zQrj>Pea}~D%5;Ef?3Jwu79`TV1#bFel9%HPH>ln9YLfG2Xl1Z{7a2brq~m! zrQl@C%oU{>6GjRJ=uc{M?VqrClNwzr-iSkQ9BF=_QR=PY(%4E@Xwiuf!^YY?0=f#8 zD+9SV?&6@s4NY2{f^jZXS_h0p{>g>;`oTE);WwEsxX-F7^La`2>adt-qZs8ywCO5iV-?oyRnN%n`RQTNL34SStGfdfn z862Q@9)+r8iPXE0u+r&48!z6ae}gsamB-7x`A8LCX(py2j3ChleALIKy!^FTJUm=B z&vGVIU^9_8;N(9+esn>|x3N-fg%y#I!XbfVf^$$KZbx5^6{L$+f0i&@yR)Ht+tf1) za?MK##AW`4=P6{C=#u zGho$zbyuz?^PN9~k(T^KJeVoS0XMeb79>W1tZ4M^dV1hLAzrf`$1&SeKR7Xy@l`cF zgx1II`t2<^8}9C|#rvKE7mQqWEZ4Vd)Ov(2{+wJ)-lyK#S6V?+QS?y#c_aDxi_zJs zy-M$8&7O}vON7KbJ++RJ-dBgazQmquQS|CWFOjKNeIgAjLI2CfkkLKhIhUn>KnG)5 zAD*OpTbs1{$GPLK_wa8iz#YTrBLqrQ1GbdTPR?--*0K~R7^BVjiFXVsb*#wGvwzZY Jd|`$P005G@hg1Ln literal 0 HcmV?d00001 diff --git a/staticfiles/admin/css/nav_sidebar.css b/staticfiles/admin/css/nav_sidebar.css new file mode 100644 index 0000000..f76e6ce --- /dev/null +++ b/staticfiles/admin/css/nav_sidebar.css @@ -0,0 +1,144 @@ +.sticky { + position: sticky; + top: 0; + max-height: 100vh; +} + +.toggle-nav-sidebar { + z-index: 20; + left: 0; + display: flex; + align-items: center; + justify-content: center; + flex: 0 0 23px; + width: 23px; + border: 0; + border-right: 1px solid var(--hairline-color); + background-color: var(--body-bg); + cursor: pointer; + font-size: 1.25rem; + color: var(--link-fg); + padding: 0; +} + +[dir="rtl"] .toggle-nav-sidebar { + border-left: 1px solid var(--hairline-color); + border-right: 0; +} + +.toggle-nav-sidebar:hover, +.toggle-nav-sidebar:focus { + background-color: var(--darkened-bg); +} + +#nav-sidebar { + z-index: 15; + flex: 0 0 275px; + left: -276px; + margin-left: -276px; + border-top: 1px solid transparent; + border-right: 1px solid var(--hairline-color); + background-color: var(--body-bg); + overflow: auto; +} + +[dir="rtl"] #nav-sidebar { + border-left: 1px solid var(--hairline-color); + border-right: 0; + left: 0; + margin-left: 0; + right: -276px; + margin-right: -276px; +} + +.toggle-nav-sidebar::before { + content: '\00BB'; +} + +.main.shifted .toggle-nav-sidebar::before { + content: '\00AB'; +} + +.main > #nav-sidebar { + visibility: hidden; +} + +.main.shifted > #nav-sidebar { + margin-left: 0; + visibility: visible; +} + +[dir="rtl"] .main.shifted > #nav-sidebar { + margin-right: 0; +} + +#nav-sidebar .module th { + width: 100%; + overflow-wrap: anywhere; +} + +#nav-sidebar .module th, +#nav-sidebar .module caption { + padding-left: 16px; +} + +#nav-sidebar .module td { + white-space: nowrap; +} + +[dir="rtl"] #nav-sidebar .module th, +[dir="rtl"] #nav-sidebar .module caption { + padding-left: 8px; + padding-right: 16px; +} + +#nav-sidebar .current-app .section:link, +#nav-sidebar .current-app .section:visited { + color: var(--header-color); + font-weight: bold; +} + +#nav-sidebar .current-model { + background: var(--selected-row); +} + +.main > #nav-sidebar + .content { + max-width: calc(100% - 23px); +} + +.main.shifted > #nav-sidebar + .content { + max-width: calc(100% - 299px); +} + +@media (max-width: 767px) { + #nav-sidebar, #toggle-nav-sidebar { + display: none; + } + + .main > #nav-sidebar + .content, + .main.shifted > #nav-sidebar + .content { + max-width: 100%; + } +} + +#nav-filter { + width: 100%; + box-sizing: border-box; + padding: 2px 5px; + margin: 5px 0; + border: 1px solid var(--border-color); + background-color: var(--darkened-bg); + color: var(--body-fg); +} + +#nav-filter:focus { + border-color: var(--body-quiet-color); +} + +#nav-filter.no-results { + background: var(--message-error-bg); +} + +#nav-sidebar table { + width: 100%; +} diff --git a/staticfiles/admin/css/nav_sidebar.css.gz b/staticfiles/admin/css/nav_sidebar.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..7398c4df9feb1b5f31ae72b632bf2debd3f25dd7 GIT binary patch literal 779 zcmV+m1N8hKiwFP!00002|Fu@zQrj>Pea}~D%5;Ef?3Jwu79`TV1#bFel9%HPH>ln9YLfG2Xl1Z{7a2brq~m! zrQl@C%oU{>6GjRJ=uc{M?VqrClNwzr-iSkQ9BF=_QR=PY(%4E@Xwiuf!^YY?0=f#8 zD+9SV?&6@s4NY2{f^jZXS_h0p{>g>;`oTE);WwEsxX-F7^La`2>adt-qZs8ywCO5iV-?oyRnN%n`RQTNL34SStGfdfn z862Q@9)+r8iPXE0u+r&48!z6ae}gsamB-7x`A8LCX(py2j3ChleALIKy!^FTJUm=B z&vGVIU^9_8;N(9+esn>|x3N-fg%y#I!XbfVf^$$KZbx5^6{L$+f0i&@yR)Ht+tf1) za?MK##AW`4=P6{C=#u zGho$zbyuz?^PN9~k(T^KJeVoS0XMeb79>W1tZ4M^dV1hLAzrf`$1&SeKR7Xy@l`cF zgx1II`t2<^8}9C|#rvKE7mQqWEZ4Vd)Ov(2{+wJ)-lyK#S6V?+QS?y#c_aDxi_zJs zy-M$8&7O}vON7KbJ++RJ-dBgazQmquQS|CWFOjKNeIgAjLI2CfkkLKhIhUn>KnG)5 zAD*OpTbs1{$GPLK_wa8iz#YTrBLqrQ1GbdTPR?--*0K~R7^BVjiFXVsb*#wGvwzZY Jd|`$P005G@hg1Ln literal 0 HcmV?d00001 diff --git a/staticfiles/admin/css/responsive.76d4b69c4c82.css b/staticfiles/admin/css/responsive.76d4b69c4c82.css new file mode 100644 index 0000000..55f67f0 --- /dev/null +++ b/staticfiles/admin/css/responsive.76d4b69c4c82.css @@ -0,0 +1,999 @@ +/* Tablets */ + +input[type="submit"], button { + -webkit-appearance: none; + appearance: none; +} + +@media (max-width: 1024px) { + /* Basic */ + + html { + -webkit-text-size-adjust: 100%; + } + + td, th { + padding: 10px; + font-size: 0.875rem; + } + + .small { + font-size: 0.75rem; + } + + /* Layout */ + + #container { + min-width: 0; + } + + #content { + padding: 15px 20px 20px; + } + + div.breadcrumbs { + padding: 10px 30px; + } + + /* Header */ + + #header { + flex-direction: column; + padding: 15px 30px; + justify-content: flex-start; + } + + #branding h1 { + margin: 0 0 8px; + line-height: 1.2; + } + + #user-tools { + margin: 0; + font-weight: 400; + line-height: 1.85; + text-align: left; + } + + #user-tools a { + display: inline-block; + line-height: 1.4; + } + + /* Dashboard */ + + .dashboard #content { + width: auto; + } + + #content-related { + margin-right: -290px; + } + + .colSM #content-related { + margin-left: -290px; + } + + .colMS { + margin-right: 290px; + } + + .colSM { + margin-left: 290px; + } + + .dashboard .module table td a { + padding-right: 0; + } + + td .changelink, td .addlink { + font-size: 0.8125rem; + } + + /* Changelist */ + + #toolbar { + border: none; + padding: 15px; + } + + #changelist-search > div { + display: flex; + flex-wrap: nowrap; + max-width: 480px; + } + + #changelist-search label { + line-height: 1.375rem; + } + + #toolbar form #searchbar { + flex: 1 0 auto; + width: 0; + height: 1.375rem; + margin: 0 10px 0 6px; + } + + #toolbar form input[type=submit] { + flex: 0 1 auto; + } + + #changelist-search .quiet { + width: 0; + flex: 1 0 auto; + margin: 5px 0 0 25px; + } + + #changelist .actions { + display: flex; + flex-wrap: wrap; + padding: 15px 0; + } + + #changelist .actions label { + display: flex; + } + + #changelist .actions select { + background: var(--body-bg); + } + + #changelist .actions .button { + min-width: 48px; + margin: 0 10px; + } + + #changelist .actions span.all, + #changelist .actions span.clear, + #changelist .actions span.question, + #changelist .actions span.action-counter { + font-size: 0.6875rem; + margin: 0 10px 0 0; + } + + #changelist-filter { + flex-basis: 200px; + } + + .change-list .filtered .results, + .change-list .filtered .paginator, + .filtered #toolbar, + .filtered .actions, + + #changelist .paginator { + border-top-color: var(--hairline-color); /* XXX Is this used at all? */ + } + + #changelist .results + .paginator { + border-top: none; + } + + /* Forms */ + + label { + font-size: 0.875rem; + } + + .form-row input[type=text], + .form-row input[type=password], + .form-row input[type=email], + .form-row input[type=url], + .form-row input[type=tel], + .form-row input[type=number], + .form-row textarea, + .form-row select, + .form-row .vTextField { + box-sizing: border-box; + margin: 0; + padding: 6px 8px; + min-height: 2.25rem; + font-size: 0.875rem; + } + + .form-row select { + height: 2.25rem; + } + + .form-row select[multiple] { + height: auto; + min-height: 0; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 10px; + padding-top: 10px; + border-top: 1px solid var(--hairline-color); + } + + textarea { + max-width: 100%; + max-height: 120px; + } + + .aligned label { + padding-top: 6px; + } + + .aligned .related-lookup, + .aligned .datetimeshortcuts, + .aligned .related-lookup + strong { + align-self: center; + margin-left: 15px; + } + + form .aligned div.radiolist { + margin-left: 2px; + } + + .submit-row { + padding: 8px; + } + + .submit-row a.deletelink { + padding: 10px 7px; + } + + .button, input[type=submit], input[type=button], .submit-row input, a.button { + padding: 7px; + } + + /* Related widget */ + + .related-widget-wrapper { + float: none; + } + + .related-widget-wrapper-link + .selector { + max-width: calc(100% - 30px); + margin-right: 15px; + } + + select + .related-widget-wrapper-link, + .related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 10px; + } + + /* Selector */ + + .selector { + display: flex; + width: 100%; + } + + .selector .selector-filter { + display: flex; + align-items: center; + } + + .selector .selector-filter label { + margin: 0 8px 0 0; + } + + .selector .selector-filter input { + width: auto; + min-height: 0; + flex: 1 1; + } + + .selector-available, .selector-chosen { + width: auto; + flex: 1 1; + display: flex; + flex-direction: column; + } + + .selector select { + width: 100%; + flex: 1 0 auto; + margin-bottom: 5px; + } + + .selector ul.selector-chooser { + width: 26px; + height: 52px; + padding: 2px 0; + margin: auto 15px; + border-radius: 20px; + transform: translateY(-10px); + } + + .selector-add, .selector-remove { + width: 20px; + height: 20px; + background-size: 20px auto; + } + + .selector-add { + background-position: 0 -120px; + } + + .selector-remove { + background-position: 0 -80px; + } + + a.selector-chooseall, a.selector-clearall { + align-self: center; + } + + .stacked { + flex-direction: column; + max-width: 480px; + } + + .stacked > * { + flex: 0 1 auto; + } + + .stacked select { + margin-bottom: 0; + } + + .stacked .selector-available, .stacked .selector-chosen { + width: auto; + } + + .stacked ul.selector-chooser { + width: 52px; + height: 26px; + padding: 0 2px; + margin: 15px auto; + transform: none; + } + + .stacked .selector-chooser li { + padding: 3px; + } + + .stacked .selector-add, .stacked .selector-remove { + background-size: 20px auto; + } + + .stacked .selector-add { + background-position: 0 -40px; + } + + .stacked .active.selector-add { + background-position: 0 -40px; + } + + .active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -140px; + } + + .stacked .active.selector-add:focus, .stacked .active.selector-add:hover { + background-position: 0 -60px; + } + + .stacked .selector-remove { + background-position: 0 0; + } + + .stacked .active.selector-remove { + background-position: 0 0; + } + + .active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -100px; + } + + .stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover { + background-position: 0 -20px; + } + + .help-tooltip, .selector .help-icon { + display: none; + } + + .datetime input { + width: 50%; + max-width: 120px; + } + + .datetime span { + font-size: 0.8125rem; + } + + .datetime .timezonewarning { + display: block; + font-size: 0.6875rem; + color: var(--body-quiet-color); + } + + .datetimeshortcuts { + color: var(--border-color); /* XXX Redundant, .datetime span also sets #ccc */ + } + + .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { + width: 75%; + } + + .inline-group { + overflow: auto; + } + + /* Messages */ + + ul.messagelist li { + padding-left: 55px; + background-position: 30px 12px; + } + + ul.messagelist li.error { + background-position: 30px 12px; + } + + ul.messagelist li.warning { + background-position: 30px 14px; + } + + /* Login */ + + .login #header { + padding: 15px 20px; + } + + .login #branding h1 { + margin: 0; + } + + /* GIS */ + + div.olMap { + max-width: calc(100vw - 30px); + max-height: 300px; + } + + .olMap + .clear_features { + display: block; + margin-top: 10px; + } + + /* Docs */ + + .module table.xfull { + width: 100%; + } + + pre.literal-block { + overflow: auto; + } +} + +/* Mobile */ + +@media (max-width: 767px) { + /* Layout */ + + #header, #content, #footer { + padding: 15px; + } + + #footer:empty { + padding: 0; + } + + div.breadcrumbs { + padding: 10px 15px; + } + + /* Dashboard */ + + .colMS, .colSM { + margin: 0; + } + + #content-related, .colSM #content-related { + width: 100%; + margin: 0; + } + + #content-related .module { + margin-bottom: 0; + } + + #content-related .module h2 { + padding: 10px 15px; + font-size: 1rem; + } + + /* Changelist */ + + #changelist { + align-items: stretch; + flex-direction: column; + } + + #toolbar { + padding: 10px; + } + + #changelist-filter { + margin-left: 0; + } + + #changelist .actions label { + flex: 1 1; + } + + #changelist .actions select { + flex: 1 0; + width: 100%; + } + + #changelist .actions span { + flex: 1 0 100%; + } + + #changelist-filter { + position: static; + width: auto; + margin-top: 30px; + } + + .object-tools { + float: none; + margin: 0 0 15px; + padding: 0; + overflow: hidden; + } + + .object-tools li { + height: auto; + margin-left: 0; + } + + .object-tools li + li { + margin-left: 15px; + } + + /* Forms */ + + .form-row { + padding: 15px 0; + } + + .aligned .form-row, + .aligned .form-row > div { + max-width: 100vw; + } + + .aligned .form-row > div { + width: calc(100vw - 30px); + } + + .flex-container { + flex-flow: column; + } + + textarea { + max-width: none; + } + + .vURLField { + width: auto; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 15px; + padding-top: 15px; + } + + fieldset.collapsed .form-row { + display: none; + } + + .aligned label { + width: 100%; + padding: 0 0 10px; + } + + .aligned label:after { + max-height: 0; + } + + .aligned .form-row input, + .aligned .form-row select, + .aligned .form-row textarea { + flex: 1 1 auto; + max-width: 100%; + } + + .aligned .checkbox-row { + align-items: center; + } + + .aligned .checkbox-row input { + flex: 0 1 auto; + margin: 0; + } + + .aligned .vCheckboxLabel { + flex: 1 0; + padding: 1px 0 0 5px; + } + + .aligned label + p, + .aligned label + div.help, + .aligned label + div.readonly { + padding: 0; + margin-left: 0; + } + + .aligned p.file-upload { + margin-left: 0; + font-size: 0.8125rem; + } + + span.clearable-file-input { + margin-left: 15px; + } + + span.clearable-file-input label { + font-size: 0.8125rem; + padding-bottom: 0; + } + + .aligned .timezonewarning { + flex: 1 0 100%; + margin-top: 5px; + } + + form .aligned .form-row div.help { + width: 100%; + margin: 5px 0 0; + padding: 0; + } + + form .aligned ul, + form .aligned ul.errorlist { + margin-left: 0; + padding-left: 0; + } + + form .aligned div.radiolist { + margin-top: 5px; + margin-right: 15px; + margin-bottom: -3px; + } + + form .aligned div.radiolist:not(.inline) div + div { + margin-top: 5px; + } + + /* Related widget */ + + .related-widget-wrapper { + width: 100%; + display: flex; + align-items: flex-start; + } + + .related-widget-wrapper .selector { + order: 1; + } + + .related-widget-wrapper > a { + order: 2; + } + + .related-widget-wrapper .radiolist ~ a { + align-self: flex-end; + } + + .related-widget-wrapper > select ~ a { + align-self: center; + } + + select + .related-widget-wrapper-link, + .related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 15px; + } + + /* Selector */ + + .selector { + flex-direction: column; + } + + .selector > * { + float: none; + } + + .selector-available, .selector-chosen { + margin-bottom: 0; + flex: 1 1 auto; + } + + .selector select { + max-height: 96px; + } + + .selector ul.selector-chooser { + display: block; + float: none; + width: 52px; + height: 26px; + padding: 0 2px; + margin: 15px auto 20px; + transform: none; + } + + .selector ul.selector-chooser li { + float: left; + } + + .selector-remove { + background-position: 0 0; + } + + .active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -20px; + } + + .selector-add { + background-position: 0 -40px; + } + + .active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -60px; + } + + /* Inlines */ + + .inline-group[data-inline-type="stacked"] .inline-related { + border: 1px solid var(--hairline-color); + border-radius: 4px; + margin-top: 15px; + overflow: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related > * { + box-sizing: border-box; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module { + padding: 0 10px; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row { + border-top: 1px solid var(--hairline-color); + border-bottom: none; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row:first-child { + border-top: none; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 { + padding: 10px; + border-top-width: 0; + border-bottom-width: 2px; + display: flex; + flex-wrap: wrap; + align-items: center; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 .inline_label { + margin-right: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 span.delete { + float: none; + flex: 1 1 100%; + margin-top: 5px; + } + + .inline-group[data-inline-type="stacked"] .aligned .form-row > div:not([class]) { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] .aligned label { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] div.add-row { + margin-top: 15px; + border: 1px solid var(--hairline-color); + border-radius: 4px; + } + + .inline-group div.add-row, + .inline-group .tabular tr.add-row td { + padding: 0; + } + + .inline-group div.add-row a, + .inline-group .tabular tr.add-row td a { + display: block; + padding: 8px 10px 8px 26px; + background-position: 8px 9px; + } + + /* Submit row */ + + .submit-row { + padding: 10px; + margin: 0 0 15px; + flex-direction: column; + gap: 8px; + } + + .submit-row input, .submit-row input.default, .submit-row a { + text-align: center; + } + + .submit-row a.closelink { + padding: 10px 0; + text-align: center; + } + + .submit-row a.deletelink { + margin: 0; + } + + /* Messages */ + + ul.messagelist li { + padding-left: 40px; + background-position: 15px 12px; + } + + ul.messagelist li.error { + background-position: 15px 12px; + } + + ul.messagelist li.warning { + background-position: 15px 14px; + } + + /* Paginator */ + + .paginator .this-page, .paginator a:link, .paginator a:visited { + padding: 4px 10px; + } + + /* Login */ + + body.login { + padding: 0 15px; + } + + .login #container { + width: auto; + max-width: 480px; + margin: 50px auto; + } + + .login #header, + .login #content { + padding: 15px; + } + + .login #content-main { + float: none; + } + + .login .form-row { + padding: 0; + } + + .login .form-row + .form-row { + margin-top: 15px; + } + + .login .form-row label { + margin: 0 0 5px; + line-height: 1.2; + } + + .login .submit-row { + padding: 15px 0 0; + } + + .login br { + display: none; + } + + .login .submit-row input { + margin: 0; + text-transform: uppercase; + } + + .errornote { + margin: 0 0 20px; + padding: 8px 12px; + font-size: 0.8125rem; + } + + /* Calendar and clock */ + + .calendarbox, .clockbox { + position: fixed !important; + top: 50% !important; + left: 50% !important; + transform: translate(-50%, -50%); + margin: 0; + border: none; + overflow: visible; + } + + .calendarbox:before, .clockbox:before { + content: ''; + position: fixed; + top: 50%; + left: 50%; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.75); + transform: translate(-50%, -50%); + } + + .calendarbox > *, .clockbox > * { + position: relative; + z-index: 1; + } + + .calendarbox > div:first-child { + z-index: 2; + } + + .calendarbox .calendar, .clockbox h2 { + border-radius: 4px 4px 0 0; + overflow: hidden; + } + + .calendarbox .calendar-cancel, .clockbox .calendar-cancel { + border-radius: 0 0 4px 4px; + overflow: hidden; + } + + .calendar-shortcuts { + padding: 10px 0; + font-size: 0.75rem; + line-height: 0.75rem; + } + + .calendar-shortcuts a { + margin: 0 4px; + } + + .timelist a { + background: var(--body-bg); + padding: 4px; + } + + .calendar-cancel { + padding: 8px 10px; + } + + .clockbox h2 { + padding: 8px 15px; + } + + .calendar caption { + padding: 10px; + } + + .calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + z-index: 1; + top: 10px; + } + + /* History */ + + table#change-history tbody th, table#change-history tbody td { + font-size: 0.8125rem; + word-break: break-word; + } + + table#change-history tbody th { + width: auto; + } + + /* Docs */ + + table.model tbody th, table.model tbody td { + font-size: 0.8125rem; + word-break: break-word; + } +} diff --git a/staticfiles/admin/css/responsive.76d4b69c4c82.css.gz b/staticfiles/admin/css/responsive.76d4b69c4c82.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..2358e41a9094fad18b6013c4ad388fe7aa931008 GIT binary patch literal 3434 zcmV-w4VCgAiwFP!00002|IHlzZ`(HZ_xu&Q7Q>Rp@?`emFXc)4XDz z*h5bL`mC(hyO=$@o_Onuu`Knz9C`4^zoYBhnE52nDJe)A(xsPXDP4(KbM))c(cgD8 ziivl;BlrGY9I@@vn+5ap{QjhY`NIqEM^eV2*aIKfvR%^5$v7FkXMP!frap;&uS&+@ z1mD$|zt$^RH1XJ0TAPz7iqjkZXnw!yhBsMSgIapQ^y+d^(47KjTJA_9??G8$J`YED zLmskrzR2&rdC>e&mPPS?x-KY*!lK%(OWV1< zGkqcK_g7d3o9p(wt-ni0PUyWK#RUynoTW=I%#v!Ct}GioQ|_0OC*C~x&9Rm>u#%C2 zspnn;w{R%lb|&8wDQ;pw8Nh#6GTa0%)ZfzhX3MERovXmAk`_M8vZTadY1F@KpqvMR z75>$tpAy_hlK2K-C3M5AsELF;ipxA94@)mj1?Y8>g|}98=Q@pkCgpaWks|8IG>y6; zgl8JwA{EO}_VNpw5Jn^8di(q; zc@o~<6j_x#`^-r?1$#dkcqB}KeqX%7lWRk7PPDq zR!*D`xq3nCuMmD+j2cacO*_+4^)M7no;L;3SK8Ij3@Zc3Am;Dc&!ig(dqsJJpW5flSsMn zdwyd=T{V{vLo1hC*Qqzq{i@r@HAQPX=F_<BC^cn%6*#&94 zs(5esEtOP=9(?*SyXOqseKtHM!LMrQ(>g)Ol+5HaxWh6_;>aRritE(STfr{{du@=` zPIPA62xz9l!3K%dB}m!zg>BWeaZddt%WkWDqRmDy$Ko9=w^_l$s?%wf<#4qnD>4X9 z`hAE;!Sp8^2#6@x+$-EmHT*Z>cXX(D~2xsmFzPlWVpu zBMi~amX*G^2#}pxI2Bzl@oq?x@R&2O=ZgsUWMv6r401QR;?%i;$*3*5rY)Q^LjwNy z?Mb^!Mb2(=&w`-O&nIVG!q?2wE&?szf<29JnxX z&M#!k(_Zglj+iQ;2<4k^$<6mCNuFfFxN5D0mn%=Qf}|za!^`?37ps3C`?FrKO(I5- zOg=F3*`6Y&39!?sqkZtxcpD<8XM~svZZvlC^Q??(atEG|7*YFnZ9t6JpXemy;gK@R zV<9z1YO{^qwisYnGDkxxMrV4WgZIjNF)n)VRv3by@pgbOv&gnFJ1pcnxh>p4F-GVQ+k1!8`OsM87r`)*$7-Hn)3OmY$L_Bq}YY`=8;vNSI7qPkn&TdRnC+(&a+)vXR%y*oO2;WR(FW) zg2TO~Wl3&mpZ5YYwyVcPSc{p6CO}y%EUr<{-8|j`Zqk^^Kry97kqwH;NX;x!4vbHOg5x(Hrjgl3Vh1-L|cBEvC zG_#B;`zV>AM^ydrM8~*_Uzbc6&Lvq(WoW6`wcNadUUP%v#o}-^knxce)tRXP*T2Id zjYbnA1F3hisEnpdx2mDGaTL+ifmgAumNJ5!?gp$=6`(tnZPdGZC*;ehVsoEyZx>E1 z<3^8zT3FcM4ZtMIwQz}vnnsAwx+@{3lfD1fyEhgW&2YFLSNmDmYd=PX zqCvnldP4G2xyMm4gROdlS^z0kffVXhSWB|eb=tk9M27G{U5c>HDpg5y8X;+?5DkGt zieARH!YvJNd3jU4*1>c*4nU92u=JPR-u6KEKQ&O_ShPP@Xq`2UD+_lS@6^*vaqT$w zWq4fbnC6~NmL@L8Xh_+$U~}GnK>aEQO&tvw$WifW-xb20R9`^X3F20zb_nhsf|*vt zZYA52!R*Lv52G>Ds%sN>O|zGomaJo)z=d43ak#!JzN%^1(MRiu&{bG9F`_l}Y&uk`$>N<9}yqU^O$ z{!;uUr*A(+gb}|PX>%o!}7|2a_5HgXV5M@T(@>cHQ~SR5V)klXf#frl*XotArHbI&_<6(QvuKio_!a zpdllCDY+50PVMs#s=tI77X;%et@nrn?A zkkJjP5^YMpJoz<7v`I_u84eS0`J64o!Rm34(QagGVe<)v=JQ~X{K7~6R)yxVz(y9D zYj8-R`JdfODjje3@2yPvt1mu$=aEuBOqTVljmpqI23!;s_STQ|&$i#rmhV*=NDnX@<&xL2H_t8oiqgJEx$ z4%B>=^X2Lm?0^DXVExzi(sePeh+rbZQ>sft`A9)+#Zw$1DK*$aguzvymiw3oXmEX{ z$n@y div { + display: flex; + flex-wrap: nowrap; + max-width: 480px; + } + + #changelist-search label { + line-height: 1.375rem; + } + + #toolbar form #searchbar { + flex: 1 0 auto; + width: 0; + height: 1.375rem; + margin: 0 10px 0 6px; + } + + #toolbar form input[type=submit] { + flex: 0 1 auto; + } + + #changelist-search .quiet { + width: 0; + flex: 1 0 auto; + margin: 5px 0 0 25px; + } + + #changelist .actions { + display: flex; + flex-wrap: wrap; + padding: 15px 0; + } + + #changelist .actions label { + display: flex; + } + + #changelist .actions select { + background: var(--body-bg); + } + + #changelist .actions .button { + min-width: 48px; + margin: 0 10px; + } + + #changelist .actions span.all, + #changelist .actions span.clear, + #changelist .actions span.question, + #changelist .actions span.action-counter { + font-size: 0.6875rem; + margin: 0 10px 0 0; + } + + #changelist-filter { + flex-basis: 200px; + } + + .change-list .filtered .results, + .change-list .filtered .paginator, + .filtered #toolbar, + .filtered .actions, + + #changelist .paginator { + border-top-color: var(--hairline-color); /* XXX Is this used at all? */ + } + + #changelist .results + .paginator { + border-top: none; + } + + /* Forms */ + + label { + font-size: 0.875rem; + } + + .form-row input[type=text], + .form-row input[type=password], + .form-row input[type=email], + .form-row input[type=url], + .form-row input[type=tel], + .form-row input[type=number], + .form-row textarea, + .form-row select, + .form-row .vTextField { + box-sizing: border-box; + margin: 0; + padding: 6px 8px; + min-height: 2.25rem; + font-size: 0.875rem; + } + + .form-row select { + height: 2.25rem; + } + + .form-row select[multiple] { + height: auto; + min-height: 0; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 10px; + padding-top: 10px; + border-top: 1px solid var(--hairline-color); + } + + textarea { + max-width: 100%; + max-height: 120px; + } + + .aligned label { + padding-top: 6px; + } + + .aligned .related-lookup, + .aligned .datetimeshortcuts, + .aligned .related-lookup + strong { + align-self: center; + margin-left: 15px; + } + + form .aligned div.radiolist { + margin-left: 2px; + } + + .submit-row { + padding: 8px; + } + + .submit-row a.deletelink { + padding: 10px 7px; + } + + .button, input[type=submit], input[type=button], .submit-row input, a.button { + padding: 7px; + } + + /* Related widget */ + + .related-widget-wrapper { + float: none; + } + + .related-widget-wrapper-link + .selector { + max-width: calc(100% - 30px); + margin-right: 15px; + } + + select + .related-widget-wrapper-link, + .related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 10px; + } + + /* Selector */ + + .selector { + display: flex; + width: 100%; + } + + .selector .selector-filter { + display: flex; + align-items: center; + } + + .selector .selector-filter label { + margin: 0 8px 0 0; + } + + .selector .selector-filter input { + width: auto; + min-height: 0; + flex: 1 1; + } + + .selector-available, .selector-chosen { + width: auto; + flex: 1 1; + display: flex; + flex-direction: column; + } + + .selector select { + width: 100%; + flex: 1 0 auto; + margin-bottom: 5px; + } + + .selector ul.selector-chooser { + width: 26px; + height: 52px; + padding: 2px 0; + margin: auto 15px; + border-radius: 20px; + transform: translateY(-10px); + } + + .selector-add, .selector-remove { + width: 20px; + height: 20px; + background-size: 20px auto; + } + + .selector-add { + background-position: 0 -120px; + } + + .selector-remove { + background-position: 0 -80px; + } + + a.selector-chooseall, a.selector-clearall { + align-self: center; + } + + .stacked { + flex-direction: column; + max-width: 480px; + } + + .stacked > * { + flex: 0 1 auto; + } + + .stacked select { + margin-bottom: 0; + } + + .stacked .selector-available, .stacked .selector-chosen { + width: auto; + } + + .stacked ul.selector-chooser { + width: 52px; + height: 26px; + padding: 0 2px; + margin: 15px auto; + transform: none; + } + + .stacked .selector-chooser li { + padding: 3px; + } + + .stacked .selector-add, .stacked .selector-remove { + background-size: 20px auto; + } + + .stacked .selector-add { + background-position: 0 -40px; + } + + .stacked .active.selector-add { + background-position: 0 -40px; + } + + .active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -140px; + } + + .stacked .active.selector-add:focus, .stacked .active.selector-add:hover { + background-position: 0 -60px; + } + + .stacked .selector-remove { + background-position: 0 0; + } + + .stacked .active.selector-remove { + background-position: 0 0; + } + + .active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -100px; + } + + .stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover { + background-position: 0 -20px; + } + + .help-tooltip, .selector .help-icon { + display: none; + } + + .datetime input { + width: 50%; + max-width: 120px; + } + + .datetime span { + font-size: 0.8125rem; + } + + .datetime .timezonewarning { + display: block; + font-size: 0.6875rem; + color: var(--body-quiet-color); + } + + .datetimeshortcuts { + color: var(--border-color); /* XXX Redundant, .datetime span also sets #ccc */ + } + + .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { + width: 75%; + } + + .inline-group { + overflow: auto; + } + + /* Messages */ + + ul.messagelist li { + padding-left: 55px; + background-position: 30px 12px; + } + + ul.messagelist li.error { + background-position: 30px 12px; + } + + ul.messagelist li.warning { + background-position: 30px 14px; + } + + /* Login */ + + .login #header { + padding: 15px 20px; + } + + .login #branding h1 { + margin: 0; + } + + /* GIS */ + + div.olMap { + max-width: calc(100vw - 30px); + max-height: 300px; + } + + .olMap + .clear_features { + display: block; + margin-top: 10px; + } + + /* Docs */ + + .module table.xfull { + width: 100%; + } + + pre.literal-block { + overflow: auto; + } +} + +/* Mobile */ + +@media (max-width: 767px) { + /* Layout */ + + #header, #content, #footer { + padding: 15px; + } + + #footer:empty { + padding: 0; + } + + div.breadcrumbs { + padding: 10px 15px; + } + + /* Dashboard */ + + .colMS, .colSM { + margin: 0; + } + + #content-related, .colSM #content-related { + width: 100%; + margin: 0; + } + + #content-related .module { + margin-bottom: 0; + } + + #content-related .module h2 { + padding: 10px 15px; + font-size: 1rem; + } + + /* Changelist */ + + #changelist { + align-items: stretch; + flex-direction: column; + } + + #toolbar { + padding: 10px; + } + + #changelist-filter { + margin-left: 0; + } + + #changelist .actions label { + flex: 1 1; + } + + #changelist .actions select { + flex: 1 0; + width: 100%; + } + + #changelist .actions span { + flex: 1 0 100%; + } + + #changelist-filter { + position: static; + width: auto; + margin-top: 30px; + } + + .object-tools { + float: none; + margin: 0 0 15px; + padding: 0; + overflow: hidden; + } + + .object-tools li { + height: auto; + margin-left: 0; + } + + .object-tools li + li { + margin-left: 15px; + } + + /* Forms */ + + .form-row { + padding: 15px 0; + } + + .aligned .form-row, + .aligned .form-row > div { + max-width: 100vw; + } + + .aligned .form-row > div { + width: calc(100vw - 30px); + } + + .flex-container { + flex-flow: column; + } + + textarea { + max-width: none; + } + + .vURLField { + width: auto; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 15px; + padding-top: 15px; + } + + fieldset.collapsed .form-row { + display: none; + } + + .aligned label { + width: 100%; + padding: 0 0 10px; + } + + .aligned label:after { + max-height: 0; + } + + .aligned .form-row input, + .aligned .form-row select, + .aligned .form-row textarea { + flex: 1 1 auto; + max-width: 100%; + } + + .aligned .checkbox-row { + align-items: center; + } + + .aligned .checkbox-row input { + flex: 0 1 auto; + margin: 0; + } + + .aligned .vCheckboxLabel { + flex: 1 0; + padding: 1px 0 0 5px; + } + + .aligned label + p, + .aligned label + div.help, + .aligned label + div.readonly { + padding: 0; + margin-left: 0; + } + + .aligned p.file-upload { + margin-left: 0; + font-size: 0.8125rem; + } + + span.clearable-file-input { + margin-left: 15px; + } + + span.clearable-file-input label { + font-size: 0.8125rem; + padding-bottom: 0; + } + + .aligned .timezonewarning { + flex: 1 0 100%; + margin-top: 5px; + } + + form .aligned .form-row div.help { + width: 100%; + margin: 5px 0 0; + padding: 0; + } + + form .aligned ul, + form .aligned ul.errorlist { + margin-left: 0; + padding-left: 0; + } + + form .aligned div.radiolist { + margin-top: 5px; + margin-right: 15px; + margin-bottom: -3px; + } + + form .aligned div.radiolist:not(.inline) div + div { + margin-top: 5px; + } + + /* Related widget */ + + .related-widget-wrapper { + width: 100%; + display: flex; + align-items: flex-start; + } + + .related-widget-wrapper .selector { + order: 1; + } + + .related-widget-wrapper > a { + order: 2; + } + + .related-widget-wrapper .radiolist ~ a { + align-self: flex-end; + } + + .related-widget-wrapper > select ~ a { + align-self: center; + } + + select + .related-widget-wrapper-link, + .related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 15px; + } + + /* Selector */ + + .selector { + flex-direction: column; + } + + .selector > * { + float: none; + } + + .selector-available, .selector-chosen { + margin-bottom: 0; + flex: 1 1 auto; + } + + .selector select { + max-height: 96px; + } + + .selector ul.selector-chooser { + display: block; + float: none; + width: 52px; + height: 26px; + padding: 0 2px; + margin: 15px auto 20px; + transform: none; + } + + .selector ul.selector-chooser li { + float: left; + } + + .selector-remove { + background-position: 0 0; + } + + .active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -20px; + } + + .selector-add { + background-position: 0 -40px; + } + + .active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -60px; + } + + /* Inlines */ + + .inline-group[data-inline-type="stacked"] .inline-related { + border: 1px solid var(--hairline-color); + border-radius: 4px; + margin-top: 15px; + overflow: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related > * { + box-sizing: border-box; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module { + padding: 0 10px; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row { + border-top: 1px solid var(--hairline-color); + border-bottom: none; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row:first-child { + border-top: none; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 { + padding: 10px; + border-top-width: 0; + border-bottom-width: 2px; + display: flex; + flex-wrap: wrap; + align-items: center; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 .inline_label { + margin-right: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 span.delete { + float: none; + flex: 1 1 100%; + margin-top: 5px; + } + + .inline-group[data-inline-type="stacked"] .aligned .form-row > div:not([class]) { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] .aligned label { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] div.add-row { + margin-top: 15px; + border: 1px solid var(--hairline-color); + border-radius: 4px; + } + + .inline-group div.add-row, + .inline-group .tabular tr.add-row td { + padding: 0; + } + + .inline-group div.add-row a, + .inline-group .tabular tr.add-row td a { + display: block; + padding: 8px 10px 8px 26px; + background-position: 8px 9px; + } + + /* Submit row */ + + .submit-row { + padding: 10px; + margin: 0 0 15px; + flex-direction: column; + gap: 8px; + } + + .submit-row input, .submit-row input.default, .submit-row a { + text-align: center; + } + + .submit-row a.closelink { + padding: 10px 0; + text-align: center; + } + + .submit-row a.deletelink { + margin: 0; + } + + /* Messages */ + + ul.messagelist li { + padding-left: 40px; + background-position: 15px 12px; + } + + ul.messagelist li.error { + background-position: 15px 12px; + } + + ul.messagelist li.warning { + background-position: 15px 14px; + } + + /* Paginator */ + + .paginator .this-page, .paginator a:link, .paginator a:visited { + padding: 4px 10px; + } + + /* Login */ + + body.login { + padding: 0 15px; + } + + .login #container { + width: auto; + max-width: 480px; + margin: 50px auto; + } + + .login #header, + .login #content { + padding: 15px; + } + + .login #content-main { + float: none; + } + + .login .form-row { + padding: 0; + } + + .login .form-row + .form-row { + margin-top: 15px; + } + + .login .form-row label { + margin: 0 0 5px; + line-height: 1.2; + } + + .login .submit-row { + padding: 15px 0 0; + } + + .login br { + display: none; + } + + .login .submit-row input { + margin: 0; + text-transform: uppercase; + } + + .errornote { + margin: 0 0 20px; + padding: 8px 12px; + font-size: 0.8125rem; + } + + /* Calendar and clock */ + + .calendarbox, .clockbox { + position: fixed !important; + top: 50% !important; + left: 50% !important; + transform: translate(-50%, -50%); + margin: 0; + border: none; + overflow: visible; + } + + .calendarbox:before, .clockbox:before { + content: ''; + position: fixed; + top: 50%; + left: 50%; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.75); + transform: translate(-50%, -50%); + } + + .calendarbox > *, .clockbox > * { + position: relative; + z-index: 1; + } + + .calendarbox > div:first-child { + z-index: 2; + } + + .calendarbox .calendar, .clockbox h2 { + border-radius: 4px 4px 0 0; + overflow: hidden; + } + + .calendarbox .calendar-cancel, .clockbox .calendar-cancel { + border-radius: 0 0 4px 4px; + overflow: hidden; + } + + .calendar-shortcuts { + padding: 10px 0; + font-size: 0.75rem; + line-height: 0.75rem; + } + + .calendar-shortcuts a { + margin: 0 4px; + } + + .timelist a { + background: var(--body-bg); + padding: 4px; + } + + .calendar-cancel { + padding: 8px 10px; + } + + .clockbox h2 { + padding: 8px 15px; + } + + .calendar caption { + padding: 10px; + } + + .calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + z-index: 1; + top: 10px; + } + + /* History */ + + table#change-history tbody th, table#change-history tbody td { + font-size: 0.8125rem; + word-break: break-word; + } + + table#change-history tbody th { + width: auto; + } + + /* Docs */ + + table.model tbody th, table.model tbody td { + font-size: 0.8125rem; + word-break: break-word; + } +} diff --git a/staticfiles/admin/css/responsive.css.gz b/staticfiles/admin/css/responsive.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..2358e41a9094fad18b6013c4ad388fe7aa931008 GIT binary patch literal 3434 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 LdUI+Zuo3_O$)0sd literal 0 HcmV?d00001 diff --git a/staticfiles/admin/css/rtl.css b/staticfiles/admin/css/rtl.css new file mode 100644 index 0000000..800f943 --- /dev/null +++ b/staticfiles/admin/css/rtl.css @@ -0,0 +1,286 @@ +/* GLOBAL */ + +th { + text-align: right; +} + +.module h2, .module caption { + text-align: right; +} + +.module ul, .module ol { + margin-left: 0; + margin-right: 1.5em; +} + +.viewlink, .addlink, .changelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.deletelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.object-tools { + float: left; +} + +thead th:first-child, +tfoot td:first-child { + border-left: none; +} + +/* LAYOUT */ + +#user-tools { + right: auto; + left: 0; + text-align: left; +} + +div.breadcrumbs { + text-align: right; +} + +#content-main { + float: right; +} + +#content-related { + float: left; + margin-left: -300px; + margin-right: auto; +} + +.colMS { + margin-left: 300px; + margin-right: 0; +} + +/* SORTABLE TABLES */ + +table thead th.sorted .sortoptions { + float: left; +} + +thead th.sorted .text { + padding-right: 0; + padding-left: 42px; +} + +/* dashboard styles */ + +.dashboard .module table td a { + padding-left: .6em; + padding-right: 16px; +} + +/* changelists styles */ + +.change-list .filtered table { + border-left: none; + border-right: 0px none; +} + +#changelist-filter { + border-left: none; + border-right: none; + margin-left: 0; + margin-right: 30px; +} + +#changelist-filter li.selected { + border-left: none; + padding-left: 10px; + margin-left: 0; + border-right: 5px solid var(--hairline-color); + padding-right: 10px; + margin-right: -15px; +} + +#changelist table tbody td:first-child, #changelist table tbody th:first-child { + border-right: none; + border-left: none; +} + +/* FORMS */ + +.aligned label { + padding: 0 0 3px 1em; +} + +.submit-row a.deletelink { + margin-left: 0; + margin-right: auto; +} + +.vDateField, .vTimeField { + margin-left: 2px; +} + +.aligned .form-row input { + margin-left: 5px; +} + +form .aligned ul { + margin-right: 163px; + padding-right: 10px; + margin-left: 0; + padding-left: 0; +} + +form ul.inline li { + float: right; + padding-right: 0; + padding-left: 7px; +} + +form .aligned p.help, +form .aligned div.help { + margin-right: 160px; + padding-right: 10px; +} + +form div.help ul, +form .aligned .checkbox-row + .help, +form .aligned p.datetime div.help.timezonewarning { + margin-right: 0; + padding-right: 0; +} + +form .wide p.help, form .wide div.help { + padding-left: 0; + padding-right: 50px; +} + +form .wide p, +form .wide ul.errorlist, +form .wide input + p.help, +form .wide input + div.help { + margin-right: 200px; + margin-left: 0px; +} + +.submit-row { + text-align: right; +} + +fieldset .fieldBox { + margin-left: 20px; + margin-right: 0; +} + +.errorlist li { + background-position: 100% 12px; + padding: 0; +} + +.errornote { + background-position: 100% 12px; + padding: 10px 12px; +} + +/* WIDGETS */ + +.calendarnav-previous { + top: 0; + left: auto; + right: 10px; + background: url(../img/calendar-icons.svg) 0 -30px no-repeat; +} + +.calendarbox .calendarnav-previous:focus, +.calendarbox .calendarnav-previous:hover { + background-position: 0 -45px; +} + +.calendarnav-next { + top: 0; + right: auto; + left: 10px; + background: url(../img/calendar-icons.svg) 0 0 no-repeat; +} + +.calendarbox .calendarnav-next:focus, +.calendarbox .calendarnav-next:hover { + background-position: 0 -15px; +} + +.calendar caption, .calendarbox h2 { + text-align: center; +} + +.selector { + float: right; +} + +.selector .selector-filter { + text-align: right; +} + +.selector-add { + background: url(../img/selector-icons.svg) 0 -64px no-repeat; +} + +.active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -80px; +} + +.selector-remove { + background: url(../img/selector-icons.svg) 0 -96px no-repeat; +} + +.active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -112px; +} + +a.selector-chooseall { + background: url(../img/selector-icons.svg) right -128px no-repeat; +} + +a.active.selector-chooseall:focus, a.active.selector-chooseall:hover { + background-position: 100% -144px; +} + +a.selector-clearall { + background: url(../img/selector-icons.svg) 0 -160px no-repeat; +} + +a.active.selector-clearall:focus, a.active.selector-clearall:hover { + background-position: 0 -176px; +} + +.inline-deletelink { + float: left; +} + +form .form-row p.datetime { + overflow: hidden; +} + +.related-widget-wrapper { + float: right; +} + +/* MISC */ + +.inline-related h2, .inline-group h2 { + text-align: right +} + +.inline-related h3 span.delete { + padding-right: 20px; + padding-left: inherit; + left: 10px; + right: inherit; + float:left; +} + +.inline-related h3 span.delete label { + margin-left: inherit; + margin-right: 2px; +} diff --git a/staticfiles/admin/css/rtl.css.gz b/staticfiles/admin/css/rtl.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..8f2db5b2d876d6fc4390126acd547b7e04d1d98d GIT binary patch literal 1222 zcmV;%1UdU3iwFP!00002|Fu|cZ`(Ey{_bBvAQ;f5mMq(e+qs{T^#uhI1ZXl0`$$Q& z#f26Hin7xV`|mr7q$Em|?FCp0BocYNyXWq?q*YY%xXlIl+abJU{DP#oBY6nIk(awlohI*~m4DK6ck? z4Qn(HugOj;+Ea31G=By?I8Dt{lHq(y)QeGBz#h%Fu1>pXm9B~xy%FQ&c`JC8r$NC> zs?fl86#atcN<^7W2_y1>W$APx zH=Ii()9$KK5Oa|dVSLPaPHHu?OLTYh=fm$$b;d8M5=6RYjrX{cTzl_e>?XMJET#J} z7T{eXs$E@dw;q#hwb7?vdUMP$I8U>QX=;x2(S78T}%v-?LM@kY-^ zHfWCz-=A)7?>?jY_oJ>C90QeYV#1OOXjCp6?R-yyFP1++LxB&4%Z6{@$Nz`g?( zIT-f(7mdZF0e_$=vB*(psR#R<5#ZW^Y&1{1Z;(JD1Q)9QoDEI5cfAxiTSxP-h(;J? zIo_$TWB2t&6-!C#z79{f{KZ>2M{my-VoTE_Gtr_)AXiP!C3%ewML)Byd($7^K7IZC zWV%y=8Oc-N4c-TZAbZNIW{%-SlV6Rtos9<7+q$$ym0)kea7K6AnN=T9m~6_h+;87P z#|xJF#)C1ZAlS^xRuuS;yl$;GJgLg*Ig%OQx7VgGSm48z?O=|Iyd6lo_(z7rSK^P( z#;)8sjk}gQ2lIS@*?z}Nk)u9ac#0!|$&?6FMfGsN#n>d<3N%mdG&AzW)CdE8Ysrzo zHgYbpR#!t};Y89saWtEdBJW-s$gwbfXq$;WD98?uy~5*PSEoJJ%150x+o%1WH*Em7 zr<08Hl3>OL+&Srfoi|Xs_%OhL2VORIERJI$C&^rQyI_8G!C><1e@W?Uu^H1kQ-PLOR^iNHjWU|1B-h%_XJr7_>6XagAaGHT z(He%k;{My?Z~CGzj@b{>`oBWVnu1jLTSl#{3#>W6L}h_d^W77XfMq_*N1C0K5TL(EtDd literal 0 HcmV?d00001 diff --git a/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.f94142512c91.md b/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.f94142512c91.md new file mode 100644 index 0000000..8cb8a2b --- /dev/null +++ b/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.f94142512c91.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.f94142512c91.md.gz b/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.f94142512c91.md.gz new file mode 100644 index 0000000000000000000000000000000000000000..1b839219b605ae2f5f7e57a797521d30b9e72785 GIT binary patch literal 685 zcmV;e0#f}SiwFP!00002|6Ni|Z{jczz57>;dTOO?cej_7_GS`OtcEypOj(X0F~qB2 zBij`5?{^$%tFDBC=IgzAZ>$ClORk_aowh;4Jq8bihVIbGY$w7+%BG5uP5F%1lO4s z@t}9z>7Z?FW8&MHQ3tq>DD$qlP24?9B)x7&f@)Ijy#!|y2X~6#bwB}K!pOkbZanpA zhxhVm4(7&?#wV)+LC{k`1!>O=4z4%5^sgsb$J2H+VaT92;pz=0LrPB0PyT&JLxUbi zf(Qopp0s{$cl8)qj>*t?vnZs@d2olXN=zWTleb8zr!f!$pmfEd*)039#ORz5Ds@E0L0gj(ny_Leyjw5XK%`oIOmZa3X9G~bz#KW6* zgroBl-~Tcnk$=IU5p%Vsk^yg^mg1EctbjY(V0@RsnyZCaDZma%E42YJ2U>05g;zxe z>`yIO(}0kKFYA&s%<(EOR|T)0VTN;+z(>#VwIiq!kO*&3oHYq-$z;C3kj{9?)g~iz zuBwDN7ZNDcR4SgYN-CjV$yziF=?jFdcr};E!j`O3kI0HSV6PZJv!G>}s0dx*_A>1U zxu`diKQ9z4L|HIQ&KPb+XC=E*p{Ts1e3?N(m-LxUQvy*WNp08dV7*`|mG~(Ba>YfJ zWaOe!62lBtO7$_i<_*h$O5P+x=29#(lI+9@F@fM*#jYsHYWQ*yY)SE|VIP1{Fj^uO To~Qb9zDM#8M89D%WCQ>J;dTOO?cej_7_GS`OtcEypOj(X0F~qB2 zBij`5?{^$%tFDBC=IgzAZ>$ClORk_aowh;4Jq8bihVIbGY$w7+%BG5uP5F%1lO4s z@t}9z>7Z?FW8&MHQ3tq>DD$qlP24?9B)x7&f@)Ijy#!|y2X~6#bwB}K!pOkbZanpA zhxhVm4(7&?#wV)+LC{k`1!>O=4z4%5^sgsb$J2H+VaT92;pz=0LrPB0PyT&JLxUbi zf(Qopp0s{$cl8)qj>*t?vnZs@d2olXN=zWTleb8zr!f!$pmfEd*)039#ORz5Ds@E0L0gj(ny_Leyjw5XK%`oIOmZa3X9G~bz#KW6* zgroBl-~Tcnk$=IU5p%Vsk^yg^mg1EctbjY(V0@RsnyZCaDZma%E42YJ2U>05g;zxe z>`yIO(}0kKFYA&s%<(EOR|T)0VTN;+z(>#VwIiq!kO*&3oHYq-$z;C3kj{9?)g~iz zuBwDN7ZNDcR4SgYN-CjV$yziF=?jFdcr};E!j`O3kI0HSV6PZJv!G>}s0dx*_A>1U zxu`diKQ9z4L|HIQ&KPb+XC=E*p{Ts1e3?N(m-LxUQvy*WNp08dV7*`|mG~(Ba>YfJ zWaOe!62lBtO7$_i<_*h$O5P+x=29#(lI+9@F@fM*#jYsHYWQ*yY)SE|VIP1{Fj^uO To~Qb9zDM#8M89D%WCQ>J